CREATE DATABASE test;
use test;
CREATE TABLE CLASS (
CNO CHAR(10) PRIMARY KEY,
DEPARTMENT CHAR(50),
SPECIALITY CHAR(50),
MONITOR CHAR(10)
);
CREATE TABLE STUDENT (
SNO CHAR(10) PRIMARY KEY,
SNAME CHAR(50),
GENDER CHAR(1),
CNO CHAR(10),
FOREIGN KEY (CNO) REFERENCES CLASS(CNO)
);
CREATE TABLE LESSON (
LNO CHAR(10) PRIMARY KEY,
LNAME CHAR(50),
BOOK CHAR(50),
CREDIT INT
);
CREATE TABLE TEACHER (
TID CHAR(10) PRIMARY KEY,
TNAME CHAR(50),
DEPARTMENT CHAR(50)
);
CREATE TABLE ELECTION (
CNO CHAR(10),
LNO CHAR(10),
TID CHAR(10),
SYEAR INT,
SEMESTER INT,
PRIMARY KEY (CNO, LNO, TID, SYEAR, SEMESTER),
FOREIGN KEY (CNO) REFERENCES CLASS(CNO),
FOREIGN KEY (LNO) REFERENCES LESSON(LNO),
FOREIGN KEY (TID) REFERENCES TEACHER(TID)
);
CREATE TABLE GRADE (
SNO CHAR(10),
LNO CHAR(10),
SCORE INT,
PRIMARY KEY (SNO, LNO),
FOREIGN KEY (SNO) REFERENCES STUDENT(SNO),
FOREIGN KEY (LNO) REFERENCES LESSON(LNO)
);
INSERT INTO CLASS (CNO, DEPARTMENT, SPECIALITY, MONITOR) VALUES
('C001', '计算机学院', '软件工程', 'S001'),
('C002', '计算机学院', '数据库', 'S003'),
('C003', '电子工程学院', '通信工程', 'S004');
INSERT INTO STUDENT (SNO, SNAME, GENDER, CNO) VALUES
('S001', '张三', 'M', 'C001'),
('S002', '李四', 'F', 'C001'),
('S003', '王五', 'M', 'C002'),
('S004', '赵六', 'F', 'C003');
INSERT INTO LESSON (LNO, LNAME, BOOK, CREDIT) VALUES
('L001', '数据库', '数据库系统概念', 3),
('L002', '软件工程', '软件工程原理', 4),
('L003', '操作系统', '现代操作系统', 3);
INSERT INTO TEACHER (TID, TNAME, DEPARTMENT) VALUES
('T001', '王老师', '计算机学院'),
('T002', '李老师', '计算机学院'),
('T003', '张老师', '电子工程学院');
INSERT INTO ELECTION (CNO, LNO, TID, SYEAR, SEMESTER) VALUES
('C001', 'L001', 'T001', 2024, 1),
('C001', 'L002', 'T002', 2024, 1),
('C002', 'L001', 'T001', 2024, 1),
('C003', 'L003', 'T003', 2024, 1);
INSERT INTO ELECTION (CNO, LNO, TID, SYEAR, SEMESTER) VALUES
('C001', 'L001', 'T001', 2018, 1),
('C001', 'L002', 'T001', 2018, 2),
('C002', 'L002', 'T002', 2018, 1),
('C003', 'L003', 'T003', 2018, 1);
INSERT INTO GRADE (SNO, LNO, SCORE) VALUES
('S001', 'L001', 90),
('S001', 'L002', 85),
('S002', 'L001', 88),
('S003', 'L001', 92),
('S004', 'L003', 80);
SELECT MONITOR,SNAME,CLASS.CNO,SPECIALITY FROM CLASS,STUDENT WHERE CLASS.MONITOR = STUDENT.SNO;
SELECT TID,LNO FROM ELECTION WHERE SYEAR = 2018 AND TID IN(
SELECT TID
FROM ELECTION
WHERE SYEAR = 2018
GROUP BY TID HAVING COUNT(*) >= 2);
SELECT T.TID ,T.TNAME,COUNT(E.LNO),SUM(L.CREDIT)
FROM TEACHER T
JOIN
ELECTION E ON T.TID = E.TID
JOIN
LESSON L ON E.LNO = L.LNO
WHERE T.DEPARTMENT = '计算机' AND E.SYEAR = 2018
GROUP BY T.TID, T.TNAME
ORDER BY '总学分数' ASC;
SELECT CLASS.CNO,SPECIALITY,COUNT(SNO)
FROM CLASS,STUDENT WHERE CLASS.CNO = STUDENT.CNO
AND CLASS.CNO IN (SELECT ELECTION.CNO
FROM ELECTION,LESSON
WHERE LNAME = '数据库' AND ELECTION.LNO AND LESSON.LNO)
AND CLASS.CNO NOT IN (SELECT ELECTION.CNO
FROM ELECTION,LESSON
WHERE LNAME = '软件工程' AND ELECTION.LNO AND LESSON.LNO)
GROUP BY CLASS.CNO,SPECIALITY;
CREATE VIEW V1 AS
SELECT STUDENT.SNO,SNAME,GENDER,STUDENT.CNO,SCORE
FROM STUDENT
JOIN CLASS ON STUDENT.CNO = CLASS .CNO
JOIN GRADE ON STUDENT.SNO = GRADE.SNO
JOIN LESSON ON GRADE.LNO = LESSON.LNO
WHERE CLASS.SPECIALITY = '计算机学院' AND LESSON.LNAME = '数据库';
SELECT * FROM V1;
SELECT SNO, SNAME, SCORE
FROM V1
ORDER BY SCORE DESC
LIMIT 1;