一周目 mysql 六日
单表查询补充以及多表查询
1 单表查询补充
1.1 group_contact() 分组后其他字段查询
用于获取分组以外的其他字段数据

可以获取多个数据,并对字段进行字符拼接。拼接在字段名之间添加分隔符号,分隔符号要用引号写成字符串形式

1.2 concat() 分组前单或多字段集中单列查询
获取分组前单个字段或多个字段拼接

1.3 concat_ws() 分组前多字段拼接使用统一字符
获取分组前多个字段拼接,使用统一字符并将其提前。

1.4 as 用于起别名,不作用与实际内容
1.4.1 给查询字段起别名 as符号可以省略,但是不推荐省略

1.4.2 给表起别名

2 多表查询
2.1 多表查询理论
单表的数据不能满足实际的要求,需要联合其他表格的信息。通过表格数据的组合,得出笛卡尔积,筛选出相应的数据
本质上就是sql语句查询的结果就是一张表
当涉及到多表可能会出现字段名冲突需要在字段名前面加上表名作限制
2.2 多表查询方法——联表
联表法基于多表查询的理论,通过表的拼接后,在大表内完成单表查询
联表关键词分别有 inner join left join right join union
select * from 表一 联表关键词 表二 on 联表要求
2.2.1 inner join 内连接 只展示表上符合联表要求的数据
select * from emp inner join dep on emp.dep_id=dep.id; 展示表上部门id相互对应的数据
2.2.2 left join 左链接 以左边表格数据为基准,一一去对应右边的表格数据,展示左边表格所有的数据,无对应的用null填充
select * from emp left join dep on emp.dep_id=dep.id; 展示所有员工对应的部门
2.2.3 right join 右链接 以右边表格数据为基准,一一去对应左边的表格数据,展示右边表格所有的数据,无对应的用null填充
select * from emp right join dep on emp.dep_id=dep.id; 展示所有部门对应的员工
2.2.4 union 全连接 展示所有数据的连接词
select * from emp left join dep on emp.dep_id=dep.id union select * from emp right join dep on emp.dep_id=dep.id; 展示所有员工和部门的数据
3 多表查询方法——子查询
将一张表的查询结果当做另一张表的sql语句条件,类似于日常中的分步操作 分步1在表二中得到需要的数据 分步2 拿着表二得出的数据去表一中查找需要的结果
如查找部门是技术或者人力资源的员工信息
1.先查询技术和人力资源id号
select id from dep where name in ('技术','人力资源');
2.再去员工表里面根据部门id号筛选出员工数据
select * from emp where dep_id in (select id from dep where name in ('技术','人力资源'));