- Day13 Mysql基础06
- 4.5分页和排序
- 4.6子查询
- 5.MySQL函数
- 5.1常用函数(并不常用)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRBsfrxo-1633284015013)(C:Users50092DesktopJAVA截图 00000001.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’) – 大写
…



