一·查询结果限制返回行数(limit)
1/使用LIMIT限制结果集
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果只给定一个参数,它表示返回最大的记录行数目。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。
初始记录行的偏移量是 0(而不是 1)。
例5.检索记录行 6-10
1 |
|
例6.检索记录行 11-last
1 |
|
例7.检索前 5 个记录行
1 |
|
二/确定范围(between and)
用BETWEEN…AND和NOT BETWEEN…AND是逻辑运算符,可以用来查找属性值在或不在指定范围内的元组,其中BETWEEN后边指定范围的下限,AND后边指定范围的上限。 BETWEEN…AND…的格式为: 列名 | 表达式 [ NOT ] BETWEEN 下限值 AND 上限值 如果列或表达式的值在(或不在)下限值和上限值范围内,则结果为True,表明此记录符合查询条件。 BETWEEN…AND…包括边界值。
对于日期类型的数据也可以使用基于范围的查找。
例14.查询所有系号在2和3之间的班号和班名。
1 |
|
等价于:
1 |
|
例15.查询所有系号不在2和3之间的班号和班名。
1 |
|
等价于:
1 |
|
例16.查询1995年3月出生的学生信息:
1 2 |
|
三/极值问题
1,min() max()函数使用
select uid,
'activity1' as activity
from exam_record
where year(submit_time) = 2021
group by uid
having min(score) >= 85
union all
select distinct uid,
'activity2' as activity
from exam_record e_r join examination_info e_i
on e_r.exam_id = e_i.exam_id
where year(e_r.submit_time) = 2021
and e_i.difficulty = 'hard'
and e_r.score > 80
and timestampdiff(minute, e_r.start_time, e_r.submit_time) * 2 < e_i.duration
order by uid
四,四舍五入
五,时间
1,时间分解
5,1,1时间格式化
2,查找下一个出现的日期
lead()函数;
lead(date1,1) over(partition by user_id oeder by date1) as next_date
MySQL LEAD 函数 | 新手教程 (begtut.com)
3,时间间隔intervel
4,时间计算
select uid,
'activity1' as activity
from exam_record
where year(submit_time) = 2021
group by uid
having min(score) >= 85
union all
select distinct uid,
'activity2' as activity
from exam_record e_r join examination_info e_i
on e_r.exam_id = e_i.exam_id
where year(e_r.submit_time) = 2021
and e_i.difficulty = 'hard'
and e_r.score > 80
and timestampdiff(minute, e_r.start_time, e_r.submit_time) * 2 < e_i.duration
order by uid
六,字符串截取
1,substring_index(str,delim,count)
2,字符串截取+拼接+大小写
七,行转列
去重后group_concat(distinct SEPARATOR ‘’)