为了在工作中能更顺利的使用多表关联查询,今天这篇博客就写这个内容了。
在讲解多表关联查询之前,先生成测试表。
登录scott用户,运行以下语句生成测试表。

create table ex1 as select * from emp;
create table ex2 as select * from dept;
insert into ex1(empno,ename,job) values(8888,'EXBONG','EXWORD');
insert into ex1(empno,ename,job) values(9999,'EXZHANG','EXWORD');
insert into ex2(deptno,dname,loc) values(50,'ABONG','BEIJING');

现在看下测试表的内容:


由上图可以看出,ex1表有16行数据,ex2表有5行数据。

多表关联查询

表别名

  • 给表起一个短一点的名字
  • 在多表关联查询时,如果多个表之间存在同名的列,则必须使用表别名来限定列的使用。
  • from子句中给表起别名,现起现用。
  • 由于from子句最先执行,故一旦在from子句中为表指定了别名,则必须在剩下的子句中都使用表别名(不同名的列可以不用表别名限定,但最好用),不允许再使用原来的名字。

1. 等值连接

  • 等值连接的列数=左表列数+右表列数
  • 不要求两个表具有相同的列,只看值是否相等
select e.empno,e.ename,e.deptno,d.deptno,d.dname from ex1 e,ex2 d where e.deptno=d.deptno;


左表和右表满足where子句的有14行,故等值连接的查询结果为14行。

2. 内连接

  • 内连接的结果均满足on子句的连接条件。
select e.empno,e.ename,e.deptno,d.deptno,d.dname from ex1 e inner join ex2 d on e.deptno=d.deptno;


ex1有16行数据,ex2有5行数据,满足连接条件的只有14行数据,故内连接的结果只有14行数据。

3. 外连接

左外连接

  • 左连接的结果不仅包含满足连接条件的数据行,还包括左表的不满足连接条件的数据行。
select e.empno,e.ename,e.deptno,d.deptno,d.dname from ex1 e left join ex2 d on e.deptno=d.deptno;


满足连接条件的有14行,左表中不满足连接条件的有2行,故左连接的查询结果应有16行。

右外连接

  • 右连接的结果不仅包含满足连接条件的数据行,还包括右表的不满足连接条件的数据行。
select e.empno,e.ename,e.deptno,d.deptno,d.dname from ex1 e right join ex2 d on e.deptno=d.deptno;


满足连接条件的有14行,右表中有2行不满足连接条件,故右连接的查询结果应有16行。

完全外连接

  • 完全外连接的结果不仅包含满足连接条件的数据行,还包括左表和右表中不满足连接条件的数据行。
select e.empno,e.ename,e.deptno,d.deptno,d.dname from ex1 e full join ex2 d on e.deptno=d.deptno;


满足连接条件的有14行,左表和右表中分别有2行不满足连接条件,故完全外连接的查询结果应该有18行。

4. 自然连接

  • 内连接、外连接的列数=左表列数+右表列数
  • 内连接、外连接可以使用别名
  • 自然连接的列数=左表列数+右表列数-左表和右表中名字相同的列数(去除重复列)
  • 自然连接不能使用别名,不需要on子句
  • 自然连接要求连接的两个表必须要有相同的列名
select * from ex1 natural join ex2;


左表和右表中名字相同的列为deptno,故以该列进行连接。满足连接条件的行数为14行,故自然连接的查询结果为14行。

5. 自连接

  • 若一个表的某两列存在上下级关系,可以通过自连接获取。
select e1.empno,e1.ename,e1.mgr,e2.ename from ex1 e1 inner join ex1 e2 on e1.mgr=e2.empno;


存在上下级关系的行数只有13行,故自连接的查询结果为13行数据。

6. 交叉连接(笛卡尔连接)

  • 不需要任何连接条件的连接
  • 不需要on子句
select * from ex1 e cross join ex2 d;


左表有16行数据,右表有5行数据,任意连接即有16*5=80行数据。

SQL-多表关联查询详解相关推荐

  1. SQL两表关联查询(两表会了,三表,四表都小意思)

    2019独角兽企业重金招聘Python工程师标准>>> 这几天在php群里吹牛逼,看到一个sql表关联查询问题,以前就想写,一直没总觉,实话说,我去年这个时候一表查询都不会,说来惭愧 ...

  2. php三表关联查询,SQL两表关联查询(两表会了,三表,四表都小意思)

    这几天在php群里吹牛逼,看到一个sql表关联查询问题,以前就想写,一直没总觉,实话说,我去年这个时候一表查询都不会,说来惭愧,闲话不多说,正题开始: 首先是news表 下面是newscate表 // ...

  3. SQL关联查询详解,SQL JOIN详解

    关联查询,也称为多表查询,指两个或更多个表一起完成查询操作. 前提条件:这些一起查询的表之间是有关系的(一对一.一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键. 一 ...

  4. mysql的select复合查询语法_MySQL(九)之数据表的查询详解(SELECT语法)二

    上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1 ...

  5. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  6. 数据库多表连接查询详解

    通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 ...

  7. 【Oracle】多表连接查询详解

    多表查询:按数据库设计原则,员工表中只有部门的编号信息,部门的详细信息会放在部门表中,这个时候我们就需要使用多表查询的功能. 课程目标: 1.什么是多表查询? 2.笛卡尔集. 3.等值连接. 4.不等 ...

  8. mysql 两张大表关联_详解mysql生产环境如何快速有效的删除大表,附实验说明

    概述 我们很多时候都会去drop一些大表,特别是生产环境做操作时,这里主要提一些注意事项,仅供参考. 01 相关语法 1.删表 DROP TABLE SyntaxDROP [TEMPORARY] TA ...

  9. jpi多表联查_多表连接查询详解

    1.笛卡尔积形式------无条件 select * from tb_a,tb_b tb_a和tb_b表中的所有记录相互匹配成新的记录 tb_a tb_b 结果: 2.左连接 查询步骤:从左表读出一条 ...

最新文章

  1. 使用npm link 创建本地模块
  2. android 增加一条广播,Android中BroadcastReceiver广播使用及注意点
  3. 邵阳一中2021高考成绩查询入口,邵阳高考成绩查询系统
  4. SSM中进行注解式和XML配置式事务管理
  5. apache 域名不变_apache 如何配置只能通过域名访问,不允许通过ip访问?
  6. sstream应用举例
  7. 第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。
  8. idea提示“ cannot access xxxxxxxx.class“的解决方法,idea的bug
  9. 【机器学习】知识框图总结
  10. 索引-python编程技术-第二版
  11. 【opencv学习】SIFT算法的基本使用以及特征匹配
  12. JS-循环(while,for,嵌套)-跳转语句(break,continue)
  13. 实用收藏Linux命令备忘
  14. 注册终止处理函数atexit()
  15. 51单片机数码管滚动显示学号_51单片机四位数码管4个LED灯4个按键实现多种功能?...
  16. go - const
  17. C语言程序设计之小超市管理系统
  18. php jmail实例,Jmail发邮件的例子
  19. Android性能优化(二)内存优化
  20. linux 查看nas盘信息,实战 Windows 下读取 NAS 盘数据

热门文章

  1. (模拟信号/数字信号)分别以(模拟信号/数字信号)中传输方式
  2. 如何深入理解时间序列分析中的平稳性?
  3. 自定义键盘KeyboardView如何添加点击音效
  4. 2023十大科技趋势
  5. 给找工作的同学一点参考
  6. 中国人数学能力很差?
  7. sorted排序详解
  8. 8/14 二维高斯函数
  9. bcm54xx系列phy光口电口的配置方法
  10. sklearn数据集分割方法汇总