SQL第一歩第23話.サブクエリ
16458 ワード
サブクエリ
サブクエリは、SELECTコマンドで括弧で囲まれて指定された下位レベルのクエリです.通常、SQLコマンドに割り当てられるWHERE文.
1.DELETEのWHERE文でサブクエリを使用する
sample 54テーブルは、a値が最も小さいローを削除しようとします.
通常は以下の手順で行います.
SELECT MIN(a)を使用して最小値を検索→DELETE文を使用して行を削除
DELETE FROM sample54 WHERE a=(SELECT MIN(a) FROM sample54);
➊MySQLは、同じテーブルがサブクエリで使用できないため、データの追加/更新中にエラーが発生します.次の図に示すように、テンポラリ・テーブルを「行内ビュー」で処理して結果を表示します.
DELETE FROM sample54 WHERE a=(SELECT a FROM(SELECT MIN(a) AS a FROM sample54) AS x);
2.スカラー値
サブクエリを使用する場合は、SELECTコマンドが返す値に注意してください.
> SELECT MIN(a) FROM sample54;
// a열에서 가장 적은 수 출력
SELECT no FROM sample54;
// no값만 출력
SELECT MIN(a),MAX(no) FROM sample54;
// a열에서 가장 적은수, no열에서 가장 높은 수 출력
SELECT no,a FROM sample54;
열 지정하여 출력
1番モードのみが他のモードとは異なり、1つの値を返します.3.SELECT文でサブクエリを使用
SELECT (SELECT COUNT(*) FROM sample51) AS sql1,(SELECT COUNT(*) FROM sample54) AS sql2;
SELECT文では、標準量子クエリを使用できます.
4.SET文でのサブクエリの使用
SET領域ではサブクエリも使用できます.
mysql > UPDATE sample54 SET a = (SELECT a FROM (SELECT MAX(a) AS a FROM sample54) AS x);
Query OK, 1 row affected (0.00 sec)
Rows matched: 2 Changed: 1 Warnings: 0
mysql > SELECT * FROM sample54;
+------+------+
| no | a |
+------+------+
| 1 | 900 |
| 2 | 900 |
+------+------+
2 rows in set (0.00 sec)
5.FROMフレーズでサブクエリを使用する
mysql > SELECT * FROM (SELECT * FROM sample54) AS sq;
+------+------+
| no | a |
+------+------+
| 1 | 900 |
| 2 | 900 |
+------+------+
2 rows in set (0.00 sec)
上記の形態を「nasted構造」、「重ね合わせ構造」などと呼ぶ.5-1. 実際のビジネスでFROM文にサブクエリを指定すると、
SELECT * FROM (
SELECT * FROM sample54 ORDER BY a DESC
) AS sq WHERE ROWNUM <= 2;
OracleにはLIMIT文がありません.このコマンドは、ソート後に抽出するローを制限するときに発行されます.6.INSERTコマンドとサブクエリ
サブクエリはINSERTコマンドにも使用できます.方法は2つあります.
mysql > INSERT
INTO sample541
VALUES((SELECT COUNT(*)
FROM sample51),
(SELECT COUNT(*)
FROM sample54));
Query OK, 1 row affected (0.00 sec)
mysql > SELECT * FROM sample541;
+------+------+
| a | b |
+------+------+
| 5 | 2 |
+------+------+
1 row in set (0.00 sec)```
上記の値は、整数型a、b列からなる空のテーブルsample 541に追加することができる.②の場合はINSERT SELECTと呼ばれるコマンドです.
$ mysql > INSERT INTO sample541 SELECT 1, 2;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
$ mysql > SELECT * FROM sample541;
+------+------+
| a | b |
+------+------+
| 5 | 2 |
| 1 | 2 |
+------+------+
2 rows in set (0.00 sec)
mysql > SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
1 row in set (0.00 sec)
Reference
この問題について(SQL第一歩第23話.サブクエリ), 我々は、より多くの情報をここで見つけました https://velog.io/@donghoim/SQL-첫걸음-23강.-서브쿼리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol