MySQL 自連接、排序、分頁
1 自連接
1.1 測試用數據庫:
CREATE TABLE `school`.`category`(
`categoryid` INT(3) NOT NULL COMMENT 'id',
`pid` INT(3) NOT NULL COMMENT '父id 沒有父則爲1',
`categoryname` VARCHAR(10) NOT NULL COMMENT '種類名字',
PRIMARY KEY (`categoryid`)
) ENGINE=INNODB CHARSET=utf8;
INSERT INTO `school`.`category` (`categoryid`, `pid`, `categoryname`) VALUES ('2', '1', '信息技術'),
('3', '1', '軟件開發'),
('5', '1', '美術設計'),
('4', '3', '數據庫'),
('8', '2', '辦公信息'),
('6', '3', 'web開發'),
('7', '5', 'ps技術');
1.2 自連接的表格陳述
MySQL自連接的核心是:一張表拆成兩張一樣的表!
現對上表進行拆分:
(1)父類表:
categoryid | categoryname |
---|---|
2 | 信息技術 |
3 | 軟件開發 |
5 | 美術設計 |
(2)子類表:
pid | categoryid | categoryname |
---|---|---|
3 | 4 | 數據庫 |
2 | 8 | 辦公信息 |
3 | 6 | web開發 |
5 | 7 |
綜合以上兩表可以得到父類對應的子類關係:
父類 | 子類 |
---|---|
信息技術 | 辦公信息 |
軟件開發 | 數據庫 web開發 |
美術設計 | ps技術 |
1.3 自連接代碼測試
源碼:
-- 把一張表看作兩個一摸一樣的表
SELECT a.`categoryname` AS '父欄目',b.`categoryname` AS '子欄目'
FROM `category` AS a, `category` AS b
WHERE a.`categoryid` = b.`pid`
測試結果:
2 排序(ORDER BY)
測試用數據庫使用的是我另一片博客發表的數據庫,鏈接:https://blog.csdn.net/qq_44958172/article/details/105362696
排序: 升序ASC、 降序DESC
語法:ORDER BY 需要排序的字段 (ASC/DESC)
測試案例:
查詢參加了Customer Relations
考試的同學信息:學號、學生姓名、科目名、分數;並對結果按照分數降序排序
代碼:
-- 查詢結果根據成績降序排序
SELECT s.`studentno`, `name`, `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` = 'Customer Relations'
ORDER BY `studentresult` DESC
結果:
3 分頁(LIMIT)
分頁就是我們經常多見的每頁只顯示五條數據,共幾頁等等
爲什麼需要分頁?
- 緩解數據庫壓力,給人體驗更好
- 有時也不需要,例如圖片一般使用瀑布流
語法: limit 當前頁,頁面大小
-- 以每頁顯示5條數據來說明
第一頁 limit 0,5 --(1-1)\*5
第二頁 limit 5,5 --(2-1)\*5
第三頁 limit 10,5 --(3-1)\*5
...
第n頁 limit (n-1)\*5,5 --(n-1)\*pagesize, pagesize
測試案例:
查詢並輸出學生學號、姓名、年級名稱,且每頁輸出10條數據!
代碼:
SELECT `studentno`, `name`,`gradename`
FROM student s
INNER JOIN `grade` g
ON s.`gradeid` = g.`gradeid`
LIMIT 10,10 -- 此處展示第二頁
結果:
寫在最後
Do nothing out of selfish ambition or vain conceit. Rather, in humility value others above yourselves, not looking to your own interests but each of you to the interests of the others.
(Philippians 2: 3-4)
To Demut and Dottie!