第三章关系型数据库标准语言SQL
- SQL语言的功能
- 学生—课程数据库
- 建立基本表student
- 建立基本表SC
- 向表student增加“入学时间”列,数据类型为日期型
- 将年龄的数据类型改为整数。
- 增加课程名称必须取唯一值的约束条件
- 删除student表
- 为SC表建立按学号升序和课程号降序的唯一索引
- 将SC表的SCno索引名改为SCSno
- 删除student表的Stusname索引
- 查询全体学生的详细记录
- 查询所有选修课程的学生学号,并去掉重复的行
- 查询21岁以下的学生姓名及年龄
- 查询所有姓刘的学生的姓名、学号和性别。
- 查询学生信息, 按系升序,同系学生按年龄降序。
- 计算课程号为101的课程平均分
- 查询各个课程的课程号与选课人数,查询结果按课程分组
- 查询选修了2门以上课程的学生学号
- 查询选修201号课程且成绩>90分的学生的学号和姓名
- 查询与“刘小冬”同系的学生。
- 查询未选修101号课程的学生姓名
- 建立信息系学生视图
- 将学号及其平均成绩定义为视图
- 把S-G视图中学号95001的平均成绩由85改为90分,
SQL语言的功能
数据查询、数据操纵、数据定义、数据控制
学生—课程数据库
学生表:student(sno,sname,ssex,sage,sdept)
课程表:course(cno,cname,pcno,credit)
选课表: SC(sno,cno,grade)
建立基本表student
Create Table student(
sno CHAR(9) PRIMARY KEY, /*列级完整性约束条件:体现实体完整性,sno是主码*/
Sname CHAR(20) UNIQUE, /*Sname取值唯一*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
)
建立基本表SC
Create Table SC(
sno char(9),
cno char(4),
grade smallint,
Primary Key(sno,cno),
Foreign Key(sno)References STUDENT(sno),/*表级完整性约束条件:体现参照完整性,被参照表是STUDENT*/
Foreign Key(cno)References COURSE(cno),
Check ((Grade Is Null) or (Grade Between 0 and 100))/*用户自定义完整性约束条件*/
)
向表student增加“入学时间”列,数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE
将年龄的数据类型改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT
增加课程名称必须取唯一值的约束条件
ALTER TABLE course ADD UNIQUE(cname)
删除student表
DROP TABLE student CASCADE
为SC表建立按学号升序和课程号降序的唯一索引
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC)
将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno
删除student表的Stusname索引
DROP INDEX Stusname
查询全体学生的详细记录
SELECT *FROM student
查询所有选修课程的学生学号,并去掉重复的行
SELECT DISTINCT sno From SC
查询21岁以下的学生姓名及年龄
Select sname,sage from student where sage<21
查询所有姓刘的学生的姓名、学号和性别。
select sname, sno, sex from student where sname like '刘% '
查询学生信息, 按系升序,同系学生按年龄降序。
Select * From student Order by sdept, sage DESC
计算课程号为101的课程平均分
select AVG(grade) from SC where cno=‘101’
查询各个课程的课程号与选课人数,查询结果按课程分组
Select cno, count(sno) from SC group by cno
查询选修了2门以上课程的学生学号
Select sno From SC Group by sno Having count (*)> 2
查询选修201号课程且成绩>90分的学生的学号和姓名
select s.sno, sname from S,SC
where S.sno=SC.sno and SC.cno=‘201’ and SC.grade>90
查询与“刘小冬”同系的学生。
Select sno,sname,sdept From studuent
Where sdept IN(
select sdept from student where sname =‘刘小冬’
)
查询未选修101号课程的学生姓名
select sname from S where not exists(
select * from SC where cno=‘101’ and sno=S.sno
)
建立信息系学生视图
Create View IS_student As Select sno,sname,sage From S Where sdept=‘IS’
将学号及其平均成绩定义为视图
Create view S_G(sno, gavg) As Select sno, avg(grade) From SC Group by sno
把S-G视图中学号95001的平均成绩由85改为90分,
Update S_G Set Gavg=90 Where sno=“95001”