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

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

一、前言


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


二、内连接


1.语法


隐式内连接


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


显示内连接


SELECT 字段列表 FROM 表1 [INNR]JOIN 表2 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 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 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 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 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 字段列表 FROM 表1 别名1 JOIN 表2 别名2 ON 条件


2.举例


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


emp


id name job managerid
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

cc98113eb0b74af3b162b7f57c34633b.png


五、结语


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

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询
⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询
211 0
|
1月前
|
SQL 数据库
SQl查询之单表查询,连接与嵌套查询
SQl查询之单表查询,连接与嵌套查询
29 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
249 1
|
5月前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(2)-内连接、外连接
MySQL数据库——多表查询(2)-内连接、外连接
40 1
|
6月前
|
关系型数据库
单表查询、多表查询相关练习
单表查询、多表查询相关练习
52 9
|
6月前
|
SQL 数据库
联合查询(多表查询)
联合查询(多表查询)
54 0
|
6月前
|
SQL 数据库
数据库开发之内连接和外连接的详细解析
数据库开发之内连接和外连接的详细解析
37 0
|
SQL 数据库
数据库(3)--嵌套查询和连接查询
数据库(3)--嵌套查询和连接查询
195 0
数据库(3)--嵌套查询和连接查询
|
关系型数据库 MySQL
MySQL基础-自连接&联合查询
自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。我们先来学习一下自连接的查询语法:
304 0
|
SQL 关系型数据库 MySQL
MySQL基础-多表查询之外连接
外连接分为两种,分别是:左外连接 和 右外连接。具体的语法结构为:
117 0