Mysql的内连接及左右外连接


随着业务量的不断复杂,多表查询与多表连接成为了我们在数据查询时必要的一部分。本文将介绍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 …



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


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插入进去。


作者:筱剑Beta

2019-12-20 16:43:09.0编辑

2019-08-07 12:30:09.0创作

所属分类:Mysql

mysql
sql
发布

街角有人祝福,巷口有人哭,这里却没人评论ε=(´ο`*)))