我地经常见到sql语句中 left outer join...    right outer join...  其实对于新手来讲见到呢d字眼系最头痛的。
首先现做个说明
左外连接就是左连接
右外连接就是右连接

简称而已
而左内 右内连接是不存在的

下面做个详细讲解。

首先建两个表作讲解用
员工表: employee_1 

同埋 部门表: dep_1

可以见到 Nedved这个人没分配部门,  而部门Network 没人。

内连接:
我地来睇下最常见的连接语句

select a.name, b.dep_name from employee_1 a, dep_1 bwhere a.dep = b.dep_id

可以见到只有4行, 其中没有分配的员工Nedved,和没人的部门Network都被排除了。

这种只筛选两张表中存在对应目标的数据  的连接就叫内连接。

其实内连接的标准写法是:

select a.name, b.dep_name from employee_1 a inner join dep_1 b on (a.dep = b.dep_id)

不过个人强烈建议第一种写法, 因为可读性大大比标准写法好太多,特别是连接超过3张表的时候。

左外连接:(又简称左连接)
表连接中,以左边的表为基准, 列出右表的对应数据。 也就是说即使左边的Nedved没有分配部门, 一样把他select出来,
只不过对应的部门名字为Null值。
左外连接写法:   注意 left join 实际上就是 left outer join 的简写,  右外连接同理。

select a.name, b.dep_name from employee_1 a left join dep_1 b on (a.dep = b.dep_id)

分析下就知道, 内连接的结果实际上就是把左外连接的结果删掉 右表值为NULL得出的
也就是说:
左外连接相当于内连接再加上 左边那些在右表中找不到对应目标的数据的连接
等效于:

select a.name, b.dep_name from employee_1 a,dep_1 bwhere a.dep = b.dep_idunionselect a.name, Null from employee_1 awhere not exists(select 1 from dep_1 b                         where b.dep_id = a.dep)

在sybase中,左连接还可以这样写,注意与内连接差别很小哦

select a.name, b.dep_name from employee_1 a, dep_1 bwhere a.dep *= b.dep_id 

在oracle中  左连接还可以这样写

select a.name, b.dep_name from employee_1 a, dep_1 bwhere a.dep(+) = b.dep_id 

右外连接:(简称右连接)
刚好跟左外连接是相反的
表连接中,以右边的表为基准, 列出左表的对应数据。 也就是说即使右边的network部门没人, 一样把它select出来,
只不过对应的人名为Null值。

右外连接写法:

select a.name, b.dep_name from employee_1 a right join dep_1 b on (a.dep = b.dep_id)

实际上 a left join b 等价于 b right join a。  这个唔难理解

同上,
右外连接相当于内连接再加上 右边那些在左表中找不到对应目标的数据的连接
等效于:

select a.name, b.dep_name from employee_1 a,dep_1 bwhere a.dep = b.dep_idunionselect null, b.dep_namefrom dep_1 bwhere not exists(select 1 from employee_1 a                         where b.dep_id = a.dep)

在sybase中,右连接还可以这样写,

select a.name, b.dep_name from employee_1 a, dep_1 bwhere a.dep =* b.dep_id 

在oracle中  右连接还可以这样写

select a.name, b.dep_name from employee_1 a, dep_1 bwhere a.dep = b.dep_id(+) 

全外连接:(简称全连接)
跟左连接和右连接的集合(注意集合是没有重复数据的)
也就是说 把Nedved 和 部门Network都列出来了, 相应的值留空

全外连接写法:

select a.name, b.dep_name from employee_1 a full join dep_1 b on (a.dep = b.dep_id)

注意oralce 下面写法是错的, 全外连接没有其他写法(sybase  同理)

select a.name, b.dep_name from employee_1 a, dep_1 bwhere a.dep(+) = b.dep_id(+)

全外连接实际上是
左外连接
union
右外连接

注意union 是回去掉重复数据的哦。

最后讲一句, 实际工作中,能用内连接就用内连接....

sql 外连接的写法。相关推荐

  1. SQL外连接之交集、并集、差集查询

    接上一小节的内容,重点讲述了外连接的类型,外连接的语法结构,本小节将会在外连接的基础上,重点阐述下交集.并集.差集查询. 1.交集 交集的示意图如下: 语法结构为: A.B的交集: select * ...

  2. 转:SQL:外连接on条件与where条件的区别

    原文地址:http://hi.baidu.com/benben1006/blog/item/187deb77bc0e5319b151b974.html 数据库在通过连接两张或多张表来返回记录时,都会生 ...

  3. SQL的进阶之路05:外连接

    SQL外连接是常用的格式转换方式,分为全连接,左连接,右连接.本节专门对外连接的特性进行讲解! 一,利用外联接进行(行->列) 利用这张表生成下面这样格式的表格: SELECT C0.NAME, ...

  4. Oracle 左外连接的一些測试

    为了更加深入左外连接,我们做一些測试,外连接的写法有几种形式,我们能够通过10053跟踪到终于SQL转换的形式. --初始化数据 create table A (   id number,   age ...

  5. 数据库-内连接与外连接的区别(举例说明)

    原文链接:https://blog.csdn.net/Dove_Knowledge/article/details/71420206 1.内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出 ...

  6. 你真的会玩SQL吗?内连接、外连接

    大多数人一般写多表查询会这样写select * from tbA ,tbB  没有用到JOIN关键字,太Low了,官网标准建议是用JOIN明确表间的关系,下面具体来讲. 连接类型: 交叉联接 得到所连 ...

  7. mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  8. 你真的会玩SQL吗?和平大使 内连接、外连接

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. SQL 左外连接,右外连接,全连接,内连

    SQL 左外连接,右外连接,全连接,内连接       连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条 ...

最新文章

  1. java soap协议头_java – 服务器无法识别HTTP标头“SOAPAction”的值
  2. JQuery设置checkbox的值,取checkbox的值,设置radio的值,取radio的值,设置下拉选select的值,取select的值...
  3. 记事本写python怎么运行-python入门之一个简单记事本
  4. 论https和http谁对网站优化更友好
  5. 不同进制数的表示方法
  6. python编码思维导图_Python入门之ATM+购物车代码版思维导图
  7. 强化学习离轨策略:从失败中获得成功经验 - 以追女孩为例 | 采样率的数学意义
  8. 二、kafka基本操作和管理
  9. POJ 1149 PIGS(最大流)dinic模板注释
  10. 后台推送消息给app_uni-app 消息推送
  11. java输入任意一个字母的语句_java-检查用户输入的字符串是否包含用户输入的字母(不包括任何多余字母)的if语句...
  12. Visual Studio GUI应用程序_弹出控制台窗口/命令行窗口/dos窗口问题解决
  13. python爬取bilibili数据_用 Python 抓取 bilibili 弹幕并分析!
  14. 小码哥C++_汇编指令
  15. 有道单词导入 大量有道单词 生词本 批量导入 添加 有道单词XML 背单词
  16. python(2048)
  17. 矩池云 | Tony老师解读Kaggle Twitter情感分析案例
  18. html5微信自动播放视频,科技常识:HTML5页面音视频在微信和app下自动播放的实现方法...
  19. 数据挖掘知识点整理(期末复习版)
  20. TF-IDF算法及实现

热门文章

  1. buu [BJDCTF 2nd]燕言燕语-y1ng
  2. 【Flask项目】项目准备之-创建项目的APP对象
  3. [architecture]-ARM AMBA/AXI/ACE/LITE总线介绍
  4. REST framework 基本使用
  5. (34)内核编程基础
  6. (25)2-9-9-12分页(下)
  7. 金融专有云数据安全实践
  8. 【Apache 】 遇到的问题
  9. “九韶杯”河科院程序设计协会第一届程序设计竞赛 【前六题解析】
  10. sort函数的应用习题(二)