文章目录
- 一、辅助查询
- 1.排序
- 2.分组查询
- 3.使用 LIMIT 限制查询结果的数量
- 二、连接查询
- 1.内连接查询
- 2.外连接查询
- 3.复合条件连接查询
一、辅助查询
1.排序
# 默认升序
select 字段名 from 表名 order by 字段1 [asc|desc], 字段2 [asc|desc];
# where写在order by前面
SELECT *
FROM tb_score
WHERE class_id = 1
ORDER BY score DESC;
2.分组查询
# 语法规则 查询的是每个分组中 首次出现的一条记录 一般情况下,GROUP BY都和聚合函数一起使用。
SELECT 字段名 FROM 表名 GROUP BY 字段名;
3.使用 LIMIT 限制查询结果的数量
# 用来限制查询结果的数量。
SELECT 字段名 FROM 表名 LIMIT [OFFSET,] 记录数;
第一个参数,OFFSET,可选参数,表示偏移量,如果不指定默认值为0,表示从查询结果的第一条记录开始,若偏移量为1,则从查询结果中的第二条记录开始,以此类推。
第二个参数,记录数,表示返回查询结果的条数。
SELECT *
FROM tb_score
ORDER BY score DESC
LIMIT 1,4;
二、连接查询
1.内连接查询
# 仅将两个表中满足连接条件的行组合起来作为结果集,称为内连接;
表1 [inner] join 表2 on 表1.字段=表2.字段
# 从表1中取出每一条记录,去表2中与所有的记录进行匹配,匹配必须是某个条件在表1中与表2中相同,最终才会保留结果,否则不保留。inner 关键字可省略不写;on 表示连接条件:条件字段就是代表相同的业务含义(如下面两张表中的 employee.dept_id 和 department.id),大多数情况下为两张表中的主外键关系。
# as可以分别为字段和表名起别名
SELECT s.name as studentName,c.name as className
FROM tb_student as s join tb_class as c
ON s.class_id = c.id
2.外连接查询
# 以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空(null),称为外连接。
# 外连接查询分为左外连接查询和右外连接查询;
表1 left/right [outer] join 表2 on 表1.字段=表2.字段
左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL;
右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写 NULL。
# 左外连接能做到的查询,右外连接也能做到,仅展现的效果有所不同。
左外连接和右外连接可以互转,只需将基准表换一下
3.复合条件连接查询
# 复合条件连接查询,就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确。
SELECT s.name as studentName,s.score,c.name as className
FROM tb_student as s join tb_class as c
ON s.class_id = c.id
where s.score > 90;