#navi(../)
* SELECT...IN句のサンプル [#x00eaca4]
WHERE句でORを使ってたくさんの検索値を対象にしてSELECTしたい場合がありますよね。~
でも、たくさんありすぎるとORだらけのWHEREになってしまい大変です。~
こんなの時はIN句を使うとスマートにSQL構文を記述することができます。~
以下にIN句を使用したサンプルを記します。~
尚、動作確認環境に記したPostgreSQL, MySQL, SQLite3で動作確認を行いました。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* 関連記事 [#saf9a93a]
-[[SELECT...IN句のサンプル>SQL/SELECT...IN句のサンプル]]
-[[SELECT...IN句をサブクエリーにするサンプル>SQL/IN句をサブクエリーにするサンプル]]

* 動作確認環境 [#v1bbcc5b]
-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

* 使用したサンプルテーブル [#f3b16392]
以下のSQLによりテーブルを作成しデータをINSERTしました。~
&ref(sql1.sql); 改行コードLF
 CREATE TABLE t1 (
     no      INT PRIMARY KEY
    ,country VARCHAR(20)
    ,capital VARCHAR(20)
 );

 INSERT INTO t1 VALUES (1,'Japan','Beijing');
 INSERT INTO t1 VALUES (2,'China','Canberra');
 INSERT INTO t1 VALUES (3,'Australia','Bangkok');
 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を行う [#f40186e3]
INを使うとWHERE句で書いた場合と以下のような構文の違いがでます。~
ORを使用する必要がないので簡潔に記述できます。
-ORを使用
 sakura=# SELECT * FROM t1 WHERE no=1 OR no=3 OR no=5;
  no |  country  | capital
 ----+-----------+---------
   1 | Japan     | Beijing
   3 | Australia | Bangkok
   5 | Indonesia | Jakarta
 (3 rows)
-INを使用
 sakura=# SELECT * FROM t1 WHERE no IN (1,3,5);
  no |  country  | capital
 ----+-----------+---------
   1 | Japan     | Beijing
   3 | Australia | Bangkok
   5 | Indonesia | Jakarta
 (3 rows)

SQL構文の違いが確認できますね。~
IN句をサブクエリーにすることもできます。~
以下のリンクにIN句をサブクエリーにした記事を公開していますので参考にしてください。
-[[SELECT...IN句をサブクエリーにするサンプル>SQL/IN句をサブクエリーにするサンプル]]

以上、IN句のサンプルSQL構文でした。

#htmlinsertpcsp(db-btm.html,db-sp.html)


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS