【实验目的】
1、熟悉数据库的交互式SQL语言
2、熟悉通过SQL语言对数据库进行操作
【实验平台】
利用安装的SQL SERVER2008及其交互工具来操作SQL语言。
【实验内容】
对于【实验1】的学生课程数据库的3个基本表
Student(Sno, sname, age, sex)
SC(sno, cno, grade)
Course(cno, cname, teacher)
给3个基本表insert输入记录,再用update、delete更新其中的数据(如果表中已有记录,该操作可忽略)。
建表及输入数据语句:
create table Student(
Sno char(12) primary key,
Sname char(8) unique,
Sage smallint,
Ssex char(2),)
create table course(
Cno char(6) primary key,
Cname char(20) not null,
Teacher char(8))
create table SC(
Sno char(12),
Cno char(6),
Grade smallint,
primary key(sno,cno),
foreign key(sno) references student(sno),
foreign key(cno) references course(cno))
insert
into Student(Sno,Sname,Ssex,Sage)
values
(201215121,'李勇','男','20'),
(201215122,'刘晨','女','19'),
(201215123,'王敏','女','18'),
(201215125,'张立','男','19');
insert
into Course(Cno,Cname,Teacher)
values
(1,'数据库','LIU'),
(2,'数学','LI'),
(3,'信息系统','WANG'),
(4,'操作系统','LIU'),
(5,'数据结构','ZHANG'),
(6,'数据处理','LIU'),
(7,'PASCAL语言','ZHU');
一、试用SQL的查询语句表达下列查询:
1.检索LIU老师所授的课程号和课程名
select Cno,Cname
from course
where Teacher='LIU';
2.检索年龄大于20岁的男学生的学号和姓名
select Sno,Sname
from Student
where Ssex='男' and Sage>=20;
3.检索学号为201215122学生所学课程的课程名与任课教师名(用in和exists引导的嵌套查询分别实现该题)
select Cname,Teacher /*检索号同学所选修的课程名和任课教师名*/
from course,SC
where Sno='201215122' and course.Cno=SC.Cno;
4.检索至少选修LIU老师所授课程中一门课程的女学生姓名(用连接查询、in和exists引导的嵌套查询分别实现该题)
方法一:
select sname /*检索至少选修liu老师所授课程中一门课程的女同学姓名*/
from Student,course,SC
where Student.Sno=SC.Sno and course.Cno=SC.Cno and Ssex='女' and Teacher='LIU';
方法二:
select sname /*检索至少选修liu老师所授课程中一门课程的女同学姓名*/
from Student
where ssex='女' and exists(select *
from SC,course
where SC.Sno=Student.Sno and course.Cno=SC.Cno and Teacher='LIU')
5.检索李勇同学没有选修的课程的课程号(用not exists引导的嵌套查询、集合查询分别实现该题)
方法一:
select Cno /*检索李勇同学没有选修的课程号*/
from course
where Cno<>all
(select Cno
from Student,SC
where SC.Sno=Student.Sno and Sname='李勇');
方法二:
select cno /*检索李勇同学没有选修的课程号*/
from course
where not exists(select *
from Student,SC
where course.cno=sc.cno and Student.Sno=sc.sno and Sname='李勇')
6.检索至少选修两门课程的学生学号
select Sno /*检索至少选修了两门课的学生学号*/
from SC
group by Sno
having COUNT(*)>=2;
7.检索全部学生都选修的课程的课程号与课程名
select cno,Cname /*检索全部学生都选修的课程的课程名与课程号*/
from Course
where Cno in(select Cno
from SC
group by Cno
having COUNT(*)=(select COUNT(*)
from student))