【SQL】IN句で指定できる値の個数
ここでは、ORACLE SQLのIN句を指定した場合に設定できる値の個数について紹介します。
SELECT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】SELECT文の書き方:サンプル多数あり
IN句の書き方
SQLで、複数の値と一致するレコードを抽出したいとき、IN句を使います。
例えば、TAB1テーブルのCOL1列の値が、AかB、Cに一致するレコードを取得する場合は、次のように記述します。
select * from table1 a where a.col1 in ('A','B','C');
ただし、IN句に指定できる値の個数には上限があるので注意が必要です。
IN句で指定できる値の個数
結論から言うと、IN句に指定できる値の数は1,000個が上限です。
1,000個というとかなり多いと思います。実際に1,000個を指定する機会はめったにありません。
ただし、プログラムやアプリケーションでは、IN句に指定する値を動的に作成して、SQLを実行するケースがあります。
動的にSQLを作る場合に、元となるデータが多かったりすると、意外と簡単に1,000個の上限を超えてしまいます。
IN句の値に1,000個以上の値をセットすると・・・
IN句に1,000個以上の値をセットすると、SQLエラーとなります。
もし、仮に次のSQLのように1,000個以上の値を設定すると、SQLエラーとなります。プログラムはEXCEPTIONが発生してABENDすると思います。
select * from table1 a where a.col1 in ('1','2','3'・・・'2000');
対処法としては、IN句の値を動的にセットするのではなく、副問合せとして取得するようにSQLを変更する方法があります。
select * from table1 a where a.col1 in (select b.col1 from table2 b);
まとめ
IN句に設定できる値の上限は、1,000個です。
上限を超えて設定するとSQLエラーになるので、注意してプログラミングする必要があります。
この他にも、SELECT文には様々な機能や使い方があります。
詳しくは「【SQL】SELECT文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。