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

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君临๑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值