MySQL join查询(内连接,外连接,左连接,右连接)

2023年 8月 15日 67.8k 0

JOIN查询是关系型数据库的基本功能,MySQL提供多种JOIN关联查询方式,包括内连接,左连接,右连接等等,本文将简单介绍MySQL JOIN查询的分类,基本语法和使用案例。

在MySQL中,JOIN可以分为内连接和外连接,外连接又可以分为左连接和右连接。

  • join内连接
  • join外连接
    • join左连接
    • join右连接

下面将通过案例对内连接,左连接和右连接的使用进行说明。案例数据如下:

mysql> select * from t_a;
+------+--------+
| id_a | name_a |
+------+--------+
| 1 | a_1 |
| 2 | a_2 |
| 3 | a_3 |
+------+--------+
3 rows in set (0.01 sec)

mysql> select * from t_b;
+------+--------+
| id_b | name_b |
+------+--------+
| 2 | b_2 |
| 3 | b_3 |
| 4 | b_4 |
+------+--------+
3 rows in set (0.00 sec)

1. join内连接

在MySQL中,下面3个内连接join在语法上是完全相等的。注意在标准SQL中,INNER JOIN与CROSS JOIN并不等同。

  • JOIN
  • CROSS JOIN
  • INNER JOIN

内联JOIN有多种写法,以下查询结果相同。

// 没有使用join关键字
select * from t_a, t_b where t_a.id_a=t_b.id_b;

// join where
select * from t_a join t_b where t_a.id_a=t_b.id_b;

// join on
select * from t_a join t_b on t_a.id_a=t_b.id_b;

// inner join on
select * from t_a inner join t_b on t_a.id_a=t_b.id_b;

// cross join on
select * from t_a cross join t_b on t_a.id_a=t_b.id_b;

// cross join where
select * from t_a cross join t_b where t_a.id_a=t_b.id_b;

执行结果如下:

mysql> select * from t_a inner join t_b on t_a.id_a=t_b.id_b;
+------+--------+------+--------+
| id_a | name_a | id_b | name_b |
+------+--------+------+--------+
| 2 | a_2 | 2 | b_2 |
| 3 | a_3 | 3 | b_3 |
+------+--------+------+--------+
2 rows in set (0.01 sec)

2. left join 左连接

左连接join,以左边表的连接字段,依次匹配右边表,如果在右侧的表没有记录匹配上,则右则表的记录值以NULL填充。

left join示例如下:

mysql> select * from t_a left join t_b on t_a.id_a=t_b.id_b;
+------+--------+------+--------+
| id_a | name_a | id_b | name_b |
+------+--------+------+--------+
| 2 | a_2 | 2 | b_2 |
| 3 | a_3 | 3 | b_3 |
| 1 | a_1 | NULL | NULL |
+------+--------+------+--------+
3 rows in set (0.00 sec)

3. right join 右连接

右连接join,以右边表的连接字段,依次匹配左边表,如果在左侧的表没有记录匹配上,则左则表的记录值以NULL填充。

right join示例如下:

mysql> select * from t_a right join t_b on t_a.id_a=t_b.id_b;
+------+--------+------+--------+
| id_a | name_a | id_b | name_b |
+------+--------+------+--------+
| 2 | a_2 | 2 | b_2 |
| 3 | a_3 | 3 | b_3 |
| NULL | NULL | 4 | b_4 |
+------+--------+------+--------+
3 rows in set (0.00 sec)

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论