目录
#将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数
#查询全体学生的姓名、出生年份和所在院系,要求用小写字母表示系名
#查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别
#查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别
#查询以"DB_"开头,且倒数第三个字符为i的课程的详细情况
#某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩,查询缺少成绩的学生的学号和相应的课程号
#查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
#建立一个学生表Student
#建立一个学生表Student
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
#建立一个课程表Course
#建立一个课程表Course
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno)
);
#建立学生选课表
#建立学生选课表
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
#向Student表增加“入学时间”列,其数据类型为日期型
#向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
#将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数
#将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数
ALTER TABLE Student ALTER COLUMN Sage INT;
#增加课程名称必须取唯一值的约束条件
#增加课程名称必须取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);
#删除Student表
#删除Student表
DROP TABLE Student CASCADE;
#Student表按学号升序建唯一索引
#Student表按学号升序建唯一索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
#Course表按课程号升序建唯一索引
#Course表按课程号升序建唯一索引
CREATE UNIQUE INDEX Coucno ON Course(Cno);
#SC表按学号升序和课程号降序建唯一索引
#SC表按学号升序和课程号降序建唯一索引
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
#将SC表的SCno索引名改为SCSno
#将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;
#删除Student表的Stusname索引
#删除Student表的Stusname索引
DROP INDEX Stusname;
#查询全体学生的学号与姓名
#查询全体学生的学号与姓名
SELECT Sno,Sname FROM Student;
#查询全体学生的姓名、学号、所在系
#查询全体学生的姓名、学号、所在系
SELECT Sname,Sno,Sdept FROM Student;
#查询全体学生的详细记录
#查询全体学生的详细记录
SELECT * FROM Student;
#查询全体学生的姓名及其出生年份
#查询全体学生的姓名及其出生年份
SELECT Sname,2014-Sage FROM Student;
#查询全体学生的姓名、出生年份和所在院系,要求用小写字母表示系名
#查询全体学生的姓名、出生年份和所在院系,要求用小写字母表示系名
SELECT Sname,'Year of Birth:',2014-Sage,LOWER(Sdept) FROM Student;
#查询选修了课程的学生学号(相同的学号只允许出现一次)
#查询选修了课程的学生学号(相同的学号只允许出现一次)
SELECT DISTINCT Sno FROM SC;
#查询计算机科学系全体学生的名单
#查询计算机科学系全体学生的名单
SELECT Sname FROM Student WHERE Sdept='CS';
#查询所有年龄在20岁以下的学生姓名及其年龄
#查询所有年龄在20岁以下的学生姓名及其年龄
SELECT Sname,Sage FROM Student WHERE Sage<20;
#查询考试成绩不及格的学生的学号
#查询考试成绩不及格的学生的学号
SELECT DISTINCT Sno FROM SC WHERE Grade<60;
#查询年龄在20~23岁之间的学生姓名、系别和年龄
#查询年龄在20~23岁之间的学生姓名、系别和年龄
SELECT Sname,Sdept,Sage FROM Student where Sage BETWEEN 20 AND 23;
#查询年龄不在20~23岁之间的学生姓名、系别和年龄
#查询年龄不在20~23岁之间的学生姓名、系别和年龄
SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;
#查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别
#查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别
SELECT Sname,Ssex FROM Student WHERE Sdept IN ('CS','MA','IS');
#查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别
#查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别
SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN('CS','MA','IS');
#查询学号为20215121的学生的详细情况
#查询学号为20215121的学生的详细情况
SELECT * FROM Student WHERE Sno LIKE '20215121';
#查询所有姓刘的学生的姓名、学号和性别
#查询所有姓刘的学生的姓名、学号和性别
SELECT Sname,Sno,Ssex FROM Student LIKE'刘%';
#查询姓“欧阳”且全名为三个汉字的学生的姓名
#查询姓“欧阳”且全名为三个汉字的学生的姓名
SELECT Sname FROM Student WHERE Sname LIKE'欧阳__';
#查询名字中第二个字为“阳”的学生的姓名、学号和性别
#查询名字中第二个字为“阳”的学生的姓名、学号和性别
SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE'__阳%';
#查询所有不姓刘的学生的姓名、学号和性别
#查询所有不姓刘的学生的姓名、学号和性别
SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE'刘%';
#查询DB_Design课程的课程号和学分
#查询DB_Design课程的课程号和学分
SELECT Cno,Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE'\';
#查询以"DB_"开头,且倒数第三个字符为i的课程的详细情况
#查询以"DB_"开头,且倒数第三个字符为i的课程的详细情况
select * FROM Course WHERE Cname LIKE 'DB\_%i__'ESCAPE'\';
#某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩,查询缺少成绩的学生的学号和相应的课程号
#某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩,
#查询缺少成绩的学生的学号和相应的课程号
SELECT Sno,Cno FROM SC WHERE Grade IS NULL;
#查询所有有成绩的学生学号和课程号
#查询所有有成绩的学生学号和课程号
SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;
#查询计算机科学系年龄在20岁以下的学生姓名
#查询计算机科学系年龄在20岁以下的学生姓名
SELECT Sname FROM Student WHERE Sdept = 'CS' AND Sage<20;
#查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
#查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
SELECT Sno,Score FROM SC WHERE Cno='3' ORDER BY Grade DESC;
#查询学生总数
#查询学生总数
SELECT COUNT(*) FROM Student;
#查询选修了课程的学生人数
#查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno) FROM SC;
#计算选修1号课程的学生平均成绩
#计算选修1号课程的学生平均成绩
SELECT AVG(Grade) FROM SC WHERE Cno='1';
#查询选修1号课程的学生最高分数
#查询选修1号课程的学生最高分数
SELECT MAX(Grade) FROM SC WHERE Cno='1';
#查询学生20125012选修课程的总学分数
#查询学生20125012选修课程的总学分数
SELECT SUM(Ccredit) FROM SC,Course WHERE Sno='20125012' AND SC.Cno=Course.Cno;
#求各个课程号及相应的选课人数
#求各个课程号及相应的选课人数
SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;
#查询选修了三门以上课程的学生学号
#查询选修了三门以上课程的学生学号
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>3;
#查询平均成绩大于等于90分的学生学号和平均成绩
#查询平均成绩大于等于90分的学生学号和平均成绩
SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>90;
#查询每个学生及其选修课程的情况
#查询每个学生及其选修课程的情况
SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno=SC.Sno;
#查询每个学生及其选修课程的情况(用自然连接)
#查询每个学生及其选修课程的情况(用自然连接)
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno=SC.Sno;
#查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
#查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno='2' AND SC.Grade>90;