SQLとは
SQLではSELECT文のWHERE句の探索条件にまたSELECT文を入れることができます。 この入れ子になっているSQL文のことを入れ子型質問といいます。
商品
![](./img/a1.gif)
納品
![](./img/a2.gif)
顧客
![](./img/a3.gif)
図2
![](./img/a1.gif)
納品
![](./img/a2.gif)
顧客
![](./img/a3.gif)
図2
SELECT 顧客番号, 顧客名
FROM 顧客
WHERE 顧客番号 IN
(SELECT 顧客番号
FROM 納品
WHERE 商品番号='A1')
![](./img/c1.gif)
上記の例では「商品番号A1の商品を納品している顧客の顧客番号と顧客名」を求めています。 ここで、INはSQLで導入され、リレーショナル代数にはなかった比較演算子であり、 Xをリスト(x1, x2, ・・・, xn)とするとき、x IN Xは x=x1 OR x=x2 OR ・・・ OR x=xnと等価な述語を表します。 まず以下の入れ子型質問を計算します。
SELECT 顧客番号
FROM 納品
WHERE 商品番号='A1'
![](./img/c2.gif)
そして、元の質問文は以下のような単純質問に帰着します。
SELECT 顧客番号, 顧客名
FROM 顧客
WHERE 顧客番号