如何高效管理MySQL數(shù)據(jù)庫試題??
MySQL數(shù)據(jù)庫試題管理
創(chuàng)建數(shù)據(jù)庫和表結(jié)構(gòu)
1. 學(xué)生表(student
)
s_id
VARCHAR(20) 學(xué)生編號(hào)(主鍵)s_name
VARCHAR(20) 學(xué)生姓名s_birth
VARCHAR(20) 出生日期s_sex
VARCHAR(10) 性別2. 課程表(course
)
c_id
VARCHAR(20) 課程編號(hào)(主鍵)t_name
VARCHAR(20) 授課教師3. 教師表(teacher
)
t_name
VARCHAR(20) 教師姓名(主鍵)t_title
VARCHAR(20) 職稱4. 成績表(score
)
s_id
VARCHAR(20) 學(xué)生編號(hào)(外鍵)c_id
VARCHAR(20) 課程編號(hào)(外鍵)score
INT 成績經(jīng)典練習(xí)題目解析
1. 查詢"01"課程比"02"課程成績高的學(xué)生信息及課程分?jǐn)?shù)
SELECT s.s_name, sc1.score AS 'Score for Course 01', sc2.score AS 'Score for Course 02'FROM student sJOIN score sc1 ON s.s_id = sc1.s_id AND sc1.c_id = '01'JOIN score sc2 ON s.s_id = sc2.s_id AND sc2.c_id = '02'WHERE sc1.score > sc2.score;
2. 查詢"01"課程比"02"課程成績低的學(xué)生信息及課程分?jǐn)?shù)
SELECT s.s_name, sc1.score A(本文來源:WWW.KENgnIAO.cOM)S 'Score for Course 01', sc2.score AS 'Score for Course 02'FROM student sJOIN score sc1 ON s.s_id = sc1.s_id AND sc1.c_id = '01'JOIN score sc2 ON s.s_id = sc2.s_id AND sc2.c_id = '02'WHERE sc1.score < sc2.score;
3. 查詢平均成績大于等于60分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績
SELECT s.s_id, s.s_name, AVG(sc.score) AS 'Average Score'FROM student sJOIN score sc ON s.s_id = sc.s_idGROUP BY s.s_id, s.s_nameHAVING AVG(sc.score) >= 60;
4. 查詢平均成績小于60分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績(包括有成績的和無成績的)
SELECT s.s_id, s.s_name, IFNULL(AVG(sc.score), 'No Score') AS 'Average Score'FROM student sLEFT JOIN score sc ON s.s_id = sc.s_idGROUP BY s.s_id, s.s_nameHAVING AVG(sc.score) < 60 OR AVG(sc.score) IS NULL;
5. 查詢所有同學(xué)的學(xué)生編號(hào)、學(xué)生姓名、選課總數(shù)、所有課程的總成績
SELECT s.s_id, s.s_name, COUNT(sc.c_id) AS 'Course Count', SUM(sc.score) AS 'Total Score'FROM student sLEFT JOIN score sc ON s.s_id = sc.s_idGROUP BY s.s_id, s.s_name;
6. 查詢"李"姓老師的數(shù)量
SELECT COUNT(*) AS 'Number of Li Teachers'FROM teacher tWHERE t.t_name LIKE '李%';
7. 詢學(xué)過"張三"老師授課的同學(xué)的信息
SELECT DISTINCT s.s_id, s.s_nameFROM student sJOIN score sc ON s.s_id = sc.s_idJOIN course c ON sc.c_id = c.c_idWHERE c.t_name = '張三';
8. 查詢沒學(xué)過"張三"老師授課的同學(xué)的信息
SELECT s.s_id, s.s_nameFROM student sLEFT JOIN score sc ON s.s_id = sc.s_idLEFT JOIN course c ON sc.c_id = c.c_id AND c.t_name = '張三'WHERE c.t_name IS NULL;
相關(guān)問題與解答
問題1: 如何確保事務(wù)的一致性和隔離性?
解答: 確保事務(wù)的一致性和隔離性,需要使用數(shù)據(jù)庫提供的事務(wù)管理機(jī)制,在MySQL中,可以使用START TRANSACTION
命令來開始一個(gè)事務(wù),然后執(zhí)行一系列的操作,最后使用COMMIT
命令提交事務(wù),這樣可以保證事務(wù)內(nèi)的所有操作要么全部成功,要么全部不執(zhí)行,從而維護(hù)數(shù)據(jù)的一致性,通過設(shè)置不同的隔離級(jí)別(如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE),可以控制事務(wù)之間的隔離性,防止臟讀、不可重復(fù)讀和幻讀等問題。
問題2: 在設(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu)時(shí),如何保證數(shù)據(jù)的完整性?
解答: 保證數(shù)據(jù)的完整性主要通過數(shù)據(jù)庫的約束來實(shí)現(xiàn)。
主鍵約束(PRIMARY KEY):確保表中的記錄具有唯一標(biāo)識(shí)。
外鍵約束(FOREIGN KEY):用于維護(hù)不同表之間的數(shù)據(jù)一致性,確保外鍵指向有效的記錄或支持級(jí)聯(lián)操作。
非空約束(NOT NULL):確保字段必須存儲(chǔ)有效值,不允許NULL值。
唯一約束(UNIQUE):確保某列的數(shù)據(jù)是唯一的,不允許重復(fù)值。
檢查約束(CHECK):對(duì)輸入到列中的值設(shè)置條件,確保數(shù)據(jù)的有效性。