mysql基础-多表查询
Mysql-多表查询
1.自连接
-
employee员工表
-
获取员工id,员工last_name以及对应的经理id,经理last_name
SELECT emp .employee_id ,emp .last_name ,mgr .employee_id ,mgr .last_name
from employees emp,employees mgr
WHERE emp .manager_id =mgr .employee_id ;
- 查询结果
2.非等值连接
-
员工表和工资等级表
-
获取员工姓名、工资和对应的工资级别
SELECT e.last_name ,e.salary ,jg.grade_level FROM employees e ,job_grades jg WHERE e.salary BETWEEN jg.lowest_sal AND jg .highest_sal;
-
查询结果
3.内连接、外连接
内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的 行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。
如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。
如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表 。
满外连接(FULL OUTER JOIN):MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT join代替。
3.1 Union实现满外连接
- 员工表
- 部门表
- 查询员工id、员工姓名和部门名称的满外连接
(select e.employee_id ,e.last_name ,d.department_name
FROM employees e left join departments d
on e.department_id = d.department_id)
UNION
(select e.employee_id ,e.last_name ,d.department_name
FROM employees e right join departments d
on e.department_id = d.department_id);
4.UNION的使用
合并查询结果 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并 时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。
UNION 操作符返回两个查询的结果集的并集,去除重复记录。
UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
-
注意的点
1.要确保两个结果集是可以合并的,列数要相同(最好对应的字段意义也要相同,要不合并没有实际意义)
2.如果明确知道合并数据后的结果数据 不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。
本文来自博客园,作者:iaxusyy,转载请注明原文链接:https://www.cnblogs.com/ww-NoBugs/p/16172417.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本