SQL语法(五) 多表联合查询
SQL语法(五) 多表联合查询
程序猴jwang 2018-09-09 09:00:01 109515 收藏 146
分类专栏: Database 文章标签: sql语法
版权
Database
专栏收录该内容
19 篇文章9 订阅
订阅专栏
前言
当需要获取的数据分布在多张中,考虑使用联合查询,本章将学习两种查询方式(sql92/sql99)
范例
1.笛卡儿积
将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积。结果的数量为所有表的数量的乘积。
--SQL92方式
--表名以逗号隔开实现多表查询
--SQL99方式
--使用cross join 关键字
2.等值连接筛选&不等值连接筛选(内连接)
--概念:先做表的笛卡尔积,然后筛选,筛选条件为等值筛选。
--注意:条件为字段的值相同(字段值条件)来进行筛选,字段的名字可以不同
--SQL92方式
--where 筛选条件...
--SQL99方式
--使用natural join 表名(自然连接,根据名称相同字段进行等值连接)
--使用(inner) join 表名 on 筛选条件... (内连接,根据筛选条件进行等值/不等值连接,inner关键字可以省略不写)
--使用(inner) join 表名 using(字段名,字段名,....) (内连接,根据名称相同字段进行等值连接,可指定字段,inner关键字可以省略)
3.自连接
4.外连接
(1)左外连接
--SQL92方式
--where子句中在右边连接字段后加 (+),显示左边对应字段没有值的数据
--SQL99方式
--select 内容 from 表名 left (outer) join 表名 on 连接条件 (外连接,outer可以省略不写)
(2)右外连接
--SQL92方式
--where子句中在左边连接字段后加 (+),显示右边对应字段没有值的数据
--SQL99方式
--select 内容 from 表名 right (outer) join 表名 on 连接条件 (外连接,outer可以省略不写)
(3)满外连接
--SQL92方式
无
--SQL99方式
--select 内容 from 表名 full (outer) join 表名 on 连接条件 (外连接,outer可以省略不写)
附录:多表联合查询示例(SQL99)
--查询所有数据
select * from EMP for update;
--笛卡尔积 (1,2,3) (5,6,7)
--SQL92,SQL99(推荐)
--使用 cross join 关键字
select * from emp cross join dept;--15*4=60
--等值连接和不等值连接(内连接)
--先做笛卡尔积,然后根据条件进行筛选
--注意:条件为字段的值相同来进行筛选,字段的名字可以不同
--等值连接
--自然连接:根据名称相同字段进行等值连接
--使用 natural join关键字
select * from emp natural join dept;
--名称字段不相同
-- 表一 inner join 表二 on 筛选条件
select * from emp e inner join dept t on e.deptno = t.deptno;
--名称字段相同也可以使用
-- 表一 inner join 表二 using (字段名,字段名...)
select * from emp join dept using (deptno);
--不等值连接
select * from emp e inner join dept t on e.sal between 1000 and 1500;
--自连接
select * from emp a inner join emp b on a.empno = b.mgr;
--外连接
--左外连接
-- 表一 left (outer) join 表二 on 筛选条件
select * from emp e left join dept t on e.deptno = t.deptno;
--右外连接
-- 表一 right (outer) join 表二 on 筛选条件
select * from emp e right join dept t on e.deptno = t.deptno;
--满外连接
-- 表一 full (outer) join 表二 on 筛选条件
select * from emp e full join dept t on e.deptno = t.deptno;
附录:操作视频
SQL语法之多表联合查询
————————————————
版权声明:本文为CSDN博主「程序猴jwang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21046965/article/details/82555346
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现