1. 程式人生 > >mysql基礎---基礎最全面鞏固練習(六)

mysql基礎---基礎最全面鞏固練習(六)

--- 練習 --
CREATE TABLE student2(
id INT,
NAME VARCHAR(20),
chinese FLOAT,
english FLOAT,
math FLOAT
);


INSERT INTO student2(id,NAME,chinese,english,math) VALUES(1,'張小明',89,78,90);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(2,'李進',67,53,95);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(3,'王五',87,78,77);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(4,'李一',88,98,92);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(5,'李來財',82,84,67);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(6,'張進寶',55,85,45);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(7,'黃蓉',75,65,30);



-- 查詢表中所有學生的資訊。
SELECT * FROM student2;


-- 查詢表中所有學生的姓名和對應的英語成績。
SELECT NAME,english FROM student2;


-- 過濾表中英語成績的重複資料
SELECT DISTINCT(english) FROM student2;


-- 使用別名表示學生分數。
SELECT NAME AS '姓名',chinese AS '語文',english AS '英語',math AS '數學' FROM student2; 


-- 查詢姓名為李一的學生成績
SELECT * FROM student2 WHERE NAME='李一';


-- 查詢英語成績大於等於90分的同學
SELECT * FROM student2 WHERE english>=90;

-- 查詢總分大於200分的所有同學
SELECT * FROM student2 WHERE (chinese+english+math)>200;

-- 查詢所有姓李的學生英語成績。
SELECT NAME,english FROM student2 WHERE NAME LIKE '李%';

-- 查詢英語>80或者總分>200的同學
SELECT * FROM student2 WHERE english>80 OR (chinese+english+math)>200

-- 統計每個學生的總分。
SELECT id,NAME,(chinese+english+math) AS '總成績' FROM student2;

-- 在所有學生總分數上加10分特長分。
SELECT id,NAME,(chinese+english+math+10) AS '總成績' FROM student2;

SELECT * FROM student;

-- 2.8 聚合查詢(使用聚合函式的查詢)
 -- 常用的聚合函式: sum()  avg()  max()  min()  count()
-- 需求:查詢學生的servlet的總成績 (sum() :求和函式)
SELECT SUM(servlet) AS 'servlet的總成績' FROM student;

-- 需求: 查詢學生的servlet的平均分
SELECT AVG(servlet) AS 'servlet的平均分' FROM student;

-- 需求: 查詢當前servlet最高分
SELECT MAX(servlet) AS '最高分' FROM student;

-- 需求: 查詢最低分
SELECT MIN(servlet) AS '最低分' FROM student;

-- 需求: 統計當前有多少學生(count(欄位))
SELECT COUNT(*) FROM student;

SELECT COUNT(id) FROM student;

-- 注意:count()函式統計的數量不包含null的資料
-- 使用count統計表的記錄數,要使用不包含null值的欄位
SELECT COUNT(age) FROM student;

SELECT * FROM student;
-- 2.9 分頁查詢(limit 起始行,查詢幾行)
-- 起始行從0開始
-- 分頁:當前頁  每頁顯示多少條
-- 分頁查詢當前頁的資料的sql: SELECT * FROM student LIMIT (當前頁-1)*每頁顯示多少條,每頁顯示多少條;

-- 需求: 查詢第1,2條記錄(第1頁的資料)
SELECT * FROM student LIMIT 0,2;
-- 查詢第3,4條記錄(第2頁的資料)
SELECT * FROM student LIMIT 2,2;
-- 查詢第5,6條記錄(第3頁的資料)
SELECT * FROM student LIMIT 4,2;
-- 查詢第7,8條記錄 (沒有記錄不顯示)
SELECT * FROM student LIMIT 6,2;


-- 2.10 查詢排序(order by )
-- 語法 :order by 欄位 asc/desc
-- asc: 順序,正序。數值:遞增,字母:自然順序(a-z)
-- desc: 倒序,反序。數值:遞減,字母:自然反序(z-a)


-- 預設情況下,按照插入記錄順序排序
SELECT * FROM student;

-- 需求: 按照id順序排序
SELECT * FROM student ORDER BY id ASC;
SELECT * FROM student ORDER BY id; -- 預設正序

SELECT * FROM student ORDER BY id DESC;-- 反序

-- 注意:多個排序條件
-- 需求: 按照servlet正序,按照jsp的倒序
SELECT * FROM student ORDER BY servlet ASC,jsp DESC;

-- 2.11 分組查詢(group by)
-- 需求: 查詢男女的人數
-- 預期結果:
  --  男   3
  --- 女   2
  -- 1) 把學生按照性別分組(GROUP BY gender)
  -- 2) 統計每組的人數(COUNT(*))
SELECT gender,COUNT(*) FROM student GROUP BY gender;


-- 2.12 分組查詢後篩選
-- 需求: 查詢總人數大於2的性別
-- 1) 查詢男女的人數
-- 2)篩選出人數大於2的記錄(having)
--- 注意: 分組之前條件使用where關鍵字,分組之前條件使用having關鍵字
SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;