MYSQL学习笔记22: 多表查询

多表查询


单表查询

查询emp表

select * from emp;

查询dept表

select * from dept;

笛卡尔积(全组合)

#emp表有4条记录, dept表有6条记录
#笛卡尔积有4*6=24条记录
select * from emp,dept;

消除无效的笛卡尔积 (emp和dept通过dept_id连接)
select * from emp,dept     
where emp.dept_id = dept.id;


多表查询分类


  • 连接查询

  • 子查询


连接查询

  • 内连接

    • 相当于查询A,B交集部分的数据 ($A∩B$)
    • 隐式内连接
    • 显式内连接
  • 外连接

    • 左外连接: 查询左表所有数据, 以及两张表交集部分的数据

    • 右外连接: 查询右表所有数据,以及两张表交集部分的数据

  • 自联接

    • 当前表与自身的连接查询, 自联接必须使用表别名

内连接

查询两张表的交集部分
  • 隐式内连接
select 字段列表 from 表1, 表2 where 条件...;

查询

#查询每一个员工姓名,以及关联的部门名称
select emp.name, dept.name from emp, dept
    where dept_id = dept.id;

通过别名简化查询

select e.name '员工名称', d.name '部门名称'
    from emp e,
         dept d
    where e.id = d.id;


  • 显式内连接
#inner关键字可以省略
select 字段列表 from 表1 [inner] join 表2 on 连接条件...;

查询

select e.name '员工名称', d.name '部门名称'  
    from emp e  
    inner join dept d  
    on e.dept_id = d.id;
#inner关键字可以省略,结果是相同的
select e.name '员工名称', d.name '部门名称'
    from emp e
    join dept d
    on e.dept_id = d.id;


外连接

左外连接

查询表1(左表)的所有数据, 包含表1和表2交集部分的数据

#outer关键字可以省略
select 字段列表 from 表1 left [outer] join 表2 on 条件...;

左外连接

select * from emp e
    left outer join dept d
    on e.dept_id = d.id;

右外连接

查询表1(右表)的所有数据, 包含表1和表2交集部分的数据

#outer关键字可以省略
select 字段列表 from 表1 right[outer] join 表2 on 条件...;

左外连接

select * from dept d
    left outer join emp e
    on d.id = e.dept_id;

包含了左表中存在, 右表中为空的字段(市场部,财务部,销售部)

posted @ 2024-03-09 15:02  HIK4RU44  阅读(14)  评论(0)    收藏  举报