Heim> Datenbank> SQL> Hauptteil

一起聊聊SQL的表连接

WBOY
Freigeben: 2022-06-15 11:55:28
nach vorne
2145 Leute haben es durchsucht

本篇文章给大家带来了关于SQL的相关知识,其中主要介绍了关于表连接的相关内容,SQL Server中支持多种连接,包括内连接、左连接、右连接、交叉连接和全外连接,下面一起来看一下,希望对大家有帮助。

一起聊聊SQL的表连接

推荐学习:《SQL教程

SQL的表连接

在关系数据库中,数据分布在多个逻辑表。想要获得完整有意义的数据集,则需要使用连接来查询这些表中的数据。SQL Server中支持多种连接,包括内连接、左连接、右连接、交叉连接和全外连接。

一、内连接

内部连接子句用于查询来自两个或多个相关表的数据。INNER JOIN 子句的语法:

SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id
Nach dem Login kopieren

注意:要查询的字段,必须要在字段的前面加上表名或者表的别名,如:p.product_name
其中FROM后面的是主表,然后 INNER JOIN 后面的表是要连接的表。主表和连接表进行比较,查 找满足的条件的所有行。连接谓词的计算结果为true是,则将主表和连接表进行合并成新的结果 集,如下图所示:

在这里插入图片描述

内连接的多个表连接,如下所示:

SELECT p.product_name, p.list_price ,c.category_name, b.brand_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id INNER JOIN production.brands b ON b.brand_id = p.brand_id
Nach dem Login kopieren

二、左连接

在左连接中使用 LEFT JOIN 子句用于查询来自多个表的数据,它返回是左表中的所有行和右表中匹配行。若是右表中找不到匹配行,则使用NULL代替显示,如图所示:

在这里插入图片描述

使用 LEFT JOIN 语句进行连接:如下所示:

SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p LEFT JOIN production.categories c ON c.category_id = p.category_id
Nach dem Login kopieren

在上面的语法中 FROM 后面的表是左表(production.products),而 LEFT JOIN 后面紧跟的右 表(production.categories)。

三、右连接

在右连接中使用RIGHT JOIN子句来进行两个表或多个表进行查询。右查询刚好与左查询的是相反 的,返回右表的所有行和左表的匹配行,若左表找不到匹配行,则返回NULL代替显示,如图所示:

在这里插入图片描述

使用 RIGHT JOIN 语句进行连接:如下所示:

SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p RIGHT JOIN production.categories c ON c.category_id = p.category_id
Nach dem Login kopieren

在上面的语法中 FROM 后面的表是左表(production.products),而 RIGHT JOIN 后面紧跟的右 表(production.categories)。

四、交叉连接

CROSS JOIN 连接两个或多个不相关的表。 以下是两个表的CROSS JOIN 的语法,两种写法:

SELECT T1.select_list FROM T1 CROSS JOIN T2;
Nach dem Login kopieren

或者

SELECT T1.select_list FROM T1, T2;
Nach dem Login kopieren

CROSS JOIN 将第一个表(T1)中的每一行与第二个表(T2)中的每一行连接起来。 换句话说,交叉连 接返回两个表中行的笛卡尔积。与INNER JOIN或LEFT JOIN不同,交叉连接不会在连接的表之间 建立关系。
假设 T1 表包含三行: 1 , 2 和 3 , T2 表包含三行: A , B 和 C 。 CROSS JOIN 从第一个 表(T1)获取一行,然后为第二个表(T2)中的每一行创建一个新行。 然后它对 第一个 表(T1)中的 下一行执行相同操作,依此类推。在此图中, CROSS JOIN 总共创建了 9 行。

五、自连接

自联接用于将表连接到自身(同一个表)。 它对于查询分层数据或比较同一个表中的行很有用。
自联接使用内连接或左连接子句。 由于使用自联接的查询引用同一个表,因此表别名用于为查询 中的表分配不同的名称。
注意:如果在不使用表别名的情况下在查询中多次引用同一个表,则会出现错误。
示例:

SELECT t1.select_list FROM T1 t1INNER JOIN T1 t2 ON t1.category_id = t2.category_id
Nach dem Login kopieren

在 INNER JOIN 这里可以使用其他的子句,比如:LEFT JOIN ,RIGHT JOIN

六、全外连接

FULL OUTER JOIN当左表或右表中存在匹配项时,该命令将返回所有行。如图所示:

在这里插入图片描述

使用 FULL OUTER JOIN 查询 pm.projects 表和 pm.member 表中的数据:

SELECT m.name member, p.title project FROM pm.members m FULL OUTER JOIN pm.projects p ON p.id = m.project_id;
Nach dem Login kopieren

pm.projects 表数据:
在这里插入图片描述

pm.member 表数据:

在这里插入图片描述

查询结果:
在这里插入图片描述

推荐学习:《SQL教程

Das obige ist der detaillierte Inhalt von一起聊聊SQL的表连接. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
sql
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!