Appearance
MySQL多表查询
部门表
员工表
dep_id 就是员工所在部门id
1.交叉连接:笛卡尔积
交叉连接,每1条数据都变成4条,把表合并,没有任何条件 select * from emp_new,dep
2.内连接 inner join
select e.name, e.sex, e.age, d.name 部门名称 from emp_new as e inner join dep d on e.dep_id = id.id // 部门名称 是dep表name列的别名, 注意:shengteng dep_id =204,dep表没有相等的id,所以没查出来
左连接 left join
select e.name, e.sex, e.age, d.name 部门名称 from emp_new as e left join dep d on e.dep_id = id.id 以 left join左边的员工表emp_new为准,去匹配右边的部门表dep,匹配不上,就为空, 所以 员工表 emp_new shengteng 查出来了, dep_id匹配不上,所以部门名称为Null 比right join更常用
右连接 right join select e.name, e.sex, e.age, d.name 部门名称 from emp_new as e right join dep d on e.dep_id = id.id 以 right join右边的表为准,去匹配左边的表,匹配不上,就为空 部门表 运营部门 id 203,在左边的表里没匹配上,所以出现 Null ......运营
全外连接 union/union all
union all
2个表共有数据重复了一份,独有数据只有1份,不重复
union
左连接SQL语句 union 右连接SQL语句, 注意左、右连接SQL语句中的 select fields 字段要一 一对应,个数也一致,左SQL name 对应 右SQL name 查询结果:1处是左表独有的,2处是右表独有的,其他是2个表共有数据,只有1份; 相比 union all,union把 2个表共有数据 去重了
子查询
1.子查询是将一个查询语句嵌套在另一个查询语句中 2.内层查询语句的查询结果,可以为外层查询语句提供查询条件 3.子查询中可以包含:in not in exists not exists 等关键字 4.还可以包含比较运算符 = != > < 等 因为要读取2次数据,查询效率要比联表查询略低一点 子查询,查询满足条件的部门id
子查询
或用联表查询
反向子查询:
子查询,没有210这个部门,查询结果为空 如果子查询查到结果,整体才查结果;如果子查询查到空;整体查到空