CREATE TABLE 系 ( 系号 INT, 系名 VARCHAR(30) UNIQUE, 系主任 VARCHAR(15), PRIMARY KEY(系号) );
CREATE TABLE 学生( 学号 VARCHAR(15), 姓名 VARCHAR(10), 性别 CHAR(1) CHECK (性别 IN ('男', '女')), 年龄 INT CHECK (年龄 BETWEEN 10 AND 50), 入学年份 VARCHAR(10), 籍贯 VARCHAR(50), 系号 INT, 手机号 VARCHAR(15) UNIQUE, 班长学号 VARCHAR(10), PRIMARY KEY(学号), FOREIGN KEY(系号) REFERENCES 系(系号), FOREIGN KEY(班长学号) REFERENCES 学生(学号) );
CREATE TABLE 课程 ( 课程号 VARCHAR(15), 课程名 VARCHAR(15) UNIQUE, 先修课 VARCHAR(15), 学分 DECIMAL(2,1), CHECK (学分>0 AND 学分<5), PRIMARY KEY(课程号) );
CREATE TABLE 选课 ( 学号 VARCHAR(15), 课程号 VARCHAR(15), 成绩 DECIMAL(5, 2), PRIMARY KEY(学号, 课程号), FOREIGN KEY(学号) REFERENCES 学生(学号), FOREIGN KEY(课程号) REFERENCES 课程(课程号), CHECK (成绩 BETWEEN 0 AND 100) );
INSERT INTO 学生 VALUES(26, '李四', '女', 20, 2008, '广东', null, 10010001000, 10);
DELETE from 学生 where 学号 = 26;
ALTER TABLE 学生 MODIFY 姓名 VARCHAR(18);
ALTER TABLE 学生 ADD 电子邮件 VARCHAR(20);
ALTER TABLE 课程 MODIFY 学分 DECIMAL(2,1) CHECK (学分>=0 AND 学分<=6);
CREATE VIEW 每门课最高分 AS SELECT 课程号, MAX(成绩) AS 最高分 FROM 选课 GROUP BY 课程号;
SELECT 学生.学号, 姓名, SUM(选课.成绩) AS 总成绩, AVG(选课.成绩) AS 平均分 FROM 学生 JOIN 选课 on 学生.学号 = 选课.学号 GROUP BY 学生.学号;
SET @avg_age = (SELECT AVG(年龄) FROM 学生 WHERE 系号 = 7); UPDATE 学生 SET 年龄 = @avg_age WHERE 系号 = 6;
UPDATE 选课 SET 成绩 = 62 WHERE 学号 = (SELECT 学号 FROM 学生 WHERE 姓名 = '曹洪') AND 课程号 = (SELECT 课程号 FROM 课程 WHERE 课程名 = '操作系统');
SELECT 姓名, 入学年份, 籍贯 FROM 学生;
SELECT * FROM 学生 WHERE 籍贯 = '山东';
SELECT 学号, 姓名 FROM 学生 WHERE 年龄 = (SELECT MIN(年龄) FROM 学生);
SELECT 学号 FROM 选课 WHERE 课程号 = (SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库');
SELECT 学生.学号, 姓名 FROM 学生 JOIN 选课 ON 学生.学号 = 选课.学号 WHERE 选课.课程号 = (SELECT 课程号 FROM 课程 WHERE 课程名 = '编译技术') AND 性别 = '女';
SELECT 课程号 FROM 选课 WHERE 学号 = (SELECT 班长学号 FROM 学生 WHERE 姓名 = '典韦');
SELECT 学号, 姓名, 系.系名 FROM 学生 JOIN 系 ON 学生.系号 = 系.系号 WHERE SUBSTRING(姓名, -2, 1) = '侯';
SELECT 课程名 FROM 课程 WHERE 课程名 LIKE 'P%' AND SUBSTRING(课程名, -3, 1) = 'L';
SELECT SUM(成绩) FROM 选课 WHERE 学号 = (SELECT 学号 FROM 学生 WHERE 姓名 = '甘宁');
SELECT * FROM 学生 WHERE 学号 IN ( SELECT 学号 FROM 选课 WHERE 课程号 = ( SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库' ) ) INTERSECT SELECT * FROM 学生 WHERE 学号 IN ( SELECT 学号 FROM 选课 WHERE 课程号 = ( SELECT 课程号 FROM 课程 WHERE 课程名 = '操作系统' ) );
SELECT 学号, 姓名 FROM 学生 WHERE 学号 NOT IN (SELECT 学号 FROM 选课 WHERE 课程号 = (SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库'));
SELECT 学号, 姓名 FROM 学生 WHERE 学号 IN ( SELECT 学号 FROM 选课 WHERE 课程号 = ( SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库' ) AND 成绩 >= 60 INTERSECT SELECT 学号 FROM 选课 WHERE 课程号 = ( SELECT 课程号 FROM 课程 WHERE 课程名 = '编译技术' ) AND 成绩 < 60 );
SELECT 学号, 姓名 FROM 学生 WHERE 学号 IN ( SELECT 学号 FROM 选课 WHERE 课程号 = ( SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库' ) AND 成绩 < ( SELECT AVG(成绩) FROM 选课 WHERE 课程号 = (SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库') ) );
SELECT @diaochan_id := 学号 FROM 学生 WHERE 姓名 = '貂蝉'; SELECT 学生.学号, 姓名 FROM 学生 JOIN 选课 ON 学生.学号 = 选课.学号 WHERE 学生.学号 <> @diaochan_id GROUP BY 学生.学号 HAVING COUNT(选课.课程号) = ( SELECT COUNT(课程号) FROM 选课 WHERE 学号 = @diaochan_id ) AND NOT EXISTS ( SELECT 1 FROM 选课 AS T1 WHERE T1.学号 = 学生.学号 AND T1.课程号 NOT IN ( SELECT 课程号 FROM 选课 WHERE 学号 = @diaochan_id ) ) AND NOT EXISTS ( SELECT 1 FROM 选课 AS T2 WHERE T2.学号 = @diaochan_id AND T2.课程号 NOT IN ( SELECT 课程号 FROM 选课 WHERE 学号 = 学生.学号 ) );
SELECT 学生.学号, 姓名 FROM 学生 JOIN 选课 ON 学生.学号 = 选课.学号 WHERE 学生.学号 <> @diaochan_id GROUP BY 学生.学号 HAVING COUNT(选课.课程号) > ( SELECT COUNT(课程号) FROM 选课 WHERE 学号 = @diaochan_id ) AND EXISTS ( SELECT 1 FROM 选课 AS T1 WHERE T1.学号 = 学生.学号 AND T1.课程号 NOT IN ( SELECT 课程号 FROM 选课 WHERE 学号 = @diaochan_id ) ) AND NOT EXISTS( SELECT 1 FROM 选课 AS T1 WHERE T1.学号 = @diaochan_id AND T1.课程号 NOT IN ( SELECT 课程号 FROM 选课 WHERE 学号 = 学生.学号 ) );
SELECT 系名 FROM (SELECT 系.系名, AVG(成绩) AS 平均成绩 FROM 选课 JOIN 学生 ON 选课.学号 = 学生.学号 JOIN 课程 ON 选课.课程号 = 课程.课程号 JOIN 系 ON 学生.系号 = 系.系号 WHERE 课程名 = '数学' GROUP BY 系.系号) as 平均成绩表 ORDER BY 平均成绩 DESC LIMIT 1;
SELECT 课程名 FROM 课程 WHERE 课程号 IN ( SELECT 课程号 FROM 选课 WHERE 学号 IN ( SELECT 学号 FROM 学生 WHERE 籍贯 = '四川' ) );
SELECT 学号, SUM(课程.学分) AS 学分 FROM 选课 JOIN 课程 ON 选课.课程号 = 课程.课程号 WHERE 学号 IN (SELECT 学号 FROM 选课 WHERE 课程号 = (SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库')) GROUP BY 学号;
|