mysql数据库

多表查询

一、内连接:内连接查询的是两张表交集的部分

隐式内连接

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 = '宋远桥' );

总结:在实际应用中,数据库通常包含多个表,这些表通过某些共同的字段相互关联,以反映业务实体之间的关系(例如,员工与部门、订单与客户等)。做题过程中需要逐步分析要求,将一个多表查询逐步分解,然后将每个条件连接起来,最后实现要求。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值