mysql基础-多表查询

Mysql-多表查询

1.自连接

  • employee员工表

    image-20220420225303057

  • 获取员工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 ;
  • 查询结果

image-20220420225920858

2.非等值连接

  • 员工表和工资等级表

    image-20220420225502470

  • 获取员工姓名、工资和对应的工资级别

    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;
    
  • 查询结果

    image-20220420230000958

3.内连接、外连接

  • 内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行

  • 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的 行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。

  • 如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。

  • 如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表 。

  • 满外连接(FULL OUTER JOIN):MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT join代替。

3.1 Union实现满外连接

  • 员工表image-20220420230909178
  • 部门表

image-20220420230931121

  • 查询员工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语句之间使用UNIONUNION ALL关键字分隔。

UNION 操作符返回两个查询的结果集的并集去除重复记录

UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重

  • 注意的点

    1.要确保两个结果集是可以合并的,列数要相同(最好对应的字段意义也要相同,要不合并没有实际意义)

    2.如果明确知道合并数据后的结果数据 不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。

posted @   iaxusyy  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示