サイトアイコン スグブログ

【SQL基礎】in句を使用して複数条件を綺麗に書く|orで失敗する人へ

SQLでin句を使用して条件を絞る事が可能です。

SQLで複数の条件を絞りたい時に「and」や「or」を使用すると思います。

しかし「or」を使用すると失敗したり、条件の記述が長くなってしまって綺麗ではない。と言った悩みに当たった事もあると思います。

そこで今回はプログラミングを普段使用している筆者が、SQLで条件を絞る時にオススメの「in句」をご紹介します。

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

SQLで条件を絞りたいけど「or句」で失敗してしまう、またはもっと条件をスマートに表示したいという方は「in句」を使用すれば解決しますよ。

SQLで「in句」を使用して複数条件を綺麗に書く

SQLで「in句」を使用する基礎構文

SQLで「in句」を使用する時の基礎構文は以下となります。

select * from テーブル名 where カラム名 in (条件1,条件2,条件3,・・・);

SQLで「in句」を使用するメリット

SQLで複数の条件を「in句」で使用すれば、「カラム名」を一回しか記述しないのでSQL構文が綺麗になります。

またSQLでorを使用して思い通りにいかない場合も、「in句」を使用すれば上手くSQLが動くこともあります。

SQLで「in句」を実際使用する

SQLで「in句」を実践する

では実際にSQLで「in句」を使用してみましょう!

下のようなテーブルがあったとします。

データベースのテーブル例

年齢が23歳、55歳、37歳の氏名と名前を取り出してみましょう。

「in句」を用いたSQLは以下となります。

select `氏名`,`名前`,`年齢` from `人員` where `年齢` in (23,55,37);

このSQLを実行してみます。実行結果は以下となりました。

SQLでin句を使用した結果

思い通りの結果になっています。

「in句」と「or句」を比較してみる

ではこのSQL構文を「or句」で表すにはどうすれば良いでしょうか?

先程の結果となるSQL構文は以下となります。

select `氏名`,`名前`,`年齢` from `人員` where `年齢` = 23 or `年齢` = 55 or `年齢` = 37;

条件3つでもかなり長いSQL構文になってますね。また条件の「年齢」を3回も記述しています。

SQLのin句と比べてor句では条件が増える度に条件が長くなり、条件分「年齢」を記述しないといけません。

見にくいですし記述するのも面倒ですので、SQLで複数条件を使用したい場合は「in句」を使用する方がメリットがあります。

SQLで「in句」の条件の上限について

SQLで「in句」を使用する時の上限をまとめる

SQLで「in句」を使用する時の上限はあるのでしょうか。

データベースの種類SQLで「in句」の上限数
mySQL上限サイズまで
PostgreSQL2の64乗、一つの条件が2kバイトまで
Oracle1000個
SQLのin句での上限まとめ表

mySQLで「in句」の上限を調べるコマンド

MySQLでの上限サイズは以下のSQLコマンドで確認する事が出来ます。

show variables like 'max_allowed_packet';

MySQLでの上限サイズを確認する為に、上記のコマンドを実行します。

Variable_nameValue
max_allowed_packet1048576
mySQLのin句での上限

MySQLでの上限サイズは「1048576バイト」になります。

SQLで「in句」の否定系を書く

Business person stand on road fork with hard and easy directions. Choice way isometric

SQLの「in句」での否定形構文

ではSQLの「in句」で否定形を書くにはどうすればよいでしょうか?

答えは以下の構文になります。

select * from テーブル名 where カラム名 not in (条件1,条件2,条件3,・・・);

「in」の前に「not」を記述するだけです。

SQLの「in句」否定形を実行してみる

では実際に否定形を実行してみましょう!先程のDBに対して以下のSQLコマンドを実行します!

select `氏名`,`名前`,`年齢` from `人員` where `年齢` not in (23,55,37);

結果は以下となりました。

SQLでnot_in句を使用した結果

先程のテーブルで「in句」を用いて出した人物以外の人が抽出されているので成功です。

SQLで「in句」を使用して複数条件を綺麗に書くまとめ

今回のまとめです。

SQLで「in句」を使用する基礎構文

SQLで「in句」を使用する時の基礎構文は以下となります。

select * from テーブル名 where カラム名 in (条件1,条件2,条件3,・・・);

SQLの「in句」での否定形構文

SQLの「in句」否定形の基礎構文は以下となります。

select * from テーブル名 where カラム名 not in (条件1,条件2,条件3,・・・);

SQLで「in句」を使用する時の上限をまとめる

SQLで「in句」を使用する時の上限はあるのでしょうか。

データベースの種類SQLで「in句」の上限数
mySQL上限サイズまで
PostgreSQL2の64乗、一つの条件が2kバイトまで
Oracle1000個
SQLのin句での上限まとめ表

SQLでin句を使用すればorより完結に書けることが分かったと思います。

モバイルバージョンを終了