数据库面试知识点(八)内连接,外连接,左连接,右连接,全连接

数据库中内连接和外连接
其实可以理解为交集与并集 ,内连接看做是取两个表的交集 其中只有两条互相对应着的数据才能被存入结果表中 而外连接就是取并集 和内连接是相反的 如果一张表的数据在另一张表中没有找到 但是并不影响他在结果集出现 。

一、内连接

以下三种都是内连接语法:

  • inner join…on

  • join…on

  • cross join…on

在这里插入图片描述
【示例】

mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part    |
+------+--------+-----------+
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


# 内连接
mysql> select * from a_table a inner join b_table b on a.a_id=b.b_id;
+------+--------+-----------+------+--------+-----------+
| a_id | a_name | a_part    | b_id | b_name | b_part    |
+------+--------+-----------+------+--------+-----------+
|    2 | 老王   | 秘书部    |    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |    3 | 老张   | 设计部    |
+------+--------+-----------+------+--------+-----------+
2 rows in set (0.02 sec)

# 同时可以使用以下的三种方法:
mysql> select * from a_table, b_table where a_table.a_id = b_table.b_id;

mysql> select * from a_table a cross join b_table b on a.a_id=b.b_id;

mysql> select * from a_table a  join b_table b on a.a_id=b.b_id;

二、左连接(左外连接)

语法:

left join … on …

在这里插入图片描述

【示例】

mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part    |
+------+--------+-----------+
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


# 左连接
mysql> select * from a_table a left join b_table b on a.a_id=b.b_id;
+------+--------+-----------+------+--------+-----------+
| a_id | a_name | a_part    | b_id | b_name | b_part    |
+------+--------+-----------+------+--------+-----------+
|    2 | 老王   | 秘书部    |    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |    3 | 老张   | 设计部    |
|    1 | 老潘   | 总裁部    | NULL | NULL   | NULL      |
|    4 | 老李   | 运营部    | NULL | NULL   | NULL      |
+------+--------+-----------+------+--------+-----------+
4 rows in set (0.04 sec)

三、右连接(右外连接)

语法:

right join … on …

在这里插入图片描述
【示例】

mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part    |
+------+--------+-----------+
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
4 rows in set (0.00 sec)



mysql> select * from a_table a right join b_table b on a.a_id=b.b_id;
+------+--------+-----------+------+--------+-----------+
| a_id | a_name | a_part    | b_id | b_name | b_part    |
+------+--------+-----------+------+--------+-----------+
|    2 | 老王   | 秘书部    |    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |    3 | 老张   | 设计部    |
| NULL | NULL   | NULL      |    5 | 老刘   | 人事部    |
| NULL | NULL   | NULL      |    6 | 老黄   | 生产部    |
+------+--------+-----------+------+--------+-----------+
4 rows in set (0.00 sec)

四、全连接

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

一张表中显示了两张表的数据(不重复的数据),先查询的表,其结果放在前面。

union all
一张表中显示了两张表的所有数据(不需要去重),先查询的表,其结果放在前面。


【Java 面试那点事】

这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!

这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】

面试路上,你不孤单!
在这里插入图片描述

发布了196 篇原创文章 · 获赞 878 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/qq_33945246/article/details/104664029