实验2 SQL 查询语句

【实验目的】
    1、熟悉数据库的交互式SQL语言
    2、熟悉通过SQL语言对数据库进行操作
【实验平台】
    利用安装的SQL SERVER2008及其交互工具来操作SQL语言。

【实验内容】

    对于【实验1】的学生课程数据库的3个基本表

Student(Sno, sname, age, sex)

SC(sno, cno, grade)

Course(cno, cname, teacher)

3个基本表insert输入记录,再用updatedelete更新其中的数据(如果表中已有记录,该操作可忽略)。

建表及输入数据语句:

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))

你可能感兴趣的:(数据库)