多表查询
多表查询
多表关系
多对多
一对一
多表概述
内连接
内连接查询语法:
1)隐式内连接
Select 字段列表 from 表一,表二 where条件……
例子
查询每一个员工的姓名,及关联的部门名称(隐式内连接实现)
----表结构:empty,dept
----连接条件: emp.dept.id=dept.id
Select emp.name,dept.name from emp,dept where emp.dept.id=dept.id
2)显示内连接
Select 字段列表 from 表一 [inner] join 表2 on 连接条件
查询每一个员工的姓名,及关联的部门名称(隐式内连接实现)
Select emp.name,dept.name from emp inner join dept on emp.dept.id=dept.id
外连接
左/右连接
Select 字段列表from 表1 left/right [outer] join 表2 on条件………
注意: 相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据。
自连接
Select 字段列表 from 表A 别名A join 表A 别名B on 条件……;
注意:自连接查询,可以是内连接查询,也可以是外连接查询。
联合查询
语法
Select 字段列表 from 表名a where 条件
Union all (直接将查询结果显示出来含重复)去掉all 则不显示重复记录
Select 字段列表 from 表名b where 条件;
子查询
概念:sql 语句中嵌套select 语句 称为嵌套查询 又称子查询;
Select * from表1 where columnl =(select coumnl from 表2);
注意:子查询外部语句可以使 insert 、update 、delect、 select中的任意一个。
例
查询 某某 入职日期之后的员工信息
标量子查询(常用操作符:= 、<>、 >、 >=、 <、<=)
分两步
1) 查询某某的入职日期
Select 入职日期 from 表 where name=‘某某’
2) 查询指定日期之后的入职员工信息
Select * from 表 where 入职信息 > 某某的入职日期
二者合并
Select * from 表 where 入职信息 >(Select 入职日期 from 表 where name=‘某某’
)
列子查询
行子查询
常用符号(=、<>、IN、 NOT IN)
例
查询与 某某 的薪资及直属领导相同的员工信息
分开
1)查询 某某 的薪资及直属领导
Select 薪资,直属领导 from 部门表 where name = ‘’某某‘’;
2)查询与 某某 的薪资及直属领导相同的员工信息
Select * from 员工 where 薪资 = 12500 and 直属领导=1;
合并
Select * from 员工 where (薪资,直属领导)=(Select 薪资,直属领导 from 部门表 where name = ‘’某某‘’)
表子查询 (in)
例
查询 与 xx ,yy 的职位和薪资相同的员工信息
分开
1) 查询 xx ,yy 的职位和薪资
Select 职位,薪资 from 员工表 where name=‘xx’or name=‘yy’;
2) 查询 与 xx ,yy 的职位和薪资相同的员工信息
Select * from emp where (职位,薪资)= (Select 职位,薪资 from 员工表 where name=‘xx’or name=‘yy’;)
例
查询入职日期是‘2006-01-01’之后的员工信息,及其部门信息
分开
1)查询入职日期是‘2006-01-01’之后的员工信息
Select * from 员工表 where 入职日期= ‘2006-01-01’;
2)查询入职日期是‘2006-01-01’之后的员工信息,及其部门信息
Select * from (Select * from 员工表 where 入职日期= ‘2006-01-01’) e left join 部门表 d on e.员工表id =d. 部门表id;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?