runoobdb# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------1|Paul|32|California|200002|Allen|25|Texas|150003|Teddy|23|Norway|200004|Mark|25|Rich-Mond|650005|David|27|Texas|850006|Kim|22|South-Hall|450007|James|24|Houston|10000(7 rows)
现在,让我们在 SELECT 语句中使用子查询:
runoobdb=# SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY >45000);
得到结果如下:
id | name | age | address | salary
----+-------+-----+-------------+--------4|Mark|25|Rich-Mond|650005|David|27|Texas|85000(2 rows)
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ](SELECT COLUMN_NAME
FROM TABLE_NAME)[ WHERE)]
实例
假设,我们有 COMPANY_BKP 表,是 COMPANY
表的备份。
下面的实例把 COMPANY 表中所有 AGE 大于 27
的客户的 SALARY 更新为原来的 0.50 倍:
runoobdb=# UPDATE COMPANY SET SALARY = SALARY *0.50 WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE >=27);
这将影响两行,最后 COMPANY 表中的记录如下:
id | name | age | address | salary
----+-------+-----+-------------+--------2|Allen|25|Texas|150003|Teddy|23|Norway|200004|Mark|25|Rich-Mond|650006|Kim|22|South-Hall|450007|James|24|Houston|100001|Paul|32|California|100005|David|27|Texas|42500(7 rows)
DELETE 语句中的子查询使用
子查询可以与 DELETE 语句结合使用,就像上面提到的其他语句一样。
基本语法如下:
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ](SELECT COLUMN_NAME
FROM TABLE_NAME)[ WHERE)]
实例
假设,我们有 COMPANY_BKP 表,是 COMPANY
表的备份。
下面的实例删除 COMPANY 表中所有 AGE 大于或等于
27 的客户记录:
runoobdb=# DELETE FROM COMPANY WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE >27);
这将影响两行,最后 COMPANY 表中的记录如下:
id | name | age | address | salary
----+-------+-----+-------------+--------2|Allen|25|Texas|150003|Teddy|23|Norway|200004|Mark|25|Rich-Mond|650006|Kim|22|South-Hall|450007|James|24|Houston|100005|David|27|Texas|42500(6 rows)