代码音符

Mysql的内连接及左右外连接

创建时间: 2019-8-7 12:30

修改时间: 2023-7-29 15:34

浏览: 337

随着业务量的不断复杂,多表查询与多表连接成为了我们在数据查询时必要的一部分。本文将介绍Mysql的INNER JOIN ON(内连接)、LEFT OUTER JOIN ON(左外连接)、RIGHT OUTER JOIN ON(右外连接)等语法结构及示例。

语法结构:

table_reference
{[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}
table_reference
ON conditional_expr

内连接INNER JOIN … ON

在Mysql中,JOIN,CROSS JOIN和INNER JOIN是等价的。

ON关键字用于设定连接条件,也可以使用WHERE来代替。

但是通常,我们使用ON关键字来设定连接条件,使用WHERE关键字对结果集记录进行过滤。

内连接仅显示符合条件的记录,即在查询时,两张表都存在的相对应的数据,可理解为两张表的交集部分。

… INNER JOIN users AS u ON u.tb_column1 = tb_column2 …

多表处理,将需要操作的外表与users表内连接,users表中的列1,参照外表中的列2。

一个无厘头的示例:

UPDATE tb_province AS p INNER JOIN users AS u ON u.pid = p.id SET u.province = p.name

该操作根据users表中的pid字段到tb_province表中查找对应的省份名称,并更新到users表的province字段中。

外连接(左外连接)

左外连接即显示左表的全部记录及右表中符合连接条件的记录:

… LEFT JOIN users AS u ON u.tb_column1 = tb_column2 …

示例:

SELECT u.id, u.name, u.age, p.name FROM users AS u LEFT JOIN tb_province AS p ON p.id = u.pid

该方式通过左外连接查询,查询的结果为users的全部数据,相参照的tb_province中所不符合不存在的数据,p.name字段将会被置NULL。

外连接(右外连接)

右外连接即显示右表的全部记录及左表中符合连接条件的记录:

… RIGHT JOIN users AS u ON u.tb_column1 = tb_column2 …

总结

使用内连接进行联表查询时,只会查询到双方都不为空的结果;常用的左外连接会查询到左边表的所有内容,右表中没有对应的数据将会以NULL的形式返回。

骚操作,建表的同时插入已存在的数据

CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition, …)] select_statement

示例:

CREATE TABLE tb_user (
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(40) NOT NULL
) SELECT id, name FROM users;

创建一个新表,同时将users表的id和name插入进去。

创建时间: 2019-8-7 12:30

修改时间: 2023-7-29 15:34

浏览: 337

*本文遵循 CC BY-NC-SA 许可协议。转载请注明出处!