4.6 排序 order by
SELECT `SubjectNo`,`ClassHour` FROM `subject` -- 從subject表中選擇哪些字段進行顯示
-- 排序:ORDER BY,其中,ASC表示升序,DESC表示降序
ORDER BY `ClassHour` ASC -- 根據ClassHour進行升序顯示
-- ORDER BY `ClassHour` DESC -- 根據ClassHour進行降序顯示
輸出結果:
(1)升序結果
(2)降序結果
4.7 分頁 limit
-- 為什么要分頁?緩解數據庫壓力,給人更好的體驗,瀑布流需要不斷加載
SELECT `SubjectNo`,`ClassHour` FROM `subject`
ORDER BY `ClassHour` ASC
-- 語法:limit 起始值 頁面的大小
-- 每頁只顯示5條數據
limit 0,5 -- 1-5條數據,下標從零開始,表示第1條數據 表示第1頁
-- limit 1,5 -- 2-6條數據
-- limit 5,5 -- 6-10條數據 表示第2頁
-- limit 10,5 -- 11-15條數據 表示第3頁
-- LIMIT (n-1)*5,5 -- (n-1)*5+1-(n-1)*5+5條數據 表示第n頁
-- 詳細語法:LIMIT (n-1)*pageSize,pageSize,其中,pageSize表示頁面大小,(n-1)*pageSize表示起始值,n表示當前頁,總頁數=數據總數/頁面大小
語法:
LIMIT (n-1)×pageSize,pageSize,pageSize表示頁面大小,其中,(n-1)*pageSize表示起始值,n表示當前頁,總頁數=數據總數/頁面大小
輸出結果:
(1)第1頁
(2)第2頁
練習題:
查詢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`= 'JAVA第一學年' AND `StudentResult`>=80
ORDER BY `StudentResult` DESC
LIMIT 0,10
4.8 子查詢與嵌套查詢
之前我們在寫sql,查詢條件中的值都是固定的,如果將條件中的值換成計算出來的話,就是子查詢了。
本質:在where條件下嵌套一個查詢語句
-- 1.查詢“數據庫結構-1”的所有考試結果,輸出:學號、科目編號、成績,降序排列
-- 方式1:使用連接查詢
SELECT `StudentNo`,r.`SubjectNo`,`StudentResult`
FROM `result` r
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectName`
WHERE `SubjectName`='數據庫結構-1'
ORDER BY `StudentResult` DESC
-- 方式2:使用子查詢(由里及外)
-- 查詢所有“數據庫結構-1”的學生學號
SELECT `StudentNo`,`SubjectNo`,`StudentResult`
FROM `result`
WHERE `SubjectNo`= ANY(
SELECT `SubjectNo` FROM `subject`
WHERE `SubjectName` = '數據庫結構-1'
)
ORDER BY `StudentResult` DESC
-- Subquery returns more than 1 row:表示子查詢返回了多行數據
-- 解決方法:在()前加ANY
-- 2.查詢不小於80分的學生的學號和姓名
SELECT DISTINCT s.`StudentNo`,`StudentName`
FROM `student` s
INNER JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`
WHERE `StudentResult`>80
-- 3.在2的基礎上,增加一個科目:高等數學-2
-- 查詢“高等數學-2”的編號
SELECT DISTINCT s.`StudentNo`,`StudentName`
FROM `student` s
INNER JOIN `result` r
ON s.`StudentNo`=s.`StudentNo`
WHERE `StudentResult`>80 AND `SubjectNo`=(
SELECT `SubjectNo` FROM `subject`
WHERE `StudentName`='高等數學-2'
)
-- 改造(由里及外)
SELECT `StudentNo`,`StudentName` FROM `student` WHERE `StudentNo` IN (
SELECT `StudentNo` FROM `result` WHERE `StudentResult`>80 AND `SubjectNo`= (
SELECT `SubjectNo` FROM `subject` WHERE `SubjectName` = '高等數學-2'
)
)
-- 用連接查詢實現
SELECT s.`StudentNo`,`StudentName`
FROM `student` s
INNER JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
WHERE `SubjectName`='高等數學-2' AND `StudentResult`>=80
-- 練習:使用子查詢查詢“C語言-1”前5名同學的成績信息:學號、姓名、分數
SELECT DISTINCT s.`StudentNo`,`StudentName`,`StudentResult`
FROM `student` s
INNER JOIN `result` r
ON s.