7.12子查询 'WHERE 条件(子查询结果)' 先执行括号里边的
----------------------------查询工资大于Bruce的人------------------------
#1 查询bruce工资
SELECT salary FROM t_employees WHERE FIRST_NAME = 'Bruce'
#2 查询工资大于6000的
SELECT * FROM t_employees WHERE salary > 6000;
----------------------------如何整合?---------------------------------------------
SELECT * FROM t_employees
WHERE salary > (SELECT salary FROM t_employees WHERE FIRST_NAME = 'Bruce');
7.12子查询 枚举查询
# 查询与king同一部门员工
#工资高于60部门所有人信息 ALL ANY
7.13 子查询 (作为一张表)
SELECT 列名 FROM (子查询的结果集) WHERE 条件;
# 查询工资排名前5的员工信息
# 1 先对所有员工的薪资进行排序(排序后的临时表)
SELECT employee_id,first_name,salary FROM t_employees ORDER BY salary DESC;
# 2 查询临时表中前5行员工
SELECT employee_id,first_name,salary FROM (临时表)
#3 整合
SELECT employee_id,first_name,salary
FROM (SELECT employee_id,first_name,salary FROM t_employees ORDER BY salary DESC) AS temp
LIMIT 0,5;
将子查询”多行多列“的结果作为外部查询的一张表,做第二次查询。
注意:子查询作为临时表,为其赋予一个临时表名
7.14 合并查询
SELECT * FROM 表名1 UNION SELECT * FROM 表名2
#注意: 合并结果的俩张表, 列数必须相同, 列的数据类型可以不同 纵向结果合并 (去除重复记录),且查询结果以表名1为主
SELECT * FROM 表名1 UNION ALL SELECT * FROM 表名2
#不会去除重复记录
7.15 表连接查询
SELECT 列名 FROM 表1 连接方式 表2 oN 连接条件
内连接查询(INNER JOIN ON)
1 SQL标准 : # 查询所有有部门的员工信息(不包括没有部门的员工)
SELECT * FROM t_employees
INNER JOIN t_jobs
ON t_employees.'JOB_ID' = t_jobs.'JOB_ID' ;
如果不指定连接条件(on),则会造成笛卡尔积的结果
2 MYSQL特有的写法: SELECT * FROM t_employees,t_jobs WHERE t_employees.J0B_ID=t. jobs.J0B_ID
三表连接查询
#查询所有员工工号、名字、部门名称、部门所在国家ID
SELECT * FROM t_employees e
INNER JOIN t_departments d
on e.department_id = d.department_id
INNER J0IN t_locations l
ON d.location_id = l.location_id
左外连接(LEFT JOIN ON)
# 查询所有员工信息,以及所对应的部门名称(没有部门的员工,也在查询结果中,部门名称以null填充)
SELECT EMPLOYEE_ID, first_name, salary, DEPARTMENT_NAME FROM t_employees
LEFT JOIN t_departments
ON t_departments. 'DEPARTMENT_ID' = t_employees. 'DEPARTMENT_ID';
注: 左外连接,以左表为主表,依次向右匹配,匹配到,返回结果;匹配不到,则以null值填充
右外连接(RIGHTJOIN ON)
# 查询所有部门信息,以及该部门的员工信息(没有员工的部门,也在查询结果中,员工信息以null填充)
SELECT EMPLOYEE_ID, first_name, salary, DEPARTMENT_NAME FROM t_employees
RIGHTJOIN t_departments
ON t_departments. 'DEPARTMENT_ID' = t_employees. 'DEPARTMENT_ID';
注: 右外连接,以右表为主表,依次向左匹配,匹配到,返回结果;匹配不到,则以null值填充