my sql中join的操作
SQL标准中的Join的类型:
首先,设置表employees和department的数据为:
1、inner join … on操作类型
内连接inner join是基于连接谓词将两张表(如A和B)的列组合在一起的,产生新的结果表。
例子:
SELECT *
FROM employees a
inner join department b
ON a.department_id = b.department_id
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
查询结果为:
注意:inner join 可以简写为join,该查询得出的结果为两张表共同的部分。效果和使用where语句一样,如下语句:
SELECT *
FROM employees a, department b
WHERE a.department_id = b.department_id
- 1
- 2
- 3
- 1
- 2
- 3
2、left join … on操作类型
左外连接又 称为左连接,以A表为基础,会显示A表的所有记录,如果匹配不到B表的记录,会显示null。
例子:
SELECT *
FROM employees a
LEFT JOIN department b
ON a.department_id = b.department_id
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
查询结果为:
可以看到,employees_id = 6 的department_id是null,因为该员工未分配部门。
因此,可以利用这个特征,找出未被分配员工的名单,其SQL语句如下:
SELECT *
FROM employees a
LEFT JOIN department b
ON a.department_id = b.department_id
WHERE a.department_id is NULL
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
查询结果为:
注意:在上面的语句中,添加了WHERE条件语句,找到等于空的部门id从而找到,未被分配员工的名单。
该方法:亦可以用于优化not in的操作,通常not in不会使用索引操作,而left join 则可以使用索引操作。
3、right join …. on操作类型
右外连接又称为右连接,以B表为基础,会显示B表的所有记录,如果匹配不到A表的记录,会显示null。
例子:
SELECT *
FROM employees a
RIGHT JOIN department b
ON a.department_id = b.department_id
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
查询结果为:
可以看到部门这张表的信息是全部展示出来的,而在部门id为4时的员工是空的,因此,可以利用这个特点找出部门中员工格式为0的部门,其sql语句如下:
SELECT *
FROM employees a
RIGHT JOIN department b
ON a.department_id = b.department_id
WHERE a.employees_id is NULL
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
查询结果为:
4、full join … on操作类型
在MySQL中是不支持full join … on全连接操作,只能通过左连接和右连接的合集来实现,其代码如下:
SELECT *
FROM employees a
LEFT JOIN department b
ON a.department_id = b.department_id
UNION ALL
SELECT *
FROM employees a
RIGHT JOIN department b
ON a.department_id = b.department_id
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
结果为:
5、cross join 操作
交叉连接(cross join),又称笛卡尔连接(cartersian join)或叉乘(product),如果A和B是两个集合,它们的交叉连接就标记为:A*B
例子:
SELECT *
FROM employees a
CROSS JOIN department b
- 1
- 2
- 3
- 1
- 2
- 3
查询结果为:
my sql中join的操作的更多相关文章
- SQL点滴33—SQL中的字符串操作
原文:SQL点滴33-SQL中的字符串操作 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...
- 关于sql中join
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- SQL中join和cross join的区别
SQL中的连接可以分为内连接,外连接,以及交叉连接 . 1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积: 举例, ...
- SQL中union运算操作的理解
在SQL中,对于并运算,可以使用union关键字. 例如: SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FRO ...
- SQL中JOIN 的用法
关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create table table1(id int ...
- SQL中join的用法
关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create table table1(id int ...
- SQL中join连接查询时条件放在on后与where后的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...
- Oracle SQL中join方式总结
在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结).SQL JOIN其实是一个逻辑概念,像NEST LOOP JOIN. HASH JOIN等 ...
- SQL中的去重操作
if not object_id('Tempdb..#T') is null drop table #T Go Create table #T([ID] ),[Memo] nvarchar()) In ...
随机推荐
- DEX 方法超过64K限制和gradle编译OOM问题解决
如果你是一个android开发者,你至少听说过的Dalvik的蛋疼的64K方法限制.概括地说,在一个DEX文件,你可以调用很多的方法,但你只能调用它们最前面的65,536个 ,因为这是在方法调用集合中 ...
- Hessian最佳实践
前言:本文主要介绍‘独立的Hessian技术’与‘结合Spring技术’的两种Hessian接口开发模式及代码示例. 一.独立的Hessian技术开发步骤 Hessian-Java服务器端必须具备以下 ...
- kvm虚拟化平台搭建入门
KVM虚拟化有两种网络模式:1)Bridge网桥模式2)NAT网络地址转换模式Bridge方式适用于服务器主机的虚拟化.NAT方式适用于桌面主机的虚拟化. 环境: 本次实验要开启VMWare中对应Ce ...
- System.Web.Mvc.dll在各个版本MVC中的文件位置
the default folder would be like the following: MVC 5 C:\Program Files (x86)\Microsoft ASP.NET\ASP.N ...
- CG Rendering v.s. Browser Rendering
浏览器的渲染技术 v.s. CG渲染器的渲染技术 看了两篇文章: 浏览器的渲染原理简介, How browsers work(译文), 想到了一些东西, 对比两者, 或许有些东西能想得更明白些. 以下 ...
- dingding post POST请求
POST请求请在HTTP Header中设置 Content-Type:application/json,否则接口调用失败 获取AccessToken Https请求方式: GET https://o ...
- [转载]ARM协处理器CP15寄存器详解
用于系统存储管理的协处理器CP15 原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond} coproc,opc ...
- Access forbidden! You don't have permission to access the requested object. It is either read-protected or not readable by the server
好久不没弄 apache和php了,突然遇到这种奇葩的问题,本来想直接在网上找现成的解决思路,结果网上搜索花了不少功夫,也没找到原因. 后来看日志文件:apache\logs\error.log发现了 ...
- centos7 firewall 防火墙
在部署dubbo-monitor 和dubbo-admin zookeeper时候,外部访问不了部署好的服务,因为端口问题 ,现在把端口操作总结一下 参考: http://www.cnblogs.co ...
- 如何利用OEM工具(ORACLE ENTERPRISE MANAGER),增加表空间