• 基础DQL(数据查询)—— 内连接&外连接


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

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

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

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

    一、前言

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

    二、内连接

    1.语法

    隐式内连接

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

    显示内连接

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

    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
    
    • 1

    当然,我们也可以为表取别名,只需要在原来的表名后面加上自己去取得名字即可

    SELECT e.name,d.name FROM emp e,dept d WHERE e.dept_id = d.id
    
    • 1

    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;
    
    • 1

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

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

    三、外连接

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

    1.左外连接

    1️⃣语法

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

    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;
    
    • 1

    2.右外连接

    1️⃣语法

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

    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

    四、自连接

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

    1.语法

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

    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
    
    • 1

    在这里插入图片描述

    五、结语

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

  • 相关阅读:
    深度学习-卷积神经网络
    基于JAVA气候分析平台计算机毕业设计源码+数据库+lw文档+系统+部署
    机器学习中常见的监督学习方法和非监督学习方法有哪些。
    VBA驱动SAP GUI实现办公自动化(一)
    4、Linux内核的分析
    燃气仓储革命:数字孪生系统领航未来
    【CF780G】Andryusha and Nervous Barriers 题解
    05_CSS进阶技巧
    webrtc安全性 加密方式
    VSCode 使用 Vetur Format格式化的配置项
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/127418363