新入社員のケンスケは、データベースの複雑なクエリに頭を悩ませていました。そこで、彼は先輩の佐藤さんに「副問合せ」とは何かを尋ねました。
「副問合せって何ですか?」とケンスケが質問しました。
佐藤さんは、「副問合せは、大きなクエリの中に埋め込まれた小さなクエリだよ。ちょうど、パズルの一部を解くようなもの。メインのクエリが全体のパズルで、副問合せはその一部を解くための小さなパズルなんだ」と説明しました。
「例えば?」とケンスケが尋ねました。
佐藤さんは答えました。「たとえば、”SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees)” というクエリね。この中の “(SELECT AVG(salary) FROM employees)” 部分が副問合せで、社員全員の平均給与より多くもらっている社員の情報を取得するんだ。」
副問合せは複雑なデータの問い合わせに役立ちます。特に「IN」や「EXISTS」を用いた副問合せは、特定の条件に合致するデータのみを抽出するのに有用です。以下にその例を示します。
SELECT * FROM employees
WHERE skill_id IN (SELECT skill_id FROM skills WHERE name = 'Python')
このクエリでは、’Python’というスキルを持つ従業員のIDが副問合せを通じて取得され、その結果を用いてメインクエリが従業員の全データを抽出します。
SELECT * FROM customers
WHERE EXISTS (SELECT * FROM surveys WHERE customers.id = surveys.customer_id AND region = '東京')
このクエリでは、東京地域の顧客に関連するアンケートデータが存在するかをチェックし、そのような顧客のみを抽出します。副問合せが真(true)を返す場合のみ、メインクエリが該当する顧客データを取得します。
A. データベースのセキュリティを強化する
B. データベースのデータをバックアップする
C. メインクエリの条件を決定する
A. データベースの構造を変更するとき
B. 複数の情報を組み合わせて検索するとき
C. データベースのパフォーマンスを向上させるとき
A. SELECT * FROM employees
B. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees)
C. UPDATE employees SET salary = 3000
クイズ1: C. メインクエリの条件を決定する
クイズ2: B. 複数の情報を組み合わせて検索するとき
クイズ3: B. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees)