SQL では、サブクエリは別のクエリ内のクエリとして簡単に定義できます。言い換えれば、サブクエリは別の SQL クエリの WHERE 句に埋め込まれたクエリであると言えます。サブクエリの重要なルール:
次のスキャナー
- サブクエリはいくつかの SQL 句に配置できます。 どこ 句、HAVING 句、FROM 句。サブクエリは、SELECT、UPDATE、INSERT、DELETE ステートメントと式演算子で使用できます。これは、=、>、=、<=、Like 演算子などの等価演算子または比較演算子です。
- サブクエリは、別のクエリ内のクエリです。外側のクエリは次のように呼ばれます。 メインクエリ 内部クエリは次のように呼ばれます サブクエリ 。
- 通常、サブクエリに何もない場合、サブクエリが最初に実行されます。 相関関係 とともに メインクエリ 、相関関係がある場合、パーサーが決定を下します。 急いで どのクエリを実行するかについて 優先順位 そして、それに応じてサブクエリの出力を使用します。
- サブクエリは括弧で囲む必要があります。
- サブクエリは比較演算子の右側にあります。
- 注文方法 指示 できない サブクエリで使用できます。 グルービー コマンドは、ORDER BY コマンドと同じ機能を実行するために使用できます。
- 単一行サブクエリでは単一行演算子を使用します。複数行サブクエリでは複数行演算子を使用します。
構文: サブクエリには一般的な構文はありません。ただし、サブクエリは、次に示すように SELECT ステートメントで最も頻繁に使用されることがわかります。
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
サンプルテーブル :
データベース
| 名前 | ROLL_NO | 位置 | 電話番号 |
|---|---|---|---|
| ラム | 101 | チェンナイ | 9988775566 |
| ラージ | 102 | コインバトール | 8877665544 |
| サシ | 103 | マドゥライ | 7766553344 |
| 処理 | 104 | セイラム | 8989898989 |
| スマティ | 105 | カーンチープラム | 8989856868 |
学生
雪と氷
| 名前 | ROLL_NO | セクション |
|---|---|---|
| 処理 | 104 | あ |
| スマティ | 105 | B |
| ラージ | 102 | あ |
サンプルクエリ
:
- DATABASE テーブルのセクションが A である生徒の NAME、LOCATION、PHONE_NUMBER を表示するには
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- 説明 : 最初のサブクエリは STUDENT から SELECT ROLL_NO を実行します。ここで、SECTION='A' は、SECTION が 'A' である STUDENT テーブルから ROLL_NO を返します。次に、外部クエリがそれを実行し、ROLL_NO を持つ学生の DATABASE テーブルから NAME、LOCATION、PHONE_NUMBER を返します。内部サブクエリから返されます。出力:
| 名前 | ROLL_NO | 位置 | 電話番号 |
| 処理 | 104 | セイラム | 8989898989 |
| ラージ | 102 | コインバトール | 8877665544 |
- クエリの挿入例:
表1: 学生1
| 名前 | ROLL_NO | 位置 | 電話番号 | |
|---|---|---|---|---|
| ラム | 101 | チェンナイ | 9988773344 | |
| ラジュ | 102 | コインバトール | 9090909090 | |
| 処理 | 103 | セイラム | 8989898989 |
表 2: 学生 2
| 名前 | ROLL_NO | 位置 | 電話番号 | |
|---|---|---|---|---|
| ラージ | 111 | チェンナイ | 8787878787 | |
| それまで | 112 | ムンバイ | 6565656565 | |
| スリ | 113 | コインバトール | 7878787878 |
- Student2 を Student1 テーブルに挿入するには:
INSERT INTO Student1 SELECT * FROM Student2;>
- 出力:
| 名前 | ROLL_NO | 位置 | 電話番号 | |
|---|---|---|---|---|
| ラム | 101 | チェンナイ | 9988773344 | |
| ラジュ | 102 | コインバトール | 9090909090 | |
| 処理 | 103 | セイラム | 8989898989 | |
| ラージ | 111 | チェンナイ | 8787878787 | |
| それまで | 112 | ムンバイ | 6565656565 | |
| スリ | 113 | コインバトール | 7878787878 |
- Student1 テーブルとロール番号が同じで、場所がチェンナイである Student2 テーブルから学生を削除するには
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- 出力:
1 row delete successfully.>
- Student2 テーブルを表示します。
| 名前 | ROLL_NO | 位置 | 電話番号 | |
|---|---|---|---|---|
| それまで | 112 | ムンバイ | 6565656565 | |
| スリ | 113 | コインバトール | 7878787878 |
- Student1 テーブルの Raju、Ravi と同じ場所にある Student2 テーブルの学生の名前を geek に更新するには
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- 出力:
1 row updated successfully.>
- Student2 テーブルを表示します。
| 名前 | ROLL_NO | 位置 | 電話番号 | |
|---|---|---|---|---|
| それまで | 112 | ムンバイ | 6565656565 | |
| オタク | 113 | コインバトール | 7878787878 |