基础DQL(数据查询)—— 内连接、外连接、自连接(含实例)

本专栏收录了数据库的知识点,而基础DQL系列文章将对每种查询都单独写一篇文章,提供给有需要的小伙伴参考,本专栏地址可以戳下面链接查看

🎈 数据库知识点总结(持续更新中):【数据库知识点

🔑 数据库相关练习题(持续更新中):【数据库练习题

🔥 一个提供给Java学习者的专栏:【拼图小游戏(Java)

一、前言

本文将讲述有关于数据查询中的内连接的知识点

二、内连接

1.语法

隐式内连接

SELECT 字段列表 FROM1,表2 WHERE 条件 ··· ;

显示内连接

SELECT 字段列表 FROM1 [INNR]JOIN2 ON 连接条件 ··· ;

2.隐式内连接例子

查询每一个员工的姓名(name),以及关联的部门名称(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)

  • 连接条件是员工表内部门名称和部门表内部门名称相同:emp.dept_id = dept.id
  • 查询对象:emp.namedept.name
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

3.显式内连接例子

查询每一个员工的姓名(name),以及关联的部门名称(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)

  • 连接条件是员工表内部门名称和部门表内部门名称相同:emp.dept_id = dept.id
  • 查询对象:emp.namedept.name
SELECT e.name,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;

当然,此处的INNER可以省略不写

SELECT e.name,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;

三、外连接

在内连接的例子中,其实会有小的弊端,假设数据中相同属性的部门名称,或者是员工表内部门名称为空的话,就无法通过内连接查询出所有的数据(NULL值无法匹配),会造成一定的误差,所以我们就需要用到外连接来弥补一下。接下来我们就来认识一下外连接

1.左外连接

1️⃣语法

SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件 ··· ;

2️⃣举例

查询员工表中的所有数据,以及对应的部门名称(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)

  • 连接条件是员工表内部门名称和部门表内部门名称相同:emp.dept_id = dept.id
  • 查询对象:e.*d.name
  • 由于查询的是员工表中所有数据,即左表所有数据,以及相同属性的列,所以使用左外连接 LEFT OUTER JOIN ··· ON
SELECT e.*,d.name FROM emp e  LEFT OUTER JOIN dept d ON e.dept_id = d.id;

2.右外连接

1️⃣语法

SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件 ··· ;

2️⃣举例

查询部门表中的所有数据,以及对应的员工信息(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)

  • 连接条件是员工表内部门名称和部门表内部门名称相同:emp.dept_id = dept.id
  • 查询对象:d.*e.name
  • 由于查询的是部门表中所有数据,即右表所有数据,以及相同属性的列,所以使用右外连接 RIGHT OUTER JOIN ··· ON
SELECT d.*,e.name FROM emp e  RIGHT OUTER JOIN dept d ON e.dept_id = d.id;

四、自连接

自连接查询可以是内连接查询,也可以是外连接查询

1.语法

SELECT 字段列表 FROM1 别名1 JOIN2 别名2 ON 条件

2.举例

我们给定一张表格,其中包含员工信息以及它领导的id,要求查询员工及其所属领导名字

emp

idnamejobmanagerid
001王总总裁NULL
002张三项目经理001
003李四后端开发002
004王五后端开发002
005小美产品经理001
006小红UI设计005
007小帅实习生003
008小刘实习生004
009小张实习生006
  • 我们可以把这张表看成两张表:表A代表员工表表B代表领导表,两张表格通过managerid来连接
  • 注意相同属性的表达方式,A表是员工表,那么属性应该为managerid;B表是领导表,那么属性是B.id
SELECT A.name,B.name FROM emp A,emp B WHERE A.managerid = B.id

在这里插入图片描述

五、结语

在实际开发中,左外连接使用的频率更高,因为右外连接也可以变成左外连接(将两表顺序调换即可)接下来将讲述其它的连接方式

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alita11101_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值