发布时间:2024-04-06 23:30:02
子查询也称“内部查询”或者“嵌套查询”,是指将一个 SELECT 查询(子查询)的结果作为另一个 SQL 语句(主查询)的数据来源或者判断条件。注意,MySQL 数据库从 4.1 版本才开始支持子查询,早期版本是不支持的。
SELECT column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])子查询需要放在括号
( )
内。OPERATOR 表示用于 WHERE 子句的运算符。SELECT column_name [, column_name ] FROM (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE]) AS temp_table_name WHERE condition用于 FROM 的子查询返回的结果相当于一张临时表,所以需要使用 AS 关键字为该临时表起一个名字。
+----+----------+-----+-----------+----------+ | 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 | +----+----------+-----+-----------+----------+
+----+----------+-----+---------+--------+ | id | name | age | address | salary | +----+----------+-----+---------+--------+ | 4 | Chaitali | 25 | Mumbai | 6500 | | 5 | Hardik | 27 | Bhopal | 8500 | | 7 | Muffy | 24 | Indore | 10000 | +----+----------+-----+---------+--------+
SELECT * FROM CUSTOMERS WHERE SALARY > (SELECT SALARY FROM CUSTOMERS WHERE NAME='Komal') AND SALARY 该语句用来查询薪水比 Komal 高,但是低于 10000 的客户,执行结果为:+----+----------+-----+---------+--------+ | id | name | age | address | salary | +----+----------+-----+---------+--------+ | 4 | Chaitali | 25 | Mumbai | 6500 | | 5 | Hardik | 27 | Bhopal | 8500 | +----+----------+-----+---------+--------+
2) WHERE 子句中的子查询返回单列多行数据,一般和 IN、NOT INT、ANY 关键字使用,也就是对集合范围的操作。
下面的代码将子查询和 IN 关键字一起使用:SQL> SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500) AND AGE >= 25;该语句用来返回薪水大于 4500、年龄不低于 25 岁的客户,执行结果:+----+----------+-----+---------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+---------+----------+ | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | +----+----------+-----+---------+----------+