Day13 Mysql基础06
4.5分页和排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRBsfrxo-1633284015013)(C:\Users\50092\Desktop\JAVA\截图\000000001.jpeg)]
排序
-- 分页 limit
-- 排序 order by 通过哪个字段排序、怎么排
-- 排序:升序 ASC、降序 DESC
-- 查询的结果根据成绩降序排序
SELECT s.studentno,studentname,subjectname,studentresult
FROM result r
RIGHT JOIN student s
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` sub
ON sub.`subjectno`=r.`subjectno`
WHERE subjectname = '高等数学-1'
ORDER BY studentresult DESC
分页
-- 分页 每页只显示5条数据
-- 语法:limit 当前页(起始值),页面的大小
-- 网页应用: 当前页,总的页数,页面的大小
-- LIMIT 0,5 1~5
-- LIMIT 1,5 2~6
-- LIMIT 6,5 1~5
SELECT s.studentno,studentname,subjectname,studentresult
FROM result r
RIGHT JOIN student s
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` sub
ON sub.`subjectno`=r.`subjectno`
WHERE subjectname = '高等数学-1'
ORDER BY studentresult DESC
LIMIT 0,5
-- 第一页0,5
-- 第二页5,5
-- 第三页10,5
-- 第N页PAGESIZEE*(N-1),PAGESIZE
-- 【pagesize:页面大小】
-- 【(n-1)*pagesize起始值】
-- 【n:当前页】
-- 【数据总数/页面大小=总页数】
-- 查询 JAVA第一学年 课程成绩排名前十的学生,并且分数要大于80的学生信息(学号,姓名,课程名称,分数)
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM `student` s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`
WHERE `subjectname`='高等数学-1' AND `studentresult`>=80
ORDER BY `studentresult` DESC
LIMIT 0,10
4.6子查询
where(这个值是计算出来的)
相当于在where里面再嵌套一个子查询语句
where(select * from)
-- where
-- 方式1:使用连接查询
SELECT `studentno`,r.`subjectno`,`studentresult`
FROM `result` r
INNER JOIN`subject` sub
ON r.`subjectno`=sub.`subjectno`
WHERE `subjectname`='高等数学-1'
ORDER BY studentresult DESC
-- 方式2:使用子查询
SELECT `studentno`,`subjectno`,`studentresult`
FROM `result`
WHERE subjectno=(
SELECT `subjectno`FROM `subject`
WHERE `subjectname`='高等数学-1'
)
ORDER BY studentresult DESC
-- 查询所有高等数学-1的学生学号
SELECT `subjectno`FROM `subject`WHERE `subjectname`='高等数学-1'
-- 分数不小于80分的学号和姓名
SELECT DISTINCT s.`studentno`,`studentname`
FROM `student` s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
WHERE studentresult>=80
-- 分数不小于80分的学号和姓名
-- 在以上基础上再增加一个科目,
SELECT DISTINCT s.`studentno`,`studentname`
FROM `student` s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
WHERE studentresult>=80 AND (SELECT `subjectno` FROM `subject` WHERE `subjectname`='高等数学-1')
-- 换种方法
SELECT DISTINCT s.`studentno`,`studentname`,`subjectname`
FROM `student` s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` sub
ON r.`subjectno`= sub.`subjectno`
WHERE `subjectname`='高等数学-1'AND r.studentresult>=80
-- where不能同时出现两次?
-- 查询课程为 高等数学-1 且分数不小于 80 的同学的学号和姓名
SELECT `subjectname`,s.`studentno`,`studentname`
FROM student s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
INNER JOIN`subject` sub
ON sub.`subjectno`=r.`subjectno`
WHERE `subjectname`='高等数学-1' AND `studentresult`>=80
-- 其他写法(又内而外。最大的开始写到最小的结束)(高等数学-1 到 查询分数的最小值 到 学生学号)
SELECT `studentno`,`studentname`FROM `student` WHERE `studentno` IN(
SELECT `studentno` FROM `result`WHERE `studentresult`>=80 AND `subjectno` =(
SELECT `subjectno` FROM `subject` WHERE `subjectname`='高等数学-1')
)
-- 查询 C语言-1 前5名同学成绩的信息(学号,姓名,分数) in 范围
SELECT s.`studentno`,`studentname`,`studentresult`
FROM `student` s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` sub
ON sub.`subjectno`=r.`subjectno`
WHERE `subjectname`='C语言-1'
ORDER BY `studentresult` DESC
LIMIT 0,5
-- 嵌套的怎么写?(不嵌套的会了)
5.MySQL函数
官网自己查询学习
5.1常用函数(并不常用)
-- 数学运算
SELECT ABS(-98)-- 绝对值
SELECT CEILING(8.8)-- 向上取整
SELECT FLOOR(8.8)-- 向下取整
SELECT RAND()-- 返回一个0-1之间的随机数
SELECT SIGN(999)-- 判断一个数的符号 负数-1 正数1
-- 字符串函数
SELECT CHAR_LENGTH('我c你m')-- 字符串长度
SELECT CONCAT('你马','个比的')-- 拼接字符串
SELECT INSERT('你好戈比的',1,2,'我艹你嘛')-- 查询,从某个位置开始替换某个长度
SELECT LOWER('DASDSDS')-- 小写
SELECT UPPER('dsdfdx') -- 大写
....
NGTH(‘我c你m’)-- 字符串长度
SELECT CONCAT(‘你马’,‘个比的’)-- 拼接字符串
SELECT INSERT(‘你好戈比的’,1,2,‘我艹你嘛’)-- 查询,从某个位置开始替换某个长度
SELECT LOWER(‘DASDSDS’)-- 小写
SELECT UPPER(‘dsdfdx’) – 大写
…