实验5_SQL语言之高级查询[1]1

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五高级查询

【实验目的与要求】

1、熟练掌握IN子查询

2、熟练掌握比较子查询(尤其要注意ANY、ALL谓词如何用集函数代替)

3、熟练掌握EXISTS子查询(尤其是如何将全称量词和逻辑蕴含用EXISTS谓词代替)

4、熟练掌握复杂查询的select语句

【实验准备】

1.准备好测试数据

2.熟悉多表查询与嵌套查询的用法。

【实验内容】

5.1.准备工作

1.创建测试用数据库XSGL,并在其中创建三个表

本实验需用到student、course和SC表,其结构和约束如下:

Student表结构及其约束为:

表5-1 student表结构和约束

列名称类型宽度允许空值缺省值主键说明

Sno char 8 否是学号

Sname varchar 8 否学生姓名

Sex char 2 否男性别

Birth datetime 否出生年月Classno char 3 否班级号Entrance_date datetime 否入学时间Home_addr varchar 40 是家庭地址

Course表结构及其约束为:

表5-2 course表结构和约束

列名称类型宽度允许空值缺省值主键说明

cno Char 3 否是课程号

Cname varchar 20 否课程名称Total_perior int 是总学时credit int 是学分

SC表结构及其约束为:

表5-3 SC表结构和约束

列名称类型宽度允许空值缺省值主键外键说明

sno Char 8 否是学号,参照student表

cno char 3 否是课程号,参照course表

grade int 是否成绩其中成绩为百分制。

2.对表添加、修改、删除数据

向student表中插入如下数据:

表5-4 student表

Sno sname sex birth classno Entrance_date Home_addr sdept postcode 20050001 张虹男1984/09/011 051 2005/09/01 南京CS 200413 20050002 林红女1983/11/12 051 2005/09/01 北京CS 100010 20050003 赵青男1982/05/11 051 2005/09/01 上海MA 200013

向course表中插入数据:

表5-5 course表

cno Cname Total_perior credit

001 高数68 3

002 C语言程序设计75 4

003 JAVA语言程序设计68 3

向SC表中插入数据:

表5-6 SC表

Sno Cno grade

20050001 001 89

20050001 002 78

20050001 003 89

20050002 002 60

20050003 001 80

为达到更好的测试效果,请自行向数据库表中添加其它数据,使表中数据量达10条以

上,并使每个字段值表现出多样性。

5.2.复杂查询

(1)查询比“林红”年纪大的男学生信息。

SQL语句:

select *

from Student

where birth<

(

select birth

from Student

where Sname='林虹'

)and Sex='男';

(2)检索所有学生的选课信息。

SQL语句:

select Sno,Sname,Cno,Cname

from Student,Course

(3)查询已选课学生的学号、姓名、课程名、成绩。

连接查询T—SQL语句:

select distinct Student.Sno,Sname,Cname,grade

from Student,Course,SC

where SC.Sno=Student.Sno and o=o

(4)查询选修了“C语言程序设计”的学生的学号和姓名。

SQL语句:

select distinct Student.Sno,Sname

from Student,Course,SC

where ame='C语言程序设计'

(5)查询与“张虹”在同一个班级的学生学号、姓名、家庭住址。

(子查询)SQL语句:

(select classno

from Student

where Sname='张虹'

);

连接查询SQL语句:

select distinct Student.Sno,Sname,Home_addr

from Student,Course,SC

where classno=

(select classno

from Student

where Sname='张虹'

);

(6)查询其他班级中比“051”班任一学生年龄大的学生的学号、姓名。

带有ANY或ALL谓词的子查询语句:

select Sno,Sname

from Student

where birth< any(select birth

from Student

where classno='051')

相关文档
最新文档