一. 基本概念
-
LEFT JOIN 左连接:以左表为主,显示左表所有的数据,右表中没有的显示null值。
-
RIGHT JOIN 右连接:以右表为主,显示右表所有的数据,左表中没有的显示null值。
-
INNER JOIN 内连接:只返回两个表中连接字段相等的行。
FULL JOIN自然连接(自然连接和内连接一样,一般情况下都使用自然联结)
二. 环境准备
CREATE TABLE A(
id INT NOT NULL AUTO_INCREMENT,
作者 VARCHAR(10),
出自 VARCHAR(10),
PRIMARY KEY (id)
);
INSERT INTO A (作者,出自) VALUES('荀子','劝学');
INSERT INTO A (作者,出自) VALUES('屈原','离骚');
INSERT INTO A (作者,出自) VALUES('老子','老子');
CREATE TABLE B(
id INT,
verse VARCHAR(30)
);
INSERT INTO B(id,verse) VALUES(1,'不积跬步无,以至千里');
INSERT INTO B(id,verse) VALUES (2,'路漫漫其修远兮,吾将上下而求索');
INSERT INTO B(id,verse) VALUES (4,'不积小流,无以成江海');
1. 左链接测试
#左链接
SELECT A.* ,B.* FROM A LEFT OUTER JOIN B ON(A.`id`=B.`id`);
测试结果:
2. 右链接测试
#右连接
SELECT A.* ,B.* FROM A RIGHT OUTER JOIN B ON(A.`id`=B.`id`);
测试结果:
3. 内链接(自然连接)测试
#内连接
#自然连接(内连接和自然联结一样,一般情况下都使用自然联结)
SELECT * FROM a,b WHERE a.`id`=b.`id`;
测试结果:
三. on、where 的区别
-
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
-
where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
-
on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后。
SELECT * FROM A LEFT JOIN B ON(a.`id`=b.`id`) WHERE a.`作者`='荀子';
测试结果:
持续更新…
参考连接:
链接: SQL语句join on和where的区别
链接: SQL中的左连接与右连接,内连接有什么区别