MySql 中Join操作的用法!
MySql 中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
查询结果为:
注意: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
查询结果为:
可以看到产生的结果集为两个表各自个数的乘积,通常在实际操作中要避免这种操作。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论