多表查询
一、内连接:内连接查询的是两张表交集的部分
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件 ...;
显式内连接
SELECT 字段列表 FROM 表1 [INNER]JOIN 表2 0N 连接条件 ...;
内连接演示
1. 查询每一个员工的姓名 , 及关联的部门的名称(隐式内连接实现)
表结构: emp ,dept
连接条件: emp.dept_id = dept.id
select emp.name , dept.name from emp , dept where emp.dept_id = dept.id ;
select e.name,d.name from emp e , dept d where e.dept_id = d.id;
2. 查询每一个员工的姓名 , 及关联的部门的名称 (显式内连接实现)
表结构: emp ,dept
连接条件: emp.dept_id = dept.id
select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;
select e.name, d.name from emp e join dept d on e.dept_id = d.id
二、外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER]JOIN 表2 0N 条件
相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据
外连接演示
1. 查询emp表的所有数据, 和对应的部门信息(左外连接)
表结构: emp,dept
连接条件: emp.dept_id = dept.id
select e.*, d.name from emp e left outer join dept d on e.dept_id = d.id;
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER]JOIN 表2 0N 条件
相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据
2. 查询dept表的所有数据, 和对应的员工信息(右外连接)
select d.*, e.* from emp e right outer join dept d on e.dept_id a d.id;
三、自连接
自连接查询语法:
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件
自连接查询,可以是内连接查询,也可以是外连接查询
自连接
1. 查询员工 及其 所局领导的名字
表结构: emp
select a.name , b.nane from emp a
emp b where a.managerid = b .id;
四、表子查询
子查询返回的结果是多行多列,这种子查询称为表子查询
常用的操作符:IN
表子查询
1. 查询与“鹿杖客”,“宋远桥”的职位和薪资稍阿的员工信息
第一步、 查询“鹿技客”,“宋远桥”的职位和薪资
select job,salary from emp where name = '鹿秋客' or name = '宋远桥' ;
第二步、查询与“鹿杖客”,“宋远桥” 的职位和薪资稍向的员工信息
select * from emp where (job,slary) in ( select job, salary from emp where nanme = '鹿杖客' or name = '宋远桥' );
select * from emp where (job,slary) in
( select job, salary from emp where nanme = '鹿杖客' or name = '宋远桥' );
总结:在实际应用中,数据库通常包含多个表,这些表通过某些共同的字段相互关联,以反映业务实体之间的关系(例如,员工与部门、订单与客户等)。做题过程中需要逐步分析要求,将一个多表查询逐步分解,然后将每个条件连接起来,最后实现要求。