ORDER BY 不能用在子查詢(xún)中,雖然主查詢(xún)可以使用 ORDER BY。可以在子查詢(xún)中使用 GROUP BY,功能與 ORDER BY 相同。
子查詢(xún)返回多于一行,只能與多值運(yùn)算符一起使用,如 IN 運(yùn)算符。
BETWEEN 運(yùn)算符不能與子查詢(xún)一起使用,但是,BETWEEN 可在子查詢(xún)內(nèi)使用。
SELECT 語(yǔ)句中的子查詢(xún)使用
子查詢(xún)通常與 SELECT 語(yǔ)句一起使用?;菊Z(yǔ)法如下:
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
實(shí)例
假設(shè) COMPANY 表有以下記錄:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
現(xiàn)在,讓我們檢查 SELECT 語(yǔ)句中的子查詢(xún)使用:
sqlite> SELECT *
FROM COMPANY
WHERE ID IN (SELECT ID
FROM COMPANY
WHERE SALARY > 45000) ;
這將產(chǎn)生以下結(jié)果:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
實(shí)例
假設(shè),我們有 COMPANY_BKP 表,是 COMPANY 表的備份。
下面的實(shí)例把 COMPANY 表中所有 AGE 大于或等于 27 的客戶(hù)的 SALARY 更新為原來(lái)的 0.50 倍:
sqlite> UPDATE COMPANY
SET SALARY = SALARY * 0.50
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
WHERE AGE >= 27 );
這將影響兩行,最后 COMPANY 表中的記錄如下:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 10000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 42500.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
實(shí)例
假設(shè),我們有 COMPANY_BKP 表,是 COMPANY 表的備份。
下面的實(shí)例刪除 COMPANY 表中所有 AGE 大于或等于 27 的客戶(hù)記錄:
sqlite> DELETE FROM COMPANY
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
WHERE AGE > 27 );
這將影響兩行,最后 COMPANY 表中的記錄如下:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 42500.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0