SQL入门教程(九):高级查询之连接查询

SQL入门教程(九)连接查询

  • 前言
  • 内连接
    • 自连接
    • 自然连接
  • 外连接
    • 左外连接
    • 右外连接
  • 交叉连接

前言

关系型数据库管理系统:MySQL8.0

数据库管理工具:Navicat Premium 12

下面,为了更好的理解这几种连接查询,我们先自己设计数据表。

SQL代码如下:

-- 创建表A,B
CREATE TABLE DMBJ_A(
	ID INT NOT NULL,
	A_NAME VARCHAR(10) NULL,
	A_HEIGHT INT NULL,
CONSTRAINT A_DMBJ_PK PRIMARY KEY (A_ID)
);

CREATE TABLE DMBJ_B(
	ID INT NOT NULL,
	B_NAME VARCHAR(10) NULL,
	B_HEIGHT INT NULL,
CONSTRAINT B_DMBJ_PK PRIMARY KEY (B_ID)
);

-- 插入数据
INSERT INTO DMBJ_A VALUES (1,'吴邪',185);
INSERT INTO DMBJ_A VALUES (2,'王胖子',184);
INSERT INTO DMBJ_A VALUES (3,'小哥',182);
INSERT INTO DMBJ_A VALUES (4,'小白',168);

INSERT INTO DMBJ_B VALUES (2,'王胖子',120);
INSERT INTO DMBJ_B VALUES (4,'小白',55);
INSERT INTO DMBJ_B VALUES (5,'黑瞎子',75);
INSERT INTO DMBJ_B VALUES (6,'潘子',70);

表中的数据如下:
SQL入门教程(九):高级查询之连接查询_第1张图片

内连接

内连接包括等值与非等值连接,区别在连接条件

等值连接:就是连接条件为等号(=)时

非等值连接:就是连接条件为等号(=)以外的条件时,比如,!=、 > 、< 、BETWEEN、LIKE等

关键字:INNER JOIN(等同于JOIN)
作用:返回两个表中满足匹配连接条件的数据(下图阴影部分)。

SQL入门教程(九):高级查询之连接查询_第2张图片

-- 操作范例
SELECT A.*,B.*
FROM DMBJ_A A
INNER JOIN DMBJ_B B
ON A.ID = B.ID;  --这里是连接条件,返回两个表ID相等的共有数据。
/*后面还可以加WHERE、GROUP BY、ORDER BY等子句进行筛选分组排序*/

返回结果如下:
SQL入门教程(九):高级查询之连接查询_第3张图片
在这里插入图片描述
如果实现N表连接查询的话,需要N-1个连接条件。

自连接

自连接就是将一个表用了两个别名,与自身进行连接查询。
就是用来处理列之间的多种逻辑关系(顺序、因果)。

语句简单,理解略微复杂,这里将这两个别名的表,看做成两个独立的表,然后根据匹配连接条件返回数据,就很容易理解了。

-- 操作范例
SELECT A.*,B.A_NAME,B.A_HEIGHT
FROM DMBJ_A A
INNER JOIN DMBJ_A B
WHERE A.A_HEIGHT > B.A_HEIGHT
ORDER BY A.ID;
--这个就是返回表中比较人员的身高,看看谁比谁高。

返回结果如下:

SQL入门教程(九):高级查询之连接查询_第4张图片
按照我的理解,从别名为A的表中取出数据按照连接条件依次与别名为B的表数据进行匹配,匹配成功则返回该数据,匹配失败,则继续进行匹配下一个数据。
SQL入门教程(九):高级查询之连接查询_第5张图片

自然连接

自然连接是一种特殊的等值连接,它会把重复列消除。

注意:要求两个关系表中进行连接的必须是相同的属性列(名字相同),无须添加连接条件。

SELECT * FROM DMBJ_A NATURAL JOIN DMBJ_B;

返回结果如下:
在这里插入图片描述
这里它自动将重复列’ID’消除。

外连接

外连接包括左外连接、右外连接,看下面的范例就很容易理解了。

左外连接

关键字:LEFT JOIN(等同于LEFT OUTER JOIN)
作用:返回两个表中满足匹配连接条件的数据(下图阴影部分)。

SQL入门教程(九):高级查询之连接查询_第6张图片
以左表为基准,返回左表所有行及右表相匹配的行,如果左表的某行在右表中没有匹配行,则以NULL值进行填充。

--操作范例
SELECT * FROM DMBJ_A A
LEFT JOIN DMBJ_B B
ON A.ID = B.ID;

SQL入门教程(九):高级查询之连接查询_第7张图片
返回结果如下,与上面A、B表进行对比。

SQL入门教程(九):高级查询之连接查询_第8张图片

右外连接

关键字:RIGHT JOIN(等同于RIGHT OUTER JOIN)
作用:返回两个表中满足匹配连接条件的数据(下图阴影部分)。

SQL入门教程(九):高级查询之连接查询_第9张图片
这里和左连接原理一样,只不过是反过来了。

SELECT * FROM DMBJ_A A
RIGHT JOIN DMBJ_B B
ON A.ID = B.ID;

返回结果如下:

SQL入门教程(九):高级查询之连接查询_第10张图片

交叉连接

关键字:CROSS JOIN
作用:返回两个表所有行的所有排列组合,这也称为可怕的笛卡尔积

SQL入门教程(九):高级查询之连接查询_第11张图片

-- 操作范例
SELECT * FROM DMBJ_A A
CROSS JOIN DMBJ_B B

返回结果如下:

SQL入门教程(九):高级查询之连接查询_第12张图片
返回的结果数就是左表的行数乘以右表的行数。

一般情况下,数据规模比较大,后面会跟WHERE子句进行筛选,去除不必要的结果。

你可能感兴趣的:(SQL入门教程系列,mysql,sql,数据库)