SQLite - 子クエリ:初級者ガイド
こんにちは、将来のプログラマーさんたち!今日は、SQLiteのサブクエリの世界に一緒に飛び込みます。プログラミングが初めてでも心配しないでください - 私があなたの親切なガイドとして、ステップバイステップですべてを説明します。さあ、どうぞ!
サブクエリとは?
本題に入る前に、サブクエリとは何かを理解しましょう。パーティを計画してゲストリストを作成する場合、まずは全ての友達のリストを作成し、その後近くに住む人たちに絞り込むかもしれません。SQLでは、サブクエリはその第二步 - メインクエリの中に含まれるクエリで、結果を絞り込むものです。
SELECT 文でのサブクエリ
サブクエリの最も一般的な使い方として、SELECT文での利用を見てみましょう。
基本的なサブクエリの例
SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
この例では、平均給与以上の給与を受けている従業員を見つけています。内部クエリ (SELECT AVG(salary) FROM employees)
は平均給与を計算し、外部クエリはこの結果を使って従業員をフィルタリングします。
FROM 節内のサブクエリ
SELECT department, avg_salary
FROM (
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
) AS dept_salaries
WHERE avg_salary > 50000;
ここでは、部署ごとの平均給与を temporary テーブルを作成し、平均給与が50,000以上の部署を選択しています。
INSERT 文でのサブクエリ
サブクエリは、既存情報に基づいてデータをインサートするのにも使用できます。
INSERT INTO high_earners (employee_id, name)
SELECT id, name
FROM employees
WHERE salary > (SELECT AVG(salary) * 1.5 FROM employees);
このクエリは、平均給与の1.5倍以上の給与を受けている従業員を 'high_earners' テーブルにインサートします。
UPDATE 文でのサブクエリ
サブクエリを用いたデータの更新は、他にも強力な機能です。
UPDATE employees
SET bonus = salary * 0.1
WHERE department_id IN (
SELECT id
FROM departments
WHERE performance_rating > 8
);
このクエリは、パフォーマンス評価が8以上の部署に所属する従業員に10%のボーナスを支給します。
DELETE 文でのサブクエリ
最後に、サブクエリを用いたデータの削除を見てみましょう。
DELETE FROM products
WHERE id NOT IN (
SELECT product_id
FROM orders
WHERE order_date > DATE('now', '-1 year')
);
このクエリは、過去1年間に注文されていない商品を削除します。
サブクエリのメソッド
以下の表に、私たちがカバーした異なるメソッドをまとめます:
メソッド | 説明 | 例 |
---|---|---|
SELECT でのサブクエリ | サブクエリを用いてメインクエリのフィルターや計算を行う | SELECT ... WHERE column > (SELECT AVG(...)) |
FROM 節内のサブクエリ | 派生テーブルを作成してクエリを実行する | SELECT ... FROM (SELECT ...) AS derived_table |
INSERT でのサブクエリ | サブクエリを用いてデータをインサートする | INSERT INTO ... SELECT ... WHERE ... |
UPDATE でのサブクエリ | サブクエリを用いてデータを更新する | UPDATE ... SET ... WHERE column IN (SELECT ...) |
DELETE でのサブクエリ | サブクエリを用いてデータを削除する | DELETE FROM ... WHERE column NOT IN (SELECT ...) |
結論
おめでとうございます!あなたは刚刚、SQLiteのサブクエリの世界への第一歩を踏み出しました。自転車に乗るのと同じで、サブクエリをマスターするには練習が必要です。すぐに理解できないとがっかりしないでください - 青写真を試してみてください。そして、すぐに複雑なサブクエリを簡単に書けるようになるでしょう。
最後に、私の教えの経験から小さな話をします:ある生徒がサブクエリで苦労していました。彼女はそれをロシアのナスティングドールに例えました - クエリの中にクエリが入っています。このアナロジーが彼女に概念を視覚的に理解する手助けとなり、すぐにクラスの中で最もサブクエリを書ける人となりました。
ですから、サブクエリをナスティングドールのように見るか、もしくはクエリの宝探しのようにそれぞれのクエリが賞に近づけるものとして見るか、練習を続けてください。データの世界は広大で興味深く、サブクエリはその秘密を解明する鍵です!
快適なクエリを楽しんでください、そしてデータの世界では好奇心があなたの最良の友です。質問を続けると、答えが見つかります!
Credits: Image by storyset