创建左表和右表,以及建表语句和数据插入
create table tab_left(
id int,
name int,
age int,
sex int
);
insert into tab_left values(1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4),(5,5,5,5),(6,6,6,6);
create table tab_right(
id int,
state int,
money int
);
insert into tab_right values(1,1,1),(2,2,2),(3,3,3),(4,4,4),(7,7,7),(8,8,8);
查看tab_left数据
select * from tab_left;
select * from tab_right;
两者无区别
通过id进行内连接,以及指定左表的name等于一个特定值,只能得到name等于特定值的记录。
select * from tab_left l join tab_right r on l.id=r.id where l.name=2;
select * from tab_left l join tab_right r on l.id=r.id and l.name=2;
select * from tab_left l join tab_right r on l.id=r.id and r.state=8;
join...on....and...
在左连接(右连接)符合条件
进行内连接,不符合
进行外连接
join...on...where...
,先进行外连接,在进行过滤
select * from tab_left l left join tab_right r on l.id=r.id where l.name=2;
select * from tab_left l left join tab_right r on l.id=r.id and l.name=2;
如果只进行左连接,1到4应该进行内连接,5到6进行外连接,
加上name的连接条件就下 相当于 只对符合条件的进行内连接,其它使用外连接。只有2符合,进行内连接
select * from tab_left l left join tab_right r on l.id=r.id where r.state=3;
select * from tab_left l left join tab_right r on l.id=r.id and r.state=3;
如果只进行左连接,1到4应该进行内连接,5到6进行外连接,
加上state的连接条件就下 相当于 只对符合条件的进行内连接,其它使用外连接。只有3符合,进行内连接
select * from tab_left l left join tab_right r on l.id=r.id and r.state=8;
如果只进行左连接,1到4应该进行内连接,5到6进行外连接,