cross join 、left/right join的比较

表1 course

1
2
3
4
5
6
7
8
9
10
11
mysql> select * from course;
+----+-------------+
| id | course_name |
+----+-------------+
|  1 | Java        |
|  2 | MySQL       |
|  3 | Python      |
|  4 | Go          |
|  5 | C++         |
+----+-------------+
5 rows in set (0.00 sec)

  表2 students

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> select id,name,course_id from students;
+------+--------+-----------+
| id   | name   | course_id |
+------+--------+-----------+
|    1 | Danny  |         1 |
|    2 | Green  |         2 |
|    3 | Henry  |         1 |
|    4 | Jane   |         3 |
|    5 | Jim    |         2 |
|    6 | John   |         4 |
|    7 | Lily   |         4 |
|    8 | Susan  |         5 |
|    9 | Thomas |         6 |
|   10 | Tom    |         5 |
+------+--------+-----------+
10 rows in set (0.01 sec)

 

 交叉连接,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> select s.id,s.name, c.course_name from students s cross join course c on s.course_i
d = c.id;
+------+-------+-------------+
| id   | name  | course_name |
+------+-------+-------------+
|    1 | Danny | Java        |
|    2 | Green | MySQL       |
|    3 | Henry | Java        |
|    4 | Jane  | Python      |
|    5 | Jim   | MySQL       |
|    6 | John  | Go          |
|    7 | Lily  | Go          |
|    8 | Susan | C++         |
|   10 | Tom   | C++         |
+------+-------+-------------+
9 rows in set (0.00 sec)

  

左连接   表course 是基表,表students是参考表,如果基表中某行没有在参考表中相匹配的行,在参考中返回NULL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> select s.id,s.name, c.course_name from students s left join course c on s.course_id = c.id;
+------+--------+-------------+
| id   | name   | course_name |
+------+--------+-------------+
|    1 | Danny  | Java        |
|    2 | Green  | MySQL       |
|    3 | Henry  | Java        |
|    4 | Jane   | Python      |
|    5 | Jim    | MySQL       |
|    6 | John   | Go          |
|    7 | Lily   | Go          |
|    8 | Susan  | C++         |
|    9 | Thomas | NULL        |
|   10 | Tom    | C++         |
+------+--------+-------------+
10 rows in set (0.00 sec)

  

右连接 表course 是参考表,表students是基表,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> select s.id,s.name, c.course_name from students s right join course c on s.course_id = c.id;
+------+-------+-------------+
| id   | name  | course_name |
+------+-------+-------------+
|    3 | Henry | Java        |
|    1 | Danny | Java        |
|    5 | Jim   | MySQL       |
|    2 | Green | MySQL       |
|    4 | Jane  | Python      |
|    7 | Lily  | Go          |
|    6 | John  | Go          |
|   10 | Tom   | C++         |
|    8 | Susan | C++         |
+------+-------+-------------+
9 rows in set (0.00 sec)

  

 

posted @   华小电  阅读(110)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示