首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQL语法(五) 多表联合查询

SQL语法(五) 多表联合查询

作者头像
全栈程序员站长
发布2022-07-01 11:06:56
发布2022-07-01 11:06:56
3.8K0
举报

大家好,又见面了,我是你们的朋友全栈君。

前言

当需要获取的数据分布在多张中,考虑使用联合查询,本章将学习两种查询方式(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)

代码语言:javascript
复制
--查询所有数据
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;

附录:操作视频

https://player.bilibili.com/player.html?aid=62084547

SQL语法之多表联合查询

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131535.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 前言
  • 范例
    • 1.笛卡儿积
    • 2.等值连接筛选&不等值连接筛选(内连接)
    • 3.自连接
    • 4.外连接
      • (1)左外连接
      • (2)右外连接
      • (3)满外连接
  • 附录:多表联合查询示例(SQL99)
  • 附录:操作视频
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档