【SQL】IN句で指定できる値の個数

ここでは、ORACLE SQLのIN句を指定した場合に設定できる値の個数について紹介します。

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文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。