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的操作的更多相关文章

  1. SQL点滴33—SQL中的字符串操作

    原文:SQL点滴33-SQL中的字符串操作 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...

  2. 关于sql中join

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  3. SQL中join和cross join的区别

    SQL中的连接可以分为内连接,外连接,以及交叉连接 . 1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积: 举例, ...

  4. SQL中union运算操作的理解

    在SQL中,对于并运算,可以使用union关键字. 例如: SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FRO ...

  5. SQL中JOIN 的用法

    关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create table table1(id int ...

  6. SQL中join的用法

    关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create table table1(id int ...

  7. SQL中join连接查询时条件放在on后与where后的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

  8. Oracle SQL中join方式总结

    在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结).SQL JOIN其实是一个逻辑概念,像NEST LOOP JOIN. HASH JOIN等 ...

  9. SQL中的去重操作

    if not object_id('Tempdb..#T') is null drop table #T Go Create table #T([ID] ),[Memo] nvarchar()) In ...

随机推荐

  1. 判断一个Activity 判断一个包 是否存在于系统中 的方法

    判断一个包是否存在于系统中(来自网络),经过测试,好用: public boolean checkBrowser(String packageName) { if (packageName == nu ...

  2. mysql内存使用以及优化中需要的几点注意

    1.从内存中读取数据是微秒级别的.而从磁盘读则是毫秒级别的.二者相差一个数量级.所以想优化数据库,第一个要做到的就是优化io. 2.key_buffer_size[global]设置的内存区域大小缓存 ...

  3. 崽崽帮www.zaizaibang.com精选14

    [行走贵州]爽爽贵阳,乐活天堂! 北京儿童医院将建遗传代谢病专科医院 [山东十大最难懂方言]原来青岛话还是很好懂滴 ❤如果南宁的儿童医院长这样…… 成都三所小学入围中国百强小学名单 [乐湖新闻]学习中 ...

  4. TIOBE Index for January 2016(转载)

    Java has won the TIOBE Index programming language award of the year. This is because Java has the la ...

  5. keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序,编译后出现以下问题 .\obj\pro1.axf: Error: L6218E: Undefined symbol FLASH_PrefetchBuf ...

  6. Hibernate5.2之反向工程

                                                          Hibernate5.2之反向工程 一.描述 可能很多人在使用Hibernate进行项目开发 ...

  7. 总结一下响应式设计的核心CSS技术Media(媒体查询器)的用法。(转)

    <meta http-equiv="X-UA-Compatible" content="IE=edge"><!--兼容ie-->< ...

  8. eclispe中在线安装maven插件

    启动Eclipse之后,在菜单栏中选择Help,然后选择Install New Software-,接着你会看到一个Install对话框, 点击Work with:字段边上的Add按钮,你会得到一个新 ...

  9. 帝国cms 无法生成静态页

    建立目录不成功!请检查目录权限 安装完了帝国网站管理系统(帝国CMS)之后,没有进行初始化内置数据的步骤,而引起的错误.其实只要你按照安装说明一步一步下来就不会出错. 解决办法:初始化内置数据 帝国c ...

  10. [转] 主流JS框架中DOMReady事件的实现

    在实际应用中,我们经常会遇到这样的场景,当页面加载完成后去做一些事情:绑定事件.DOM操作某些结点等.原来比较常用的是window的onload 事件,而该事件的实际效果是:当页面解析/DOM树建立完 ...