■ 副問合せ
SQL文の中にSQL文を書き、内側のSQL文の結果を外側のSQL文で利用することが出来る。 この場合、外側のSQL文を、主問合せ、内側のSQL文を、副問合せという。 また副問合せの中に外側のSQL文の列を指定することを、相関副問合せという。
副問合せ
以下の商品テーブルを参考に説明する。
[商品]
商品番号 | 商品名 | 単価 |
---|---|---|
0001 | うまっ棒 | 10 |
0002 | チロリチョコ | 20 |
0003 | 月見大福 | 90 |
0004 | おむすび煎餅 | 100 |
SELECT * FROM 商品 WHERE 単価 >= (SELECT AVG(単価) FROM 商品);
副問合せの結果は、
[副問合せ結果]
AVG(単価) |
---|
55 |
となり、WHERE句の条件が、 単価 >= 55 になる。
[SQL文実行結果]
商品番号 | 商品名 | 単価 |
---|---|---|
0003 | 月見大福 | 90 |
0004 | おむすび煎餅 | 100 |
SELECT * FROM 商品 WHERE 商品番号 IN (SELECT 商品番号 FROM 商品 WHERE 単価 >= 20);
副問合せの結果は、
[副問合せ結果] |:-:| |商品番号| |0002| |0003| |0004|
となり、WHERE句の条件が、 商品番号 IN ('00002','00003','00004') になる。
[SQL文実行結果]
商品番号 | 商品名 | 単価 |
---|---|---|
0002 | チロリチョコ | 20 |
0003 | 月見大福 | 90 |
0004 | おむすび煎餅 | 100 |
相関副問合せ
- 相関副問合せは、EXISTS演算子を使用する。
以下の商品、在庫テーブルを参考に説明する。
[商品]
商品番号 | 商品名 | 単価 |
---|---|---|
0001 | うまっ棒 | 10 |
0002 | チロリチョコ | 20 |
0003 | 月見大福 | 90 |
0004 | おむすび煎餅 | 100 |
[在庫]
倉庫番号 | 商品番号 | 在庫数 |
---|---|---|
01 | 0001 | 150 |
01 | 0002 | 40 |
01 | 0004 | 20 |
02 | 0001 | 50 |
02 | 0003 | 80 |
SELECT * FROM 商品 WHERE EXISTS (SELECT * FROM 在庫 WHERE 在庫数 >= 50 AND 商品番号 = 商品.商品番号);
相関副問合せの結果は、
[相関副問合せ結果]
商品番号 | EXISTS評価 |
---|---|
0001 | TRUE |
0002 | FALSE |
0003 | TRUE |
0004 | FALSE |
となり、
[SQL文実行結果]
商品番号 | 商品名 | 単価 |
---|---|---|
0001 | うまっ棒 | 10 |
0003 | 月見大福 | 90 |
SELECT * FROM 商品 WHERE NOT EXISTS (SELECT * FROM 在庫 WHERE 在庫数 >= 50 AND 商品番号 = 商品.商品番号);
相関副問合せの結果は、
[相関副問合せ結果]
商品番号 | EXISTS評価 |
---|---|
0001 | FALSE |
0002 | TRUE |
0003 | FALSE |
0004 | TRUE |
となり、
[SQL文実行結果]
商品番号 | 商品名 | 単価 |
---|---|---|
0002 | チロリチョコ | 20 |
0004 | おむすび煎餅 | 100 |
【試験対策】