多表查询的分类
内连接查询
外连接查询
内连接查询
隐式内连接:使用where条件消除无用数据
-- 查询所有员工信息和对应的部门信息
-- 使用两张表中相对应一致字段来过滤无用信息
SELECT
*
FROM
emp,dept
WHERE
emp.`dept_id` = dept.`id`;
-- 查询员工表的名称、性别。部门表的名称。
SELECT
t1.`name`,t1.`gender`,t2.`name`
FROM
emp t1,
dept t2
WHERE
t1.`dept_id`=t1.`id`;
显示内连接
语法:select
字段列表
from
表名1 [inner] join 表名2
on
条件;
-- 查询所有员工信息和对应的部门信息(显式内连接)
SELECT
*
FROM
emp INNER JOIN dept
ON
emp.`dept_id` = dept.`id`;
-- 查询员工表的名称、性别。部门表的名称。(显式内连接)
SELECT
emp.`name`,emp.`gender`,dept.`name`
FROM
emp JOIN dept
ON
emp.`dept_id`= dept.`id`;
内连接查询总结:
从哪些儿表中查询数据
条件是什么
查询哪些字段
外连接查询
左外链接
select
字段列表
from
表1 left [outer] join表2
on
条件;
-- 查询所有员工信息,如果员工有部门,则查询部门名称,如果没有部门,则不显示部门名称(左外连接)。
SELECT
t1.*,t2.`name`
FROM
emp t1 LEFT JOIN dept t2
ON
t1.`dept_id` = t2.`id`;
左外连接:查询左表所有的数据以及右表的交集部分
右外连接
select
字段列表
from
表1 right [outer] join表2
on
条件;
右外连接:查询右表所有数据以及左表的交集部分
子查询
概念:查询中嵌套查询,称嵌套的查询为子查询, 且必须始终出现在圆括号内。
select -- 外层查询
字段列表
from
表名列表
where
(查询子句); -- 子查询,内层查询
-- 查询员工表中,工资最高的员工信息
-- 1)查询最高的工资是多少:9000
select max(salary) from emp;
-- 2)查询员工信息,并且工资等于9000的
select * from emp where emp.`salary`=9000;
-- 一条sql完成这个操作。子查询
select * from emp where emp.`salary`= (SELECT MAX(salary) FROM emp);
结论:内层查询的结果,作为外层查询的条件