jac*_*.li 24 sql syntax join where
Sql语句.
1.select a.* from A a left join B b on a.id =b.id and a.id=2;
2.select a.* from A a left join B b on a.id =b.id where a.id=2;
Run Code Online (Sandbox Code Playgroud)
这两个sql语句有什么区别?
mr_*_*air 31
create table A(id int);
create table B(id int);
INSERT INTO A VALUES(1);
INSERT INTO A VALUES(2);
INSERT INTO A VALUES(3);
INSERT INTO B VALUES(1);
INSERT INTO B VALUES(2);
INSERT INTO B VALUES(3);
SELECT * FROM A;
SELECT * FROM B;
id
-----------
1
2
3
id
-----------
1
2
3
Run Code Online (Sandbox Code Playgroud)
过滤JOIN以防止在JOIN过程中添加行.
select a.*,b.*
from A a left join B b
on a.id =b.id and a.id=2;
id id
----------- -----------
1 NULL
2 2
3 NULL
Run Code Online (Sandbox Code Playgroud)
在JOIN发生后将过滤WHERE.
select a.*,b.*
from A a left join B b
on a.id =b.id
where a.id=2;
id id
----------- -----------
2 2
Run Code Online (Sandbox Code Playgroud)
小智 10
从a.id = b.id和a.id = 2的左连接B b中选择a.*;
这仅用于a.id连接条件,因此记录a.id <> 2不会被过滤掉.你可能会得到这样的结果:
+------+------+ | a.id | b.id | +------+------+ | 1 | NULL | | 2 | 2 | | 3 | NULL | +------+------+
你没有选择任何b列,但如果你这样做,它会更容易理解.
从a.id = b.id中的左连接B b中选择a.*,其中a.id = 2;
现在记录a.id <> 2过滤掉的地方.
+------+------+ | a.id | b.id | +------+------+ | 2 | 2 | +------+------+