B L O G

  1. TOP
  2. BLOG
  3. はじめてのSQL【中級編:述語について①】
プログラミング
2025.05.19

はじめてのSQL【中級編:述語について①】

こんちには。

スタッフブログ担当の岩でございます。

前回の記事では論理演算子について説明いたしました。

はじめてのSQL【初級編:WHERE句について③】

今回はWHERE句で使う「述語」について説明いたします。

今回はShopテーブルとSampleLikeテーブルを使って説明します。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0001ボールペン事務用品100502020-10-20
0002おろしがねキッチン用品5003502020-09-07
0003フォークキッチン用品10030
0004圧力鍋キッチン用品500010002020-04-25
0005包丁キッチン用品80002020-07-05
0006カッターシャツ衣類300015002020-06-11
0007穴あけパンチ事務用品4002402020-11-27
0008Tシャツ衣類15002020-03-13
Shopテーブル
No.(番号)string_colmn(文字列)
01abcddd
02dddabc
03abdddc
04abcdd
05ddabc
06abddc
SampleLikeテーブル

   

述語

述語とは、「戻り値が真理値になる」関数です。

述語の戻りはすべて真理値(TRUE、FALSE、UNKNOWN)となります。

よく使われる述語は以下の通りです。

述語使い方
LIKE文字列の部分一致検索
BETWEEN範囲検索
IS NULLNULLであるかの判定
IS NOT NULL非NULLであるかの判定
INORの便利な省略形
EXISTS指定された条件にあてはまるレコード(行)が存在するか判定
よく使われる述語一覧

この記事では「LIKE」、「BETWEEN」、「IS NULL」、「IS NOT NULL」について説明いたします。

LIKE述語

文字列を検索する場合、比較演算子の「=」を使うことがありますが、

これは文字列が完全に一致する場合にしか真(TRUE)となりません。

LIKE述語は文字列の部分一致検索を行うときに使います。

部分一致には大きく分けて「前方一致」、「中間一致」、「後方一致」の3種類があります。

今からSampleLikeテーブルで具体例を使って説明いたします。

●前方一致検索

SELECT *
FROM SampleLike
WHERE string_colmn LIKE 'ddd%';

前方一致とは、検索条件となる文字列が検索対象の文字列の最初に位置しているレコードだけが

選択される検索の方法です。

LIKE述語の右側で’ddd%’と指定しました。

「%」は「0文字以上の任意の文字列」を意味する特殊な記号で、

この場合は「dddではじまるすべての文字列」という意味になります。

検索結果は下記の通りとなります。

No.(番号)string_colmn(文字列)
02dddabc
前方一致検索結果

このように文字列の中に含まれる規則(今回であれば「dddを含む」という規則)に基づいて

検索することを「パターンマッチング」と呼びます。

LIKE述語を使うとパターンマッチングを記述することが可能となります。

  

●中間一致検索

SELECT *
FROM SmpleLike
WHERE string_colmn LIKE '%ddd%';

中間一致は検索条件となる文字列が検索対象の文字列の「どこか」に含まれていれば

レコードが選択される検索の方法です。

最初でも最後でも、真ん中でも構いません。

‘%ddd%’というように検索する文字列の最初と最後を「%」で囲むことで、

「文字列中のどこかにdddがある文字列」を表現しています。

検索結果は下記の通りとなります。

No.(番号)string_colmn(文字列)
01abcddd
02dddabc
03abdddc
中間一致検索結果

  

●後方一致検索

SELECT *
FROM SampleLike
WHERE string_colmn LIKE '%ddd';

後方一致とは前方一致の反対で、検索条件となる文字列が文字列の最後尾にある

レコードだけが選択される方法です。

検索結果は下記の通りとなります。

No.(番号)string_colmn(文字列)
01abcddd
後方一致検索結果

また、「%」の代わりに「_」(アンダーバー)を使うこともできますが、

これは「%」と違い「任意の1文字」を意味します。

例えば、「abc + 任意の2文字」で構成される文字列を検索する場合は、下記の通りに記述します。

SELECT *
FROM SampleLike
WHERE string_colmn LIKE 'abc__';
No.(番号)string_colmn(文字列)
04abcdd
アンダーバーで検索した結果

検索条件を「abc%」とすると「abcddd」と「abcdd」のふたつが選択されますが、

アンダーバーを使って文字数を制限したことで「abcdd」のみが選択されました。

 

BETWEEN述語

BETWEENは、範囲検索を行います。

例えば、Shopテーブルから販売単価が100円から1000円までの商品を選択する場合、

下記の通りに記述します。

SELECT shohin_id, shohin_mei, hanbai_tanka
FROM Shop
WHERE hanbai_tanka BETWEEN 100 AND 1000;
shohin_id
(商品ID)
shohin_mei
(商品名)
hanbai_tanka
(販売単価)
0001ボールペン100
0002おろしがね400
0003フォーク100
0007穴あけパンチ500
BETWEENを使った検索の結果

   

BETWEENの特徴は、「100」と「1000」という両端の値も含むことです。

もし両端の値を結果に含みたくない場合は「<>」を使って書く必要があります。

SELECT shohin_id, shohin_mei, hanbai_tanka
FROM Shop
WHERE hanbai_tanka > 100
AND   hanbai_tanka < 100;
shohin_id
(商品ID)
shohin_mei
(商品名)
hanbai_tanka
(販売単価)
0002おろしがね400
0007穴あけパンチ500
<>を使った検索の結果

  

IS NULL、IS NOT NULL

NULLの行を選択するためには「=」を使うことはできません。

IS NULLという述語を使う必要があります。

こちらの記事でも説明しております。

はじめてのSQL【初級編:WHERE句について①】

SELECT shohin_id, shohin_mei, shiire_tanka
FROM Shop
WHERE shiire_tanka IS NULL;
shohin_id
(商品ID)
shohin_mei
(商品名)
hanbai_tanka
(販売単価)
0005包丁
0008Tシャツ
IS NULL検索の結果

  

反対に、NULL以外の行を選択したければ IS NOT NULL を使います。

SELECT shohin_id, shohin_mei, shiire_tanka
FROM Shop
WHERE shiire_tanka IS NOT NULL;
shohin_id
(商品ID)
shohin_mei
(商品名)
hanbai_tanka
(販売単価)
0001ボールペン50
0002おろしがね350
0003フォーク30
0004圧力鍋1000
0006カッターシャツ1500
0007穴あけパンチ240
IS NOT NULL検索の結果

  

まとめ

述語はSQLで抽出条件を記述するときに不可欠なものです。

以前の記事で紹介した比較演算子も述語の仲間で、正確には「比較述語」といいます。

次回は今回説明できなかった「IN」や「EXISTS」などの述語を説明いたします。

最後まで読んでくださりありがとうございました。