1、多表查询
1.1、什么是多表查询
使用一条select语句查询多张表的信息
1.2、多表查询的分类
多表查询:
- 内连接
隐式内连接
显示内连接 - 外连接
左外连接
右外连接
1.2.1、隐式内连接
隐式内连接,看不到JOIN关键字,条件使用WHERE指定
SELECT 字段名 FROM 主表(左表),从表(右表) WHERE 条件
-- 隐式内连接,查询每个员工的姓名和年龄以及所在的部门名称,及位置
SELECT e.name,e.age,d.dept_name,d.dept_location from dept as d ,employee as e where e.dept_id=d.id;
1.2.2、显示内连接
显示内连接 使用INNER JOIN … ON 语句 ,INNER可以省略
SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 连接条件
SELECT e.name,e.age,d.dept_name,d.dept_location from dept as d inner join employee e on e.dept_id=d.id;
1.2.3、内连接的特点
内连接只查询多个表中符合连接条件的记录。
1.3、内连接
用左边表的记录去匹配右边表的记录,如果符合条件则显示,如:从表.外键=主表.主键;
【内连接:只查询符合连接条件的数据】
1.4、左外连接
左外连接,使用LEFT [OUTER] JOIN … ON ,OUTER可以省略
语法:SELECT 字段名 FROM 主表 LEFT JOIN 从表 ON 条件
左外连接的特点:左外连接会把主表(左表)中所有的数据都查询出来,从表中只查询符合连接条件
select * from employee e left join dept d on d.id=e.dept_id;
1.5、右外连接
右外连接,使用RIGHT [OUTER] JOIN … ON ,OUTER可以省略
语法:SELECT 字段名 FROM 主表 RIGHT JOIN 从表 ON 条件
右外连接的特点:右外连接会把从表中所有的数据都查询出来,主表只查询符合条件的。
select * from employee e right join dept d on d.id=e.dept_id;
1.6、子查询
概念:
(1)一个查询的结果作为另一个查询的条件
(2)有查询的嵌套,内部的查询称为子查询
(3)子查询要使用小括号
子查询的三种情况
1)子查询的结果是单行单列的
2)子查询的结果是多行单列
3)子查询的结果是多行多列
子查询的结果是一个值
SELECT 字段名 FROM 表名 WHERE 字段=(子查询)
例如:查询大于员工平均年龄的员工信息
select * from employee where age>(select avg(age) from employee);
子查询的结果是多行单列
子查询结果是单列多行,结果类似一个数组,父查询使用IN运算符
SELECT 字段名