SQL第二篇_MYSQL

发布于:2022-10-19 ⋅ 阅读:(466) ⋅ 点赞:(0)

一·查询结果限制返回行数(limit)

1/使用LIMIT限制结果集

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果只给定一个参数,它表示返回最大的记录行数目。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。
初始记录行的偏移量是 0(而不是 1)。

例5.检索记录行 6-10

1

SELECT FROM table LIMIT 5,5

例6.检索记录行 11-last

1

SELECT FROM table LIMIT 10,-1

例7.检索前 5 个记录行

1

SELECT FROM table LIMIT 5

二/确定范围(between and)

用BETWEEN…AND和NOT BETWEEN…AND是逻辑运算符,可以用来查找属性值在或不在指定范围内的元组,其中BETWEEN后边指定范围的下限AND后边指定范围的上限。 BETWEEN…AND…的格式为: 列名 | 表达式 [ NOT ] BETWEEN 下限值 AND 上限值 如果列或表达式的值在(或不在)下限值和上限值范围内,则结果为True,表明此记录符合查询条件。 BETWEEN…AND…包括边界值

对于日期类型的数据也可以使用基于范围的查找。

例14.查询所有系号在2和3之间的班号和班名。

1

SELECT 班号,班名 FROM 班级表 WHERE 系号 BETWEEN 2 AND 3

等价于:

1

SELECT 班号,班名 FROM 班级表 WHERE 系号 >=2 AND 系号<=3

例15.查询所有系号不在2和3之间的班号和班名。

1

SELECT 班号,班名 FROM 班级表 WHERE 系号 NOT BETWEEN 2 AND 3

等价于:

1

SELECT 班号,班名 FROM 班级表 WHERE 系号 <2 AND 系号 >3

例16.查询1995年3月出生的学生信息:

1

2

SELECT 学号, 姓名, 性别, 出生日期 FROM 学生表

WHERE 出生日期 BETWEEN '1995/3/1' AND '1995/3/31

三/极值问题

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

MySQL 间隔值 | 新手教程 (begtut.com)

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    ‘’)

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到