??前言
這篇文章記錄一下幫助粉絲朋友一起學(xué)習(xí)解決的 MySQL
課后習(xí)題,內(nèi)容很基礎(chǔ),都是基礎(chǔ)的數(shù)據(jù)庫語句和操作,內(nèi)容是關(guān)于學(xué)生選課數(shù)據(jù)庫的一些操作。這里我用 MySQL
和 Navicat
完成這些題目。
??題目解析
題目如下:
現(xiàn)有學(xué)生選課數(shù)據(jù)庫:Student(Sno,Sname,Sage,Ssex,Sdept)、 Course(Cno,Cname, Teacher)、SC(Sno,Cno,Grade),試用SQL完成下列操作。
(1)創(chuàng)建 SC 表,注明主碼和外碼。
(2)檢索劉軍老師所授課程的課程號(hào)和課程名。
(3)檢素年齡大于 23 的男學(xué)生的學(xué)號(hào)和姓名。
(4)檢索學(xué)號(hào)為 95001 學(xué)生所學(xué)課程的課程名與任課教師名。
(5)檢索課程平均成績 90 分(含 90 分)以上的學(xué)生姓名和學(xué)號(hào)。
(6)刪除學(xué)號(hào)為 95002 學(xué)生的選課記錄。
(7)將學(xué)號(hào)為 95003 學(xué)生的年齡修改為 19 歲
(8)插入一條學(xué)生記錄(95004,李玉荷,18,計(jì)算機(jī)系,女)。
(9)將 SC 表查詢的權(quán)限授權(quán)給所有用戶。
(10)創(chuàng)建數(shù)學(xué)系的學(xué)生視圖。
因?yàn)槭墙滩牡恼n后習(xí)題,所以我們沒有開箱即用的數(shù)據(jù)庫和表,因此我們要先創(chuàng)建數(shù)據(jù)庫,并且建相對(duì)應(yīng)的三個(gè)表,分別是Student(Sno,Sname,Sage,Ssex,Sdept)、 Course(Cno,Cname, Teacher)、SC(Sno,Cno,Grade)。
1??創(chuàng)建數(shù)據(jù)庫
首先創(chuàng)建數(shù)據(jù)庫 course_select ,可以通過 SQL
語句創(chuàng)建,也可以通過 Navicat
的可視化操作創(chuàng)建 (右鍵連接 => 新建數(shù)據(jù)庫 =>輸入數(shù)據(jù)庫名、字符集、排序規(guī)則 => 確定即可)。
CREATE DATABASE `course_select` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
2??創(chuàng)建表
創(chuàng)建好數(shù)據(jù)庫以后,我們根據(jù)題目的描述,創(chuàng)建對(duì)應(yīng)的表以及表所需要的字段。同時(shí)插入一些默認(rèn)數(shù)據(jù),以及題目中所需要的數(shù)據(jù),比如說年齡大于 23 、學(xué)號(hào)的命名規(guī)則(95001)、老師名字(如劉軍老師)。
然后是關(guān)于表的創(chuàng)建 ,可以通過 SQL
語句創(chuàng)建,也可以通過 Navicat
的可視化操作創(chuàng)建 (下圖是創(chuàng)建數(shù)據(jù)庫的方法,右擊表 => 新建表 =>在窗口輸入內(nèi)容,如字段名、類型、長度 => 保存 =>給表命名),但這里建議用 SQL
語句創(chuàng)建(鞏固基礎(chǔ))。
創(chuàng)建的表和字段名為 Student(Sno,Sname,Sage,Ssex,Sdept)、 Course(Cno,Cname, Teacher)、SC(Sno,Cno,Grade) 。參考的 SQL 語句和插入的默認(rèn)數(shù)據(jù)如下。
??Student 表
-- 創(chuàng)建 Student 表
CREATE TABLE Student (
Sno CHAR(8) NOT NULL,
Sname VARCHAR(20),
Sage INT,
Ssex CHAR(2),
Sdept VARCHAR(20),
PRIMARY KEY (Sno)
);
-- 插入 student 表數(shù)據(jù)
INSERT INTO Student (Sno, Sname, Sage, Ssex, Sdept) VALUES
('95001', '張可可', 20, '男', '計(jì)算機(jī)系'),
('95002', '李曉曉', 21, '男', '數(shù)學(xué)系'),
('95003', '黃珊', 22, '女', '英語系');
在 Navicat
新建查詢,然后運(yùn)行 SQL
語句創(chuàng)建表(下面兩個(gè)表也是這樣操作,不重復(fù)贅述)
??Course 表
-- 創(chuàng)建 Course 表
CREATE TABLE Course (
Cno CHAR(4) NOT NULL,
Cname VARCHAR(20),
teacher VARCHAR(20),
PRIMARY KEY (Cno)
);
-- 插入 Course 表數(shù)據(jù)
INSERT INTO Course (Cno, Cname, Teacher) VALUES
('001', '高等數(shù)學(xué)', '張三'),
('002', '大學(xué)英語', '李四'),
('003', '計(jì)算機(jī)體系結(jié)構(gòu)', '劉軍');
??SC 表
-- 創(chuàng)建 SC 表
CREATE TABLE SC (
Sno CHAR(8) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade FLOAT,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
-- 插入 SC 表數(shù)據(jù)
INSERT INTO SC (Sno, Cno, Grade) VALUES
('95001', '001', 90),
('95001', '002', 85),
('95002', '001', 70),
('95002', '003', 80),
('95003', '002', 95),
('95003', '003', 90);
創(chuàng)建完這三個(gè)表以及插入數(shù)據(jù)以后,先熟悉每個(gè)表的結(jié)構(gòu)以及各個(gè)表之間的聯(lián)系,然后再審題,具體看題目需要完成哪些操作。
??完整答案
在完成上面的步驟以后,我們可以開始做題。接下來我們來看看這十道題目的答案。
(1)創(chuàng)建 SC 表,注明主碼和外碼。
這題在上面創(chuàng)建表的時(shí)候已經(jīng)算是完成了,所以就不多贅述了(這里的主碼、外碼就是指主鍵和外鍵,我是這樣理解的)。
CREATE TABLE SC (
Sno CHAR(8) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade FLOAT,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
(2)檢索劉軍老師所授課程的課程號(hào)和課程名。
SELECT Cno, Cname
FROM Course
WHERE teacher = '劉軍';
(3)檢素年齡大于 23 的男學(xué)生的學(xué)號(hào)和姓名。
這里沒有查詢到年齡大于 23 歲的男學(xué)生,是因?yàn)椴迦霐?shù)據(jù)的時(shí)候忘記插入大于 23 歲的默認(rèn)數(shù)據(jù)了,因此插入一條大于 23 歲的學(xué)生數(shù)據(jù)再做測(cè)試 。
插入數(shù)據(jù)后,測(cè)試成功。
(4)檢索學(xué)號(hào)為 95001 學(xué)生所學(xué)課程的課程名與任課教師名。
SELECT Course.Cname, Course.teacher
FROM Course, SC
WHERE SC.Sno = '95001' AND SC.Cno = Course.Cno;
(5)檢索課程平均成績 90 分(含 90 分)以上的學(xué)生姓名和學(xué)號(hào)。
SELECT student.Sno, student.Sname
FROM student, SC
WHERE student.Sno = SC.Sno
GROUP BY student.Sno, student.Sname
HAVING AVG(SC.Grade) >= 90;
(6)刪除學(xué)號(hào)為 95002 學(xué)生的選課記錄。
DELETE FROM SC
WHERE Sno = '95002';
(7)將學(xué)號(hào)為 95003 學(xué)生的年齡修改為 19 歲。
UPDATE student
SET Sage = 19
WHERE Sno = '95003';
(8)插入一條學(xué)生記錄(95004,李玉荷,18,計(jì)算機(jī)系,女)。
INSERT INTO student(Sno, Sname, Sage,Sdept, Ssex)
VALUES ('95004', '李玉荷', '18','計(jì)算機(jī)系', '女');
(9)將 SC 表查詢的權(quán)限授權(quán)給所有用戶。(參考)
GRANT SELECT ON SC TO PUBLIC;
(10)創(chuàng)建數(shù)學(xué)系的學(xué)生視圖。
CREATE VIEW math_students AS
SELECT Sno, Sname, Sage, Ssex
FROM student
WHERE Sdept = '數(shù)學(xué)系';
文章來源:http://www.zghlxwxcb.cn/news/detail-475662.html
??最后
這就是 MySQL
課后習(xí)題——學(xué)生選課數(shù)據(jù)庫相關(guān)操作的全部內(nèi)容了,內(nèi)容很基礎(chǔ),都是基礎(chǔ)的數(shù)據(jù)庫語句和操作,通過這個(gè)練習(xí),可以熟悉 MySQL
和 Navicat
使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-475662.html
到了這里,關(guān)于MySQL 課后習(xí)題解析與筆記——學(xué)生選課數(shù)據(jù)庫相關(guān)操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!