SELECT...IN句のサンプル †
WHERE句でORを使ってたくさんの検索値を対象にしてSELECTしたい場合がありますよね。
でも、たくさんありすぎるとORだらけのWHEREになってしまい大変です。
こんなの時はIN句を使うとスマートにSQL構文を記述することができます。
以下にIN句を使用したサンプルを記します。
尚、動作確認環境に記したPostgreSQL, MySQL, SQLite3で動作確認を行いました。
関連記事 †
動作確認環境 †
- OS
$ lsb_release -d
Description: Ubuntu 12.04.4 LTS
- PostgreSQL
postgres=# select version();
version
------------------------------------------------------------------------------------------------------
PostgreSQL 9.1.12 on i686-pc-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 32-bit
- MySQL
mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.5.35-0ubuntu0.12.04.2 |
+-------------------------+
1 row in set (0.00 sec)-SQLite3
- SQLite3
$ sqlite3 --version
3.7.9 2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e
使用したサンプルテーブル †
以下のSQLによりテーブルを作成しデータをINSERTしました。
sql1.sql 改行コードLF
CREATE TABLE t1 (
no INT PRIMARY KEY
,country VARCHAR(20)
,capital VARCHAR(20)
);
INSERT INTO t1 VALUES (1,'Japan','Tokyo');
INSERT INTO t1 VALUES (2,'China','Beijing');
INSERT INTO t1 VALUES (3,'Australia','Canberra');
INSERT INTO t1 VALUES (4,'Thailand','Bangkok');
INSERT INTO t1 VALUES (5,'Indonesia','Jakarta');
テーブル構成は以下の通りです。
no primary | country | capital |
1 | Japan | Tokyo |
2 | China | Beijing |
3 | Australia | Canberra |
4 | Thailand | Bangkok |
5 | Indonesia | Jakarta |
IN句を使ってSELECTを行う †
INを使うとWHERE句で書いた場合と以下のような構文の違いがでます。
ORを使用する必要がないので簡潔に記述できます。
- ORを使用
sakura=# SELECT * FROM t1 WHERE no=1 OR no=3 OR no=5;
no | country | capital
----+-----------+---------
1 | Japan | Tokyo
3 | Australia | Canberra
5 | Indonesia | Jakarta
(3 rows)
- INを使用
sakura=# SELECT * FROM t1 WHERE no IN (1,3,5);
no | country | capital
----+-----------+---------
1 | Japan | Tokyo
3 | Australia | Canberra
5 | Indonesia | Jakarta
(3 rows)
SQL構文の違いが確認できますね。
IN句をサブクエリーにすることもできます。
以下のリンクにIN句をサブクエリーにした記事を公開していますので参考にしてください。
以上、IN句のサンプルSQL構文でした。