[記事公開日]2015/01/17
[最終更新日]2016/11/29

基本情報技術者試験 8-8(副問い合わせ)

これでSQLは最後になりますので、

頑張りましょう。

 

前半と後半で、二度SELECT句が登場します。

最初に登場するSELECT句を「主問い合わせ」といいます。

後半のカッコで囲まれた句を「副問い合わせ」といいます。

 

あらかじめお伝えしますと、

・主問い合わせ

・副問い合わせ

・相関問い合わせ

が登場します。

 

三段階にして、抽出条件をさらに細かくしたいときに

使用します。

 

<例1>

SELECT * FROM 社員表

WHERE 社員番号

IN (SELECT 社員番号 FROM 社員スキル表 WHERE スキルコード=’IP’)

8-1

8-2

文章にすると・・

社員スキル表から

スキルコードが”IP”をである社員番号を探します。

そして、社員表からその社員番号が存在する列を抽出する。

8-3

 

また、

「IN]を「NOT IN」にすると、

「含まない」という意味になります。

8-85

 

<例2>

SELECT * FROM 社員表

WHERE 社員番号

IN(‘002′,’005′)

下のSQLと同じ意味です

SELECT * FROM 社員表

WHERE 社員番号=’002’ OR 社員番号=’005′

 

試験では記述問題はないですが、

「同じ結果になる式は?」と聞かれたときに、

この選択肢を選べるようにしておきましょう。

 

◆EXIST文

(EXIST:存在する)

EXISTSを指定された副問い合わせ(後半SELECT句)では、

主問い合わせ(前半SELECT句)で指定されたデータが

存在すれば真(TRUE)を返し、

存在しなければ偽(FALSE)を返します。

真の行だけが抽出されます。

意味的には「IN」「OR」と同じです。

<例3>

SELECT * FROM 社員表

WHERE EXISTS

(SELECT * FROM 社員スキル表

WHERE スキルコード=’IP’ AND

社員表,社員番号=社員スキル表,社員番号)

8-81

8-822

「社員表の社員番号」と「社員スキル表の社員番号」が

同じで、かつスキルコードがIPである行を社員スキル表から

選択します。元の主問い合わせに戻り、社員表から

該当する行を取り出します。

終わりです。

8-833

 

以上でSQLは終わりです。

 

残りの2章は「セキュリティ」や「関連する法律」を学びます。

一般常識え答えるか、その応用で解けますのでご安心ください。

 

お疲れ様でした!!