副問合せによって複数の値が返されるような場合(複数行副問合せ)はIN句を用いることで,副問合せによって返されるすべての値のうち,どれか一つと一致するレコードを抽出することができます.
IN句を用いた副問合せの書き方は以下とおりです.
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 列名 IN (
SELECT 列名
FROM テーブル名
[WHERE 条件式など]
)
例として以下のテーブルから1件以上の受注実績を持つ社員を取得します.
受注
注文番号 | 商品コード | 担当コード |
---|---|---|
01-101 | A001 | 00001 |
01-102 | A002 | 00001 |
01-103 | B002 | 00004 |
01-104 | D001 | 00005 |
社員
社員コード | 社員名 |
---|---|
00001 | チャーリー |
00002 | ルシール |
00003 | ライナス |
00004 | シュローダー |
00005 | ペパーミント |
00006 | マーシー |
SQL
SELECT 社員コード, 社員名
FROM 社員
WHERE 社員コード IN (
SELECT DISTINCT(担当コード)
FROM 受注
)
結果
社員コード | 社員名 |
---|---|
00001 | チャーリー |
00004 | シュローダー |
00005 | ペパーミント |
まず副問合せによって受注テーブルの担当コード (00001, 00004, 00005) が返され,これらの担当コードのどれか一つと一致する社員コードを持つレコードを抽出します.