码迷,mamicode.com
首页 > 数据库 > 详细

MySql 中Join操作的用法

时间:2016-04-27 01:49:18      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:

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

查询结果为:
技术分享

注意:inner join 可以简写为join,该查询得出的结果为两张表共同的部分。效果和使用where语句一样,如下语句:

SELECT *
FROM employees a, department b
WHERE a.department_id = b.department_id

2、left join … on操作类型
左外连接又 称为左连接,以A表为基础,会显示A表的所有记录,如果匹配不到B表的记录,会显示null。
例子:

SELECT *
FROM employees a
LEFT JOIN department b
ON a.department_id = b.department_id

查询结果为:
技术分享

可以看到,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

查询结果为:
技术分享

注意:在上面的语句中,添加了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

查询结果为:
技术分享

可以看到部门这张表的信息是全部展示出来的,而在部门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

查询结果为:
技术分享


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

结果为:
技术分享


5、cross join 操作
交叉连接(cross join),又称笛卡尔连接(cartersian join)或叉乘(product),如果A和B是两个集合,它们的交叉连接就标记为:A*B
例子:

SELECT *
FROM employees a
CROSS JOIN department b

查询结果为:
技术分享

可以看到产生的结果集为两个表各自个数的乘积,通常在实际操作中要避免这种操作。

MySql 中Join操作的用法

标签:

原文地址:http://blog.csdn.net/timchen525/article/details/51255620

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!