SQLでin句を使用して条件を絞る事が可能です。
SQLで複数の条件を絞りたい時に「and」や「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を実行してみます。実行結果は以下となりました。
思い通りの結果になっています。
「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 | 上限サイズまで |
PostgreSQL | 2の64乗、一つの条件が2kバイトまで |
Oracle | 1000個 |
mySQLで「in句」の上限を調べるコマンド
MySQLでの上限サイズは以下のSQLコマンドで確認する事が出来ます。
show variables like 'max_allowed_packet';
MySQLでの上限サイズを確認する為に、上記のコマンドを実行します。
Variable_name | Value |
max_allowed_packet | 1048576 |
MySQLでの上限サイズは「1048576バイト」になります。
SQLで「in句」の否定系を書く
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);
結果は以下となりました。
先程のテーブルで「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 | 上限サイズまで |
PostgreSQL | 2の64乗、一つの条件が2kバイトまで |
Oracle | 1000個 |
SQLでin句を使用すればorより完結に書けることが分かったと思います。