七种SQL JOINS

  • 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;

  • select * from tbl_emp;

  • 两个集合笛卡尓积 select * from tbl_emp,tbl_dept;



  • select * from tbl_emp a inner join tbl_dept b on a.deptId=b.id;

  • select * from tbl_emp a left join tbl_dept b on a.deptId=b.id;

  • select * from tbl_emp a right join tbl_dept b on a.deptId=b.id;

  • select * from tbl_emp a left join tbl_dept b on a.deptId=b.id where b.id is null;

  • select * from tbl_emp a right join tbl_dept b on a.deptId=b.id where a.deptId is null;

  • 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;

  • 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;

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

从理论上来分析,确实是 inner join 的性能要好,因为是选出 2 个表都有

的记录,而 left join 会出来左边表的所有记录、满足 on 条件的右边表的记录。


1.在解析阶段,左连接是内连接的下一阶段,内连接结束后,把存在于左输

入而未存在于右输入的集,加回总的结果集,因此如果少了这一步效率应该要

高些。


2.在编译的优化阶段,如果左连接的结果集和内连接一样时,左连接查询会

转换成内连接查询,即编译优化器认为内连接要比左连接高效。

### 七种SQL JOINS的更多相关文章

  1. SQL Server 优化存储过程的七种方法

    原文:SQL Server 优化存储过程的七种方法 优化存储过程有很多种方法,下面介绍最常用的7种. 1.使用SET NOCOUNT ON选项 我们使用SELECT语句时,除了返回对应的结果集外,还会 ...

  2. 只显示前几条数据的sql语句写法 七种数据库中Select Top的使用方法

    七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT ...

  3. MySQL逻辑架构、SQL加载执行顺序、七种JOIN模式图解

    逻辑架构   存储引擎 查看当前安装的mysql提供的存储引擎 查看当前mysql默认的存储引擎 MyISAM和InnoDB SQL加载执行顺序 sql书写顺序 mysql解析器执行的顺序  考点:m ...

  4. 探讨SQL Server并发处理存在就更新七种解决方案

    前言 本节我们来讲讲并发中最常见的情况存在即更新,在并发中若未存在行记录则插入,此时未处理好极容易出现插入重复键情况,本文我们来介绍对并发中存在就更新行记录的七种方案并且我们来综合分析最合适的解决方案 ...

  5. SQL Tuning 基础概述07 - SQL Joins

    N多年之前,刚刚接触SQL的时候,就被多表查询中的各种内连接,外连接,左外连接,右外连接等各式各样的连接弄的晕头转向. 更坑的是书上看到的各种表连接还有两种不同的写法, 比如对于表A,表B的查询 1, ...

  6. 面试官的七种武器:Java篇

    起源 自己经历过的面试也不少了,互联网的.外企的,都有.总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的.细细想来,面试官拥有以下七种武器.恰似古龙先生笔下的武侠世界 ...

  7. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  8. Mysql表的七种引擎类型,InnoDB和MyISAM引擎对比区别总结

    InnoDB和MyISAM区别总结 我用MySQL的时候用的是Navicat for MySQL(Navicat for mysql v9.0.15注册码生成器)操作库.表操作的,默认的表就是Inno ...

  9. 百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等

    如果说去年百度世界的关键词是“百度新首页”的话,那么今年在研发者人群中,对百度世界最深的印象就是“七种武器”,即在云的世界里,百度为开发者所提供的包括个人云存储.LBS.移动云测试中心等在内的七种工具 ...

随机推荐

  1. 【CC2530入门教程-04】CC2530的定时/计数器原理与应用

    第4课  CC2530的定时/计数器原理与应用 广东职业技术学院  欧浩源 一.定时/技术器的基本原理 定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提 ...

  2. mysql update 批量更新

    UPDATE cntheater SET title = (SELECT title FROM cntheater_copy WHERE cntheater.id = cntheater_copy.i ...

  3. java编码详解

    举个例子 我们在开发过程中,特别是多种编码格式并存的情况下,很容易遇到乱码问题. 假如有一个GBK编码java文件,然后再使用-Dfile.encoding=GBK参数,写入的文件中哪些是乱码呢.那如 ...

  4. linux虚拟机下安装samba

    默认情况下,Linux系统在默认安装中已经安装了Samba服务包的一部分 ,为了对整个过程有一个完整的了解,在此先将这部分卸载掉.使用命令 rpm -qa | grep samba ,默认情况下可以查 ...

  5. 统计学习方法 三 kNN

    KNN (一)KNN概念: K近邻算法是一种回归和分类算法,这主要讨论其分类概念: K近邻模型三要素: 1,距离: 2,K值的选择: K值选择过小:模型过复杂,近似误差减小,估计误差上升,出现过拟合 ...

  6. javaWeb第一天

    //第一个JavaWeb项目package com.chy.action; import java.io.IOException; import javax.servlet.ServletExcept ...

  7. ReadAndWriteBinaryFile

    package JBJADV003;import java.io.FileInputStream;import java.io.DataInputStream;import java.io.EOFEx ...

  8. vijos1011题解

    题目:      顺治喜欢滑雪,这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待太监们来载你.顺治想知道载一个区域中最长的滑坡.区域 ...

  9. Java自学手记——集合

  10. 谷歌是如何做代码审查的 | 外刊IT评论 - Google Chrome

    谷歌是如何做代码审查的           本文的作者 Mark CC 在上一篇文章中提到过,我已经不在Google工作了.我还没有想清楚应该去哪里-有两三个非常好的工作机会摆在我面前.因为在这段做决 ...