七种SQL JOINS

七种SQL JOINS

928390-20170809155357324-2141261052.jpg

  • 1.SELECT select_list FROM TABLEA A LEFT JOIN TABLEB B ON A.Key=B.Key

  • 2.SELECT select_list FROM TABLEA A RIGHT JOIN TABLEB B ON A.Key=B.Key

  • 3.SELECT select_list FROM TABLEA A LEFT JOIN TABLEB B ON A.Key=B.Key
    WHERE B.key is NULL

  • 4.SELECT select_list FROM TABLEA A RIGHT JOIN TABLEB B ON A.Key=B.key
    WHERE A.Key is null

  • 5.SELECT select_list FROM TABLE A INNER JOIN TABLEB B ON A.Key=B.Key

  • 6.SELECT select_list FROM TABLE A FULL OUTER JOIN TABLEB B ON A.Key=B.Key(Oracle支持)

  • 7.SELECT select_list FROM TABLE A FULL OUTER JOIN TABLEB B ON
    WHERE A.Key IS NULL OR B.Key IS NULL(Oracle支持)

运行效果
create table tbl_dept(
  id int(11) not null auto_increment,
  deptName varchar(30) default null,
  locAdd varchar(40) default null,
  primary key(id)
)engine=innodb auto_increment=1 default charset=utf8;


create table tbl_emp(
  id int(11) not null auto_increment,
  name varchar(20) default null,
  deptId int(11) default null,
  primary key(id),
  key fk_dept_id (deptId)
  #constraint fk_dept_id foreign key (deptId) references tbl_dept (id)
)engine=innodb auto_increment=1 default charset=utf8;

insert into tbl_dept(deptName,locAdd)values('RD',11);
insert into tbl_dept(deptName,locAdd)values('HR',12);
insert into tbl_dept(deptName,locAdd)values('MK',13);
insert into tbl_dept(deptName,locAdd)values('MIS',14);
insert into tbl_dept(deptName,locAdd)values('FD',16);

insert into tbl_emp(name,deptId)values('z2',1);
insert into tbl_emp(name,deptId)values('z3',1);
insert into tbl_emp(name,deptId)values('z4',1);
insert into tbl_emp(name,deptId)values('z4',1);
insert into tbl_emp(name,deptId)values('z6',1);
insert into tbl_emp(name,deptId)values('w5',2);
insert into tbl_emp(name,deptId)values('s7',3);
insert into tbl_emp(name,deptId)values('s8',4);
insert into tbl_emp(name,deptId)values('s9',51)

  • select * from tbl_emp;
    928390-20170809152727949-1871144065.png

  • select * from tbl_emp;
    928390-20170809152742761-358723029.png

  • 两个集合笛卡尓积 select * from tbl_emp,tbl_dept;
    928390-20170809152752339-1043614208.png
    928390-20170809152801745-1009485697.png

  • select * from tbl_emp a inner join tbl_dept b on a.deptId=b.id;
    928390-20170809152912902-1441685115.png

  • select * from tbl_emp a left join tbl_dept b on a.deptId=b.id;
    928390-20170809152923074-1737497020.png

  • select * from tbl_emp a right join tbl_dept b on a.deptId=b.id;
    928390-20170809152933574-1379945719.png

  • select * from tbl_emp a left join tbl_dept b on a.deptId=b.id where b.id is null;
    928390-20170809153009527-1502471552.png

  • select * from tbl_emp a right join tbl_dept b on a.deptId=b.id where a.deptId is null;
    928390-20170809153028808-1460087573.png

  • select * from tbl_emp a left join tbl_dept b on a.deptId=b.id
    union
    select * from tbl_emp a right join tbl_dept b on a.deptId=b.id;
    928390-20170809153047699-949225304.png

  • select * from tbl_emp a left join tbl_dept b on a.deptId=b.id where b.id is null
    union
    select * from tbl_emp a right join tbl_dept b on a.deptId=b.id where a.deptId is null;
    928390-20170809153058917-1255327985.png

  • inner join 和 和 left join 的性能比较

    从理论上来分析,确实是 inner join 的性能要好,因为是选出 2 个表都有
    的记录,而 left join 会出来左边表的所有记录、满足 on 条件的右边表的记录。
    1.在解析阶段,左连接是内连接的下一阶段,内连接结束后,把存在于左输
    入而未存在于右输入的集,加回总的结果集,因此如果少了这一步效率应该要
    高些。
    2.在编译的优化阶段,如果左连接的结果集和内连接一样时,左连接查询会
    转换成内连接查询,即编译优化器认为内连接要比左连接高效。

转载于:https://www.cnblogs.com/Onlywjy/p/7325619.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值