sql 之 连接表(内连接、外连接、左连接、右连接、全连接)

多表查询原理:将多个表通过笛卡尔积形成一个虚表,再根据查询条件筛选符合条件的数据。

sql数据库表连接,主要分为:内连接、外连接(左连接、右连接 、全连接)、交叉连接、自连接

外连接包括 左连接、右连接、全连接 (left|right | full outer join ......on),其中outer可以省略

1.连接表的种类

在关系数据库中,数据分布在多个逻辑表中。 要获得完整有意义的数据集,需要使用连接来查询这些表中的数据。

SQL Server支持多种连接包括

  • INNER JOIN:内连接,关键字在表中存在至少一个匹配时返回行。
  • left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
  • right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
  • inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
  • full join : 外连接,返回两个表中的行:left join + right join。
  • cross join : 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。
  • GROUP BY:全外连接, 子句必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前

2. 左连接(LEFT JOIN 或 LEFT OUTER JOIN)

左连接返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则结果集中对应的列将包含NULL值。

sql 复制代码
SELECT columns  
FROM table1  
LEFT JOIN table2  
ON table1.column_name = table2.column_name;

3. 内连接(INNER JOIN)

内连接返回两个表中满足连接条件的行。只有当两个表中的指定列的值相等时,行才会出现在结果集中。

sql 复制代码
SELECT columns  
FROM table1  
INNER JOIN table2  
ON table1.column_name = table2.column_name;

4.右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)

右连接与左连接相反,它返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有匹配的行,则结果集中对应的列将包含NULL值。

sql 复制代码
SELECT columns  
FROM table1  
RIGHT JOIN table2  
ON table1.column_name = table2.column_name;

5. 全连接(full join ......on)

全连接返回左表和右表中的所有行。如果某一边的表中没有匹配的行,则结果集中对应的列将包含NULL值。并且有一个 on 条件匹配。

sql 复制代码
SELECT columns  
FROM table1  
FULL JOIN table2  
ON table1.column_name = table2.column_name;

6.交叉连接(CROSS JOIN),注意没有on条件

交叉连接返回左表中的每一行与右表中的每一行的组合。这实际上是左表中的每一行与右表中的每一行进行笛卡尔积运算。

sql 复制代码
SELECT columns  
FROM table1  
CROSS JOIN table2;

7.自连接(Self-Join)

自连接是一个表与其自身进行连接。这种连接通常用于查找表内的相关行,例如查找具有父子关系的记录。

sql 复制代码
SELECT columns  
FROM table1 t1  
JOIN table1 t2  
ON t1.parent_id = t2.id;
相关推荐
TDengine (老段)5 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
武子康6 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
武昌库里写JAVA11 小时前
C语言 函数指针和指针函数区别 - C语言零基础入门教程
vue.js·spring boot·sql·layui·课程设计
冻咸鱼15 小时前
MySQL中表操作
android·sql·mysql·oracle
TDengine (老段)16 小时前
TDengine 数据函数 LEAST 用户手册
大数据·数据库·sql·时序数据库·tdengine
m0_7369270419 小时前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
java·数据库·sql·postgresql
虾说羊21 小时前
sql中连接方式
数据库·sql
兮兮能吃能睡1 天前
SQL中常见的英文术语及其含义
数据库·sql·oracle
笔生花1 天前
【实战-12】flink版本表
数据库·sql·flink
weixin_525936331 天前
部分Spark SQL编程要点
大数据·python·sql·spark