W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
子查詢(Sub Query)或者說(shuō)內(nèi)查詢(Inner Query),也可以稱作嵌套查詢(Nested Query),是一種嵌套在其他 SQL 查詢的 WHERE 子句中的查詢。
子查詢用于為主查詢返回其所需數(shù)據(jù),或者對(duì)檢索數(shù)據(jù)進(jìn)行進(jìn)一步的限制。
子查詢可以在 SELECT、INSERT、UPDATE 和 DELETE 語(yǔ)句中,同 =、<、>、>=、<=、IN、BETWEEN 等運(yùn)算符一起使用。
使用子查詢必須遵循以下幾個(gè)規(guī)則:
通常情況下子查詢都與 SELECT 語(yǔ)句一起使用,其基本語(yǔ)法如下所示:
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
考慮 CUSTOMERS 表,表中記錄如下所示:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 35 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
現(xiàn)在,讓我們?cè)囈幌略?SELECT 語(yǔ)句中進(jìn)行子查詢:
SQL> SELECT *
FROM CUSTOMERS
WHERE ID IN (SELECT ID
FROM CUSTOMERS
WHERE SALARY > 4500) ;
上述語(yǔ)句的執(zhí)行結(jié)果如下所示:
+----+----------+-----+---------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+---------+----------+
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+---------+----------+
子查詢還可以用在 INSERT 語(yǔ)句中。INSERT 語(yǔ)句可以將子查詢返回的數(shù)據(jù)插入到其他表中。子查詢中選取的數(shù)據(jù)可以被任何字符、日期或者數(shù)值函數(shù)所修飾。
其基本語(yǔ)法如下所示:
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]
考慮與 CUSTOMERS 表?yè)碛邢嗨平Y(jié)構(gòu)的 CUSTOMERS_BKP 表?,F(xiàn)在要將 CUSTOMER 表中所有的數(shù)據(jù)復(fù)制到 CUSTOMERS_BKP 表中,代碼如下:
SQL> INSERT INTO CUSTOMERS_BKP
SELECT * FROM CUSTOMERS
WHERE ID IN (SELECT ID
FROM CUSTOMERS) ;
子查詢可以用在 UPDATE 語(yǔ)句中。當(dāng)子查詢同 UPDATE 一起使用的時(shí)候,既可以更新單個(gè)列,也可更新多個(gè)列。
其基本語(yǔ)法如下:
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
假設(shè)我們有一份 CUSTOMERS_BKP 表作為 CUSTOMERS 表的備份。
下面的示例將 CUSTOMERS 表中所有 AGE 大于或者等于 27 的客戶的 SALARY 字段都變?yōu)榱嗽瓉?lái)的 0.25 倍:
SQL> UPDATE CUSTOMERS
SET SALARY = SALARY * 0.25
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
WHERE AGE >= 27 );
這將影響兩行數(shù)據(jù),隨后 CUSTOMERS 表中的記錄將如下所示:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 35 | Ahmedabad | 125.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 2125.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
如同前面提到的其他語(yǔ)句一樣,子查詢還可以同 DELETE 語(yǔ)句一起使用。
其基本語(yǔ)法如下所示:
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
假設(shè)我們有一份 CUSTOMERS_BKP 表作為 CUSTOMERS 表的備份。
下面的示例將從 CUSTOMERS 表中刪除所有 AGE 大于或者等于 27 的記錄:
SQL> DELETE FROM CUSTOMERS
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
WHERE AGE > 27 );
這將影響兩行數(shù)據(jù),隨后 CUSTOMERS 表中的記錄將如下所示:
+----+----------+-----+---------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+---------+----------+
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+---------+----------+
現(xiàn)在,通過(guò)以下題目測(cè)測(cè)看您對(duì)“SQL 子查詢”的掌握程度吧!
SQL 子查詢:在本部分測(cè)驗(yàn)中,您將練習(xí)使用 SQL 子查詢。
注:以上測(cè)試為付費(fèi)測(cè)試,高級(jí)VIP免費(fèi)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: