WHERE句で使用できるいろいろな書式

データベース

値の範囲を示す

『AとBの間』という、値の範囲を表す場合には、BETWEEN句を使います。

書式

カラム名 BETWEEN 値1 AND 値2

カラムの値が値1以上値2以下である、という条件を表します。両端(値1、値2)を含みます。

SQL
 SELECT * FROM meibo WHERE height BETWEEN 170 AND 175;

meiboテーブルから、身長(height)が170以上175以下のレコードを抽出します。

実行結果

練習

テーブルex_shohinから、価格(price)が180~200円(両端含む)のレコードを抽出するSQLを記述しなさい。

文字列の部分一致

文字列の比較をする場合、『=』を使うと完全一致するレコードのみ抽出されます。しかし完全一致ではなく『指定された文字列を含むレコードをすべて抽出したい』ということもよくあります。そのような場合には LIKE 演算子を使います。

書式

カラム名 LIKE検索する文字列

検索する文字列の中で、『%(パーセント)』『_(アンダースコア)』は特殊な意味を持ちます。

文字意味
%空文字列を含む任意の文字列と一致します
_任意の1文字と一致します。

つまり、たとえば

検索文字列一致する文字列の例
%町田『町田』および『原町田』『本町田』など、『町田』で終わる文字列
町田%『町田』および『町田市役所』『町田駅』など、『町田』で始める文字列
%町田%上記2つに加え『JR町田駅』『各駅停車町田ゆき』など『町田』を途中に含む文字列

SQL
SELECT * FROM meibo WHERE email LIKE 'yamada%';
実行結果

emailが ‘yamada’ で始まるレコードを抽出しました。

練習

テーブルex_shohinから、noteに『糖質』を含むレコードを抽出するSQLを記述しなさい。

複数の値のいずれかに一致

あるカラムの値が、いくつかの値のうちのいずれかに等しいことを示すには、IN 演算子を使います。

書式

カラム名 IN値のカンマ区切りリスト

この条件式は、カラムの値がカンマ区切りリストの中のいずれかと一致するときに真となります。

SQL
SELECT * FROM meibo WHERE id IN (1,3);

idの値が1または3のレコードを抽出します。

実行結果

条件に当てはまらないレコードを抽出

NOT演算子は、他の条件式と組み合わせて『○○ではないもの』を表します。

書式

カラム名 NOT LIKE検索文字列

カラムの値が検索文字列と一致しないことを表します。

カラム名 NOT BETWEEN 値1 AND 値2

カラムの値が値1以上値2以下の範囲にない(値1より小さいか、または値2より大きい)を表します。

カラム名 NOT IN値のカンマ区切りリスト

カラムの値がリストに列挙されたいずれの値とも一致しないことを表します。

例1

SQL
SELECT * FROM meibo WHERE email NOT LIKE 'yamada%';
実行結果

例2

SQL
SELECT * FROM meibo WHERE height NOT BETWEEN 170 AND 175;
実行結果

例3

SQL
SELECT * FROM meibo WHERE id NOT IN (1,3);
実行結果

条件を組み合わせる

『条件が同時に成り立つ』『条件のいずれかが成り立つ』など、複数の条件式を組み合わせて複雑な条件を記述することができます。

条件式の基本的な組み合わせ方は2つあります。

書式1

条件式1 AND 条件式2

条件式1と条件式2が同時に成り立つことを表します。

書式2

条件式1 OR 条件式2

条件式1と条件式2のうち、少なくとも1つが成り立つことを表します。

条件式には、ここまでに学んだ条件式の記法すべてを使うことができます。

書式(組み合わせ)1

条件式1 AND 条件式2 AND 条件式3AND 条件式n

すべて AND のとき、条件式1、条件式2、条件式3…条件式nのすべてが同時に成り立つときに真となります。

書式(組み合わせ)2

条件式1 OR 条件式2 OR 条件式3OR 条件式n

すべて OR のとき、条件式1、条件式2、条件式3…条件式nのいずれか少なくとも1つが成り立つときに真となります。

書式(組み合わせ)3

ANDとORの両方を含む場合、ORよりもANDの方が高い優先順位となります。つまり、

条件式1 OR 条件式2 AND 条件式3

ならば、『条件式2と条件式3が同時に成り立つ』または『条件式1が成り立つ』という意味になります。

書式(組み合わせ)4

優先順位を変更する場合は( )を使います。( )で囲まれた部分の優先順位が高くなります。つまり、

条件式1 OR 条件式2AND 条件式3

ならば、『条件式1と条件式2のいずれかが成り立ち、かつ条件式3が成り立つ』という意味になります。

例1

SQL
SELECT * FROM meibo WHERE height>=170 AND weight<=75;

meiboテーブルから、身長(height)が170以上かつ体重(weight)が75以下のレコードを抽出します。

実行結果

例2

SQL
SELECT * FROM meibo WHERE birthday>'2001-01-01' OR email LIKE 'yamada%';

meiboテーブルから、誕生日(birthday)が2001-01-01より後か、またはemailがyamadaで始まるレコードを抽出します。

実行結果

練習

テーブルex_shohinから、以下の条件を満たすレコードを抽出するSQLを記述しなさい。

1.noteに”糖質”を含み、かつpriceが200以下のレコード

2.noteに”ビタミンB2″または”βカロテン”を含み、かつpriceが200以下のレコード

コメント

タイトルとURLをコピーしました