原創:轉載需註明原創地址 https://www.cnblogs.com/fanerwei222/p/11782549.html
MySQL--數據表操做:html
會用到的查詢操做.spa
1. Limit的用法:設計
查詢從下標5開始日後的10條數據(下標默認爲0開始) SELECT * FROM stu_user LIMIT 5, 10; 查詢從下標5開始日後的全部數據(下標默認爲0開始) SELECT * FROM stu_user LIMIT 5,- 1; 查詢前5條數據 SELECT * FROM stu_user LIMIT 5;
2. 行轉列和列轉行code
a) 列轉行htm
建立-->學生-科目分數表 (這種建表方式須要提早把全部的科目列都設計好,若是日後須要添加科目的話須要改動表結構) CREATE TABLE stu_score ( stu_id INT NOT NULL, sname VARCHAR ( 20 ) NOT NULL, chscore CHAR ( 3 ) DEFAULT '0', mathscore CHAR ( 3 ) DEFAULT '0', enscore CHAR ( 3 ) DEFAULT '0' ); 表結構 +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | stu_id | int(11) | NO | | NULL | | | sname | varchar(20) | NO | | NULL | | | chscore | char(3) | YES | | 0 | | | mathscore | char(3) | YES | | 0 | | | enscore | char(3) | YES | | 0 | | +-----------+-------------+------+-----+---------+-------+ 插入數據 INSERT INTO stu_score VALUES ( 1, '張三', '77', '88', '66' ); INSERT INTO stu_score VALUES ( 2, '李四', '23', '45', '13' ); INSERT INTO stu_score VALUES ( 3, '王五', '94', '63', '45' ); 數據列表 +----+--------+---------+-----------+---------+ | id | sname | chscore | mathscore | enscore | +----+--------+---------+-----------+---------+ | 1 | 張三 | 77 | 88 | 66 | | 2 | 李四 | 23 | 45 | 13 | | 3 | 王五 | 94 | 63 | 45 | +----+--------+---------+-----------+---------+ 列轉行(科目分數列轉換爲固定的科目值行數據和分數彙總列) 本質就是用UNION合併分批查詢的數據, 有多少科目列須要轉則分批多少次查詢 SELECT stu_id, sname, '語文' AS course, chscore AS score FROM stu_score UNION SELECT stu_id, sname, '數學' AS course, mathscore AS score FROM stu_score UNION SELECT stu_id, sname, '英語' AS course, enscore AS score FROM stu_score ORDER BY stu_id; 列轉行後的數據 +--------+--------+--------+-------+ | stu_id | sname | course | score | +--------+--------+--------+-------+ | 1 | 張三 | 語文 | 77 | | 1 | 張三 | 數學 | 88 | | 1 | 張三 | 英語 | 66 | | 2 | 李四 | 語文 | 23 | | 2 | 李四 | 數學 | 45 | | 2 | 李四 | 英語 | 13 | | 3 | 王五 | 英語 | 45 | | 3 | 王五 | 語文 | 94 | | 3 | 王五 | 數學 | 63 | +--------+--------+--------+-------+
b) 行轉列blog
建立一個--學生分數科目表 CREATE TABLE stu_score_pro ( stu_id INT NOT NULL, sname VARCHAR ( 20 ) NOT NULL, course VARCHAR ( 20 ) NOT NULL, score CHAR ( 3 ) NOT NULL ); 表結構 +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | stu_id | int(11) | YES | | NULL | | | sname | varchar(20) | NO | | NULL | | | course | varchar(20) | NO | | NULL | | | score | char(3) | NO | | NULL | | +--------+-------------+------+-----+---------+-------+ 插入數據 INSERT INTO stu_score_pro VALUES ( 1, '張三', '語文', '77' ); INSERT INTO stu_score_pro VALUES ( 1, '張三', '數學', '88' ); INSERT INTO stu_score_pro VALUES ( 1, '張三', '英語', '66' ); INSERT INTO stu_score_pro VALUES ( 2, '李四', '語文', '23' ); INSERT INTO stu_score_pro VALUES ( 2, '李四', '數學', '45' ); INSERT INTO stu_score_pro VALUES ( 2, '李四', '英語', '13' ); INSERT INTO stu_score_pro VALUES ( 3, '王五', '語文', '94' ); INSERT INTO stu_score_pro VALUES ( 3, '王五', '數學', '63' ); INSERT INTO stu_score_pro VALUES ( 3, '王五', '英語', '45' ); 數據列表 +--------+--------+--------+-------+ | stu_id | sname | course | score | +--------+--------+--------+-------+ | 1 | 張三 | 語文 | 77 | | 1 | 張三 | 數學 | 88 | | 1 | 張三 | 英語 | 66 | | 2 | 李四 | 語文 | 23 | | 2 | 李四 | 數學 | 45 | | 2 | 李四 | 英語 | 13 | | 3 | 王五 | 語文 | 94 | | 3 | 王五 | 數學 | 63 | | 3 | 王五 | 英語 | 45 | +--------+--------+--------+-------+ 行轉列(正常的行數據根據列中有相同的值轉成對應的列) SELECT stu_id, sname, max( CASE WHEN course = '語文' THEN score END ) AS 語文, max( CASE WHEN course = '數學' THEN score END ) AS 數學, max( CASE WHEN course = '英語' THEN score END ) AS 英語 FROM stu_score_pro GROUP BY stu_id, sname; 行轉列後的數據 +--------+--------+--------+--------+--------+ | stu_id | sname | 語文 | 數學 | 英語 | +--------+--------+--------+--------+--------+ | 1 | 張三 | 77 | 88 | 66 | | 2 | 李四 | 23 | 45 | 13 | | 3 | 王五 | 94 | 63 | 45 | +--------+--------+--------+--------+--------+