sql 外连接的写法。
首先现做个说明
左外连接就是左连接
右外连接就是右连接
简称而已
而左内 右内连接是不存在的
下面做个详细讲解。
首先建两个表作讲解用
员工表: 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 外连接的写法。相关推荐
- SQL外连接之交集、并集、差集查询
接上一小节的内容,重点讲述了外连接的类型,外连接的语法结构,本小节将会在外连接的基础上,重点阐述下交集.并集.差集查询. 1.交集 交集的示意图如下: 语法结构为: A.B的交集: select * ...
- 转:SQL:外连接on条件与where条件的区别
原文地址:http://hi.baidu.com/benben1006/blog/item/187deb77bc0e5319b151b974.html 数据库在通过连接两张或多张表来返回记录时,都会生 ...
- SQL的进阶之路05:外连接
SQL外连接是常用的格式转换方式,分为全连接,左连接,右连接.本节专门对外连接的特性进行讲解! 一,利用外联接进行(行->列) 利用这张表生成下面这样格式的表格: SELECT C0.NAME, ...
- Oracle 左外连接的一些測试
为了更加深入左外连接,我们做一些測试,外连接的写法有几种形式,我们能够通过10053跟踪到终于SQL转换的形式. --初始化数据 create table A ( id number, age ...
- 数据库-内连接与外连接的区别(举例说明)
原文链接:https://blog.csdn.net/Dove_Knowledge/article/details/71420206 1.内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出 ...
- 你真的会玩SQL吗?内连接、外连接
大多数人一般写多表查询会这样写select * from tbA ,tbB 没有用到JOIN关键字,太Low了,官网标准建议是用JOIN明确表间的关系,下面具体来讲. 连接类型: 交叉联接 得到所连 ...
- mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...
- 你真的会玩SQL吗?和平大使 内连接、外连接
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- SQL 左外连接,右外连接,全连接,内连
SQL 左外连接,右外连接,全连接,内连接 连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条 ...
最新文章
- java soap协议头_java – 服务器无法识别HTTP标头“SOAPAction”的值
- JQuery设置checkbox的值,取checkbox的值,设置radio的值,取radio的值,设置下拉选select的值,取select的值...
- 记事本写python怎么运行-python入门之一个简单记事本
- 论https和http谁对网站优化更友好
- 不同进制数的表示方法
- python编码思维导图_Python入门之ATM+购物车代码版思维导图
- 强化学习离轨策略:从失败中获得成功经验 - 以追女孩为例 | 采样率的数学意义
- 二、kafka基本操作和管理
- POJ 1149 PIGS(最大流)dinic模板注释
- 后台推送消息给app_uni-app 消息推送
- java输入任意一个字母的语句_java-检查用户输入的字符串是否包含用户输入的字母(不包括任何多余字母)的if语句...
- Visual Studio GUI应用程序_弹出控制台窗口/命令行窗口/dos窗口问题解决
- python爬取bilibili数据_用 Python 抓取 bilibili 弹幕并分析!
- 小码哥C++_汇编指令
- 有道单词导入 大量有道单词 生词本 批量导入 添加 有道单词XML 背单词
- python(2048)
- 矩池云 | Tony老师解读Kaggle Twitter情感分析案例
- html5微信自动播放视频,科技常识:HTML5页面音视频在微信和app下自动播放的实现方法...
- 数据挖掘知识点整理(期末复习版)
- TF-IDF算法及实现