Mysql常用

一、創建四張表

Student表結構

CREATE TABLE `student` (

  `S` varchar(10) NOT NULL,

  `Sname` varchar(10) DEFAULT NULL,

  `Sage` varchar(10) DEFAULT NULL,

  `Ssex` varchar(10) DEFAULT NULL,

  PRIMARY KEY (`S`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

SC表結構

CREATE TABLE `sc` (

  `S` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,

  `C` varchar(10) DEFAULT NULL,

  `score` int(3) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

teacher表結構

CREATE TABLE `teacher` (

  `T` varchar(10) NOT NULL,

  `Tname` varchar(10) DEFAULT NULL,

  PRIMARY KEY (`T`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

course表結構

CREATE TABLE `course` (

  `C` varchar(10) NOT NULL,

  `Cname` varchar(10) DEFAULT NULL,

  `T` varchar(10) DEFAULT NULL,

  PRIMARY KEY (`C`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

 

二、基本sql語句,涵蓋常用

1.查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績

SELECT sc.s, AVG(sc.score) avg_score from sc group by s; #第一步:操作sc成績表,sc成績表按照s去重後,求平均值賦給字段avg_score,產生出一個新表

SELECT *from (select sc.s, AVG(sc.score) avg_score from sc group by s) A LEFT JOIN student B on A.s = B.s WHERE A.avg_score>=60; #第二步:將sc去重後的新表A和student表B做左連接,產生出一個總表

SELECT A.s, A.avg_score,B.Sname from (select sc.s, AVG(sc.score) avg_score from sc group by s) A LEFT JOIN student B on A.s = B.s WHERE A.avg_score>=60; #第三步:左連接後產生的總表,取出所需字段

 

2.查詢1990年出生的學生數量

SELECT COUNT(student.S) FROM student WHERE student.Sage LIKE '%1990%';

 

3.查詢"01"課程比"02"課程成績低的學生的信息及課程分數

SELECT *FROM sc WHERE sc.c='01';  #第一步:從sc表查詢01課程的所有信息

SELECT *FROM sc WHERE sc.c='02';  #第二步:從sc表查詢02課程的所有信息

SELECT a.s,a.score,b.score FROM (SELECT *FROM sc WHERE sc.c='01') a LEFT JOIN (SELECT *FROM sc WHERE sc.c='02') b on a.s=b.s WHERE a.score<b.score; #第三步:將上述兩張表連接起來,做判斷取字段

 

4.查詢sc表不存在成績的學生姓名

SELECT DISTINCT(sc.s) FROM sc;  #第一步:sc表按照s字段去重

SELECT student.Sname FROM student WHERE student.S NOT IN (SELECT DISTINCT(sc.s) FROM sc);  #第二步:查詢student表中s字段不存在第一步中的

 

5.查詢學過"張三"老師授課的學生姓名

 SELECT teacher.T FROM teacher WHERE teacher.Tname='張三' #第一步:從teacher表中查找張三對應的課程編號

SELECT sc.S FROM sc WHERE sc.C = (SELECT teacher.T FROM teacher WHERE teacher.Tname='張三'); #第二步:從sc表中查有這個課程編號的學生編號

SELECT student.Sname FROM student WHERE student.S IN (SELECT sc.S FROM sc WHERE sc.C = (SELECT teacher.T FROM teacher WHERE teacher.Tname='張三')); #第三步:從student表中查詢學生編號存在第二步中的學生名稱

 

6.查詢01課程分數大於60分的按分數降序排序,前3條(基本查詢)

SELECT *FROM sc WHERE sc.score>60 AND sc.C='01' ORDER BY sc.score DESC LIMIT 3;

 

7.查詢學過“張三”老師授課的最高成績學生姓名和分數

方法一:SELECT MAX(a.score) FROM (SELECT sc.S,sc.score FROM sc WHERE sc.C = (SELECT teacher.T FROM teacher WHERE teacher.Tname='張三')) a LEFT JOIN student b ON a.s=b.s;  #按照5進行分析,將5中第二步的表和student表連接,連接後直接查最大score

方法二:SELECT a.score,b.Sname,b.s FROM (SELECT sc.S,sc.score FROM sc WHERE sc.C = (SELECT teacher.T FROM teacher WHERE teacher.Tname='張三')) a LEFT JOIN student b ON a.s=b.s ORDER BY score DESC LIMIT 1;  #按照5進行分析,將5中第二步的表和student表連接,連接後按score的字段進行降序排序,取第一條

 

8.基礎insert,updata,delete

UPDATE sc SET score='90' WHERE sc.s='01' AND sc.c='01';

INSERT INTO teacher (T,Tname) VALUES ('04','鄭六');  #注意table名稱,key都不需要引號,不然會報錯

DELETE FROM teacher WHERE t='04'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章