DB: MySQL
1. create table and insert values:
create table t1(id int, name varchar(30));
insert into t1(id, name) values(1, 'a');
insert into t1(id, name) values(2, 'b');
create table t2(id int, name varchar(30));
insert into t2(id, name) values(1, 'c');
insert into t2(id, name) values(3, 'd');
2. left join:
mysql> select t1.*, t2.* from t1 left join t2 on t1.id = t2.id;
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | a | 1 | c |
| 2 | b | NULL | NULL |
+------+------+------+------+
2 rows in set (0.00 sec)
若单单只用left join,则表示先把t1表里面的所有数据都取出来,然后再把表t2满足on后面条件的行取出来
3. left join + where:
mysql> select t1.*, t2.* from t1 left join t2 on t1.id = t2.id
-> where t1.id = 1;
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | a | 1 | c |
+------+------+------+------+
1 row in set (0.00 sec)
这种情况是在第2种情况的前提下加了个where,可以这样来理解:先把表t1的数据都取现来,然后再把表t2满足on后面条件的行取出来,最后再把得到的所有数据除去不满足where条件的行
4. left join/inner join区别:
我觉得可以这样来理解:left join其实就是 = 表t1的所有行记录(t1.*, NULL, NULL...) 与 inner join的结果集(t1.*, t2.*)的一个合集
5. on条件:
mysql> select t1.*, t2.* from t1 left join t2 on t1.id = t2.id and 1 = 2;
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | a | NULL | NULL |
| 2 | b | NULL | NULL |
+------+------+------+------+
2 rows in set (0.00 sec)
--same to select t1.*, t2.* from t1 left join t2 on 1 = 2;
on条件与where条件完全就是两码事,也许有人会认为下面这两条SQL是一个意思,那就是搞错了,呵呵。。。
mysql> select t1.*, t2.* from t1 left join t2
-> on t1.id = t2.id and t1.id = 1;
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | a | 1 | c |
| 2 | b | NULL | NULL |
+------+------+------+------+
2 rows in set (0.00 sec)
mysql> select t1.*, t2.* from t1 left join t2
-> on t1.id = t2.id
-> where t1.id = 1 or t1.id is null;
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | a | 1 | c |
+------+------+------+------+
1 row in set (0.00 sec)
--看出来两条SQL的区别了吧
分享到:
相关推荐
inner join、 left join 、right join、 outer join之间的区别
SQL语句left join/right join/inner join 的用法比较 SQL语句left join/right join/inner join 的用法比较
left join right join inner join 区别和联系
from 多张表 等于 left join 其他表.
hive sql + left join 数据缺失
LINQ to datable实现Left join right join full join VB2010源码
比较实用的方法,已经用到项目里,很好用的一个方法
Left join优化规则的研究 一、概述 对于left join的优化,是应用开发人员、数据库内核开发人员关注的问题之一。 应用开发人员关注是因为:并不是每个数据库的内核都支持left join的内部转化,这时候需要应用...
SQL语句inner join,left join ,right join连接的不同之处, 非常实用
left join 过滤条件写在on后面和写在where 后面的区别
SQL left join用法,初学者应用
Sql语句用left join解决多表关联问题(关联套关联,例子和源码)一看就明白多表关联如何写SQl语句
(Left join , Right Join, Inner Join)用法详解,对Left join , Right Join, Inner Join完全掌握,由浅入深,真正领悟。
关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行。 如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 ...
SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt欢迎下载!
Mysql之innerjoin,leftjoin,rightjoin详解.pdf
是sql语句的一些基本应用,是一道练习题,内附有答案
left_join_on_and与left_join_on_where的区别
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1....