sql之left join、right join、inner join的区别,连接自己时的查询结果测试
sql之left join、right join、inner join的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
举例如下:
--------------------------------------------
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
--------------------------------------------
注:
LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.
---------------------------
#左连接LEFT JOIN 连接自己时的查询结果测试
#左连接LEFT JOIN 连接自己时的查询结果(都会出现两个重复字段),两个表都有as后只能查询相等条件id非null的数据
SELECT * FROM tabA as k LEFT JOIN tabA as p ON k.id = p.id WHERE p.`partner_id` = '25'
#只有一个表用as方法,用k.`partner_id`时id为null的都会查询出来,但后面一个表的字段内容只有id不为null的数据不为null,其他都为null
SELECT * FROM tabA as k LEFT JOIN tabA ON k.id = tabA.id WHERE k.`partner_id` = '25'
#只有一个表用as方法,用tabA.`partner_id`时只能查询相等条件id非null的数据,跟两个表都用as一样
SELECT * FROM tabA as k LEFT JOIN tabA ON k.id = tabA.id WHERE tabA.`partner_id` = '25'
#左连接LEFT JOIN 连接自己时的查询结果,不用as时无法查询,提示:错误代码: 1066,Not unique table/alias: 'tabA'
SELECT * FROM tabA LEFT JOIN tabA ON tabA.id = tabA.id WHERE tabA.`partner_id` = '25'
==========================
本人微信公众帐号: 心禅道(xinchandao)
本人微信公众帐号:双色球预测合买(ssqyuce)
sql之left join、right join、inner join的区别,连接自己时的查询结果测试相关推荐
- 【转载】SQL中使用update inner join和delete inner join
原文地址:SQL中使用update inner join和delete inner join Update XXX set XXX where 这种写法大家肯定都知道,才发现update和delete ...
- 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别...
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- 图解SQL inner join、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
- sql join 示例_SQL CROSS JOIN与示例
sql join 示例 In this article, we will learn the SQL CROSS JOIN concept and support our learnings with ...
- sql join on和不用join区别_图解 SQL 各种 JOIN,太有用了!
点击上方蓝字关注小姐姐吧从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付.现在偶尔需要到后台的 SQL Server 里追查一些数 ...
- SQL入门之第十讲——INNER JOIN 内连接
在实际的业务当中,往往需要多张表连接查询,这就会涉及到JOIN 连接 1. JOIN 连接的类型 INNER JOIN :内连接, 可以只写JOIN ,只有连接的两个表中,都存在连接标准的数据才会保留 ...
- 【SQL】 delete update中使用inner join
Update Update XXX set XXX where 这种写法大家肯定都知道,update和delete支持inner join的update方式,这个在表间关联来做更新和删除操作非常有用 ...
- oracle11g中的join,sql - 使用Oracle 11g中的+符号进行左外连接
(+)相当于(+). 在Oracle中,(+)表示JOIN中的"可选"表. 所以在你的第一个查询中,它是一个(+).在你的第二个查询中,它是(+).它们在功能上是等价的. 在术语中 ...
最新文章
- 国产scrum敏捷开发工具- leangoo领歌
- 数据可视化 | Seaborn
- 查看内核中每个函数花费的时间 initcall_debug
- hdu5348 MZL's endless loop(欧拉回路)
- VTK:PolyData之ResampleAppendedPolyData
- 记事本写html怎么加a1图片,记事本-功能待添加
- 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·007【uni-app和vue.js基础快速上手】
- 【20181031T2】几串字符【数位DP思想+组合数】
- Obejctive-C 2.0 Mac和iOS开发实践指南(Objective-C 2.0最佳入门指南)
- edraw max for mac(亿图图示 mac)
- 中国视频云千亿市场,阿里云四年稳居“第一”
- Jquery 插件开发——citylinkage(省、市、县城市联动选择)
- ceph集群全部停机开机
- 一夜没睡,仍然精力充沛——工作规划-2013.07.23
- neo4j-入门---学习复杂关系使用CQL语句操作图数据库(二)
- Kubernetes(k8s)从入门到精通
- PO模式项目实战思路分析
- 关于大学在校生对共享单车的用后体验的调查报告
- 基于django+mysql的教师教学质量评价系统源代码,教学评价系统源码
- 超详细: Type-C接口Macbook笔记本无法充电(时连时断)的傻瓜处理流程
热门文章
- 浮点数为何不能进行相等性比较
- Linux无盘工作站架设实例
- 推进五通一平:手淘技术核心三大容器 五大方案首次整体亮相 百川开放全面升级...
- 微软发布了Spartan项目的细节,并证实了某些流言
- Python Module — asyncio 协程并发
- 从 2017 OpenStack Days China 看国内云计算的发展现状
- Openstack 实现技术分解 (1) 开发环境 — Devstack 部署案例详解
- hdu 4568 Hunter bfs建图+TSP状压DP
- JAVA学习日记DAY1
- freemarker.template.TemplateException: Expected string. column.nullable evaluated instead to freemar