English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL 子クエリ

このチュートリアルでは、SQLでクエリを別のクエリに埋め込む方法を学びます。

子クエリとは何か?

子クエリ、もしくはネストクエリ、またはサブセレクションとも呼ばれるのは、SELECT別のSQLクエリに埋め込まれています。 WHERE または HAVING子句のクエリ。子クエリから返されるデータは、外部文で使用される文字値と同じ方法で使用されます。

子クエリは、別のクエリの結果に依存するクエリを処理するための簡単で効果的な方法を提供します。彼らはほぼ通常のSELECT文と同じですが、制限はほとんどありません。最も重要なポイントは以下の通りです:

  • 子クエリは常に括弧内に表示される必要があります。

  • 子クエリではSELECTを使用することはできません。 *を使用することができますが、参照されたテーブルが1列しかない場合を除きます。行比較を行う場合は、複数の列を返す子クエリを使用することができます。

  • 複数の値を返す演算子(例えばIN または NOT IN演算子()の多行の子クエリであってはなりません。

  • 子クエリは、UNION。SELECT文は1つのみ許可されます。

子クエリは最もよくSELECT文とともに使用されることができますが、INSERTUPDATEまたはDELETE文の中で使用されるか、別の子クエリの中で使用されます。

SELECT文を持つ子クエリ

以下の文は、order_valueが5000ドルの顧客の詳細情報が返されます。また、子クエリでキーワードDISTINCT結果セットから重複のcust_id値が排除されました。

SELECT * FROM customers
WHERE cust_id IN (SELECT DISTINCT cust_id FROM orders WHERE order_value > 5000);

ヒント:子クエリは、単一の値、単一の行、単一の列、または1行以上の行や1列以上の列を含むテーブルを返すことができます。

注意:子クエリは、外部SELECTINSERTUPDATEまたはDELETE文のWHEREまたはHAVING子句では、他の子クエリに組み込まれることもできます。

INSERT文を持つ子クエリ

子クエリは、INSERT文とともに使用することもできます。以下はその例です:

INSERT INTO premium_customers 
SELECT * FROM customers 
WHERE cust_id IN (SELECT DISTINCT cust_id FROM orders WHERE order_value > 5000);

上記の文は、子クエリから返されるデータを使用して、order_valueが5000ドルの顧客。

ヒント:参照に関するSQLテーブルクローンのチュートリアルを参照して、INSERT...SELECT文を使用して、別のテーブルから複数の行を速やかにテーブルに挿入する方法を学びましょう。

UPDATE文を持つ子クエリ

あなたは、子クエリとUPDATE文を組み合わせて、テーブルの単一の列または複数の列を更新することができます。以下のように示されます:

UPDATE orders
SET order_value = order_value + 10
WHERE cust_id IN (SELECT cust_id FROM customers WHERE postal_code = 75016);

を通じて現在の注文価値を増やして、10ドル、上記の文は、郵便番号が75016の地域の顧客の注文価値。

DELETE文と子クエリ

同様に、子クエリとDELETE文を組み合わせて、テーブルから行を1行または複数行削除することができます。以下のように示されます:

DELETE FROM orders
WHERE order_id IN (SELECT order_id FROM order_details WHERE product_id = 5);

上記の例のSQL文は、以下のように含むproduct_id為5の製品の注文テーブルからこれらの注文を削除します。