MySQL中子查询的应用和语法规则:
我们先引入一个例子:在薪资表中比较谁的工资比Abel高
方法一(分两步进行),参考代码如下:
SELECT salary
FROM employees
WHERE last_name = 'Abel';
SELECT last_name,salary
FROM employees
WHERE salary > 11000;
方法二 (内连接),参考代码如下:
SELECT e2.last_name,e2.salary
FROM employee e1,employee e2
WHERE e1.last_name = 'Abel'
AND e2.`salary`> e1.`salary`;
方法三 (子查询),参考代码如下::
SELECT last_name,salary
FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE last_name = 'Abel'
);
通过以上代码,我们可以看出,所谓子查询,其实是一种嵌套查询,上一步查询的结果作为下一步的过滤条件。
1.
子查询概述:
声明在外面的查询的结构:外查询、主查询
声明在里面的查询的结构:内查询、主查询
子查询的分类:单行子查询、多行子查询
写子查询的步骤:从外往里写,从里往外写。
我们一般建议从里往外写,这样每写一步就可以检查,不至于到最后出了问题都不知道是哪一步的问题。
--------------------------------------------(分割线)---------------------------------------------
2.
单行子查询:内查询(主查询)返回出的结果只有一个
我们通过例子来说明单行子查询
举例1:返回job_id
与141号员工相同,salary
比143号员工多的员工姓名、job_id
和工资
参考代码如下:
SELECT last_name,job_id,salary
FROM employees
WHERE job_id = (
SELECT job_id
FROM employees
WHERE employee_id = 141)
AND salary > (
SELECT salary
FROM employees
WHERE employee_id = 143);