ブール演算子 / 特殊演算子(IN/BETWEEN/LIKE/IS NULL)


ブール演算子

一般にブール式とは TRUE か FALSE というブール値を返すもので、ブール演算子は 1つ以上のブール値を関連づけて 1つのブール値を導き出すものです。

SQL では NULL が存在することから、ブール値として TRUE, FALSE 及び UNKNOWN という 3つのブール値を使用する点で通常とは異なります。

SQL が認識するブール演算子は AND, OR 及び NOT です。

NOT NOT A という形でブール式を受け取って、その値を FALSE から TRUE に変更するか、TRUE から FALSE に変更する
AND A AND B という形でブール式を 2つ受け取り、2つの式が両方とも TRUE の場合は TRUE、それ以外の場合は FALSE と評価する
OR A OR B という形でブール式を 2つ受け取り、どちらかの式が TRUE の場合は TRUE、それ以外の場合は FALSE と評価する
/* データの参照 */
SELECT * FROM 受注表 WHERE NOT 顧客コード = '001'
/* 実行結果 */
受注番号 顧客コード 商品コード 受注個数 納品日
──── ───── ───── ──── ────
10002     002        101       20       20010401
10005     003        101       15       20010403
10007     002        102       20       20010404
10008     002        101       20       20010405
10010     003        101       10       20010406
10012     003        103       20       20010407

 

/* データの参照 */
SELECT 受注番号, 顧客コード, 商品コード, 受注個数 FROM 受注表 WHERE 商品コード = '101' AND 受注個数 >= 15 ;
/* 実行結果 */
受注番号 顧客コード 商品コード 受注個数
──── ───── ───── ────
10002     002        101       20
10005     003        101       15
10006     001        101       15
10008     002        101       20

 

/* データの参照 */
SELECT 受注番号, 顧客コード, 商品コード FROM 受注表 WHERE 顧客コード = '003' OR 商品コード = '102' ;
/* 実行結果 */
受注番号 顧客コード 商品コード
──── ───── ─────
10001     001        102
10005     003        101
10007     002        102
10009     001        102
10010     003        101
10011     001        102
10012     003        103

特殊演算子(IN/BETWEEN/LIKE/IS NULL)

SQL にはブール演算子の他に、IN, BETWEEN, LIKE, IS NULL といった特殊な演算子が用意されています。

IN演算子

IN 演算子を利用することで、含まれる値と含まれない値の集合を明示的に定義することができます。

以下の文はいづれも同じ結果を返します。

/* データの参照 */
SELECT * FROM 受注表 WHERE 顧客コード = '001' OR 顧客コード = '002' ;
SELECT * FROM 受注表 WHERE 顧客コード IN ('001','002') ;
/* 実行結果 */
受注番号 顧客コード 商品コード 受注個数 納品日
──── ───── ───── ──── ────
10001     001        102       30       20010401
10002     002        101       20       20010401
10003     001        103       10       20010402
10004     001        103       15       20010402
10006     001        101       15       20010404
10007     002        102       20       20010404
10008     002        101       20       20010405
10009     001        102       20       20010406
10011     001        102       25       20010407

BETWEEN演算子

BETWEEN 演算子は、述語が TRUE と評価される値の範囲を定義するものです。

ただし、BETWEEN演算子は境界の値を含む事を注意しましょう。

/* データの参照 */
SELECT 受注番号 , 受注個数 FROM 受注表 WHERE 受注個数 BETWEEN 5 AND 15 ;
/* 実行結果 */
受注番号 受注個数
──── ────
10003     10
10004     15
10005     15
10006     15
10010     10

 

/* データの参照 */
SELECT 受注番号 , 受注個数 FROM 受注表 WHERE (受注個数 BETWEEN 5 AND 15) AND NOT 受注個数 IN(5,15);
/* 実行結果 */
受注番号 受注個数
──── ────
10003     10
10010     10

LIKE演算子

LIKE 演算子は、テキスト文字列データ型からサブ文字列を検索するものです。

テキスト列を検索して、ある文字列と一致する部分があるかどうか確認する。LIKE はそのためにワイルドカードを使用します。

アンダスコア記号(_) 1 文字に相当する
パーセント記号(%) 任意数 (0 文字を含む) の連続した文字に相当する
/* データの参照 */
SELECT * FROM 顧客表 WHERE 顧客名 LIKE 'O%' ;
/* 実行結果 */
顧客コード 顧客名
───── ───
002         ONSIDE

もし、ワイルドカードである ‘_’ と ‘%’ を含む文字列のデータで、’_’ と ‘%’ を検索したい場合にはエスケープ文字を使用します。

エスケープ文字は ‘_’ と ‘%’ の直前に配置すると、’_’ と ‘%’ はワイルドカードとして解釈されなくなります。

エスケープ文字は LIKE 句の後ろに ESCAPE 句を記述して指定します。

/* データの参照 */
SELECT * FROM 顧客表 WHERE 顧客名 LIKE '$_%' ESCAPE '$' ;
/* 実行結果 */
(何も出力されず)

IS NULL

IS NULL 演算子は NULL 値を持つデータを検索するものです。

/* データの参照 */
SELECT * FROM 顧客表 WHERE 顧客名 IS NULL ;
/* 実行結果 */
(何も出力されず)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


9 − 7 =

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>