实验3 数据查询
目的和要求
1. 了解查询的概念和方法;
2. 掌握查询分析器的使用方法;
3. 掌握SELECT语句在单表查询中的应用;
4. 掌握复杂查询的使用方法;
5. 掌握多表连接的方法;
6. 掌握SELECT语句在多表查询中的应用。
内容和步骤
一、单表查询
1.简单查询
打开查询分析器,从teacher表中分别检索出教师的所有信息,以及仅查询教工号、姓名和职称。语句及查询结果如图4.1所示:
select * from teacher
select 教工号,姓名 from teacher
如要查询时改变列标题的显示,则从teacher表中分别检索出教师教工号、姓名、家庭住址信息并分别加上‘教师姓名’、‘教工号’、‘家庭住址’等标题信息,语句及查询结果如下:
使用TOP关键字:分别从teacher中检索出前2条及前面67%的教师的信息。语句及查询结果如下:
select top 2 * from teacher
select top 67 percent * from teacher
使用DISTINCT关键字:从teacher表中检索出教师的职称并且要求显示的职称不重复。语句及查询结果如下:
select distinct 职称 from teacher
6.用计算列:将teacher表中各教师的姓名、教工号及工资按95%发放的信息,第2条语句将工资按95%发放后列名该为‘预发工资’。语句如下:
select 教工号,姓名,工资*0.95 from teacher
select 教工号,姓名,工资*0.95 AS 预发工资 from teacher
7.使用ORDER BY子句对查询的结果进行排序
使用ORDER BY语句可以对查询的结果进行排序,ASC、DESC分别是升序和降序排列的关键字,系统默认的是升序排列。从teacher表中查询工资大于2800的教师的教工号、姓名,并按升序排列,语句及查询结果如下:
select 教工号,姓名 from teacher
where 工资>2800 order by 工资 ASC
2.条件查询
⑴ 使用关系运算符:从teacher表中查询出教工号小于2130的教师资料,语句如下:
select * from teacher where 教工号<2130
⑵ 使用BETWEEN AND谓词:从teacher表中查询出教工号界于2100和2130之间的教师资料,语句如下:
select * from teacher where 教工号 between 2100 and 2130
⑶ 使用IN谓词:从teacher表中查询出职称为“教授”或“副教授”的教师的教工号、教师姓名、职称及家庭住址,语句如下:
select 教工号,姓名,家庭住址,职称 from teacher
where 职称 in ('教授','副教授')
⑷ 使用LIKE谓词:从teacher表中分别检索出姓伍的教师的资料,或者姓名的第2个字是寿或立的教师的资料,语句如下:
select * from teacher where 姓名 like '伍%'
select * from teacher where 姓名 like '_[寿,立]%'
二、多表查询
数据库各表中存放着不同的数据,用户经常需要用多个表中的数据来组合提炼出所需要的信息,如果一个查询需要对多个表进行操作,就称为关联查询,关联查询的结果集或结果表称为表之间的连接。关联查询实际上是通过各各表之间共同列的关联来查询数据的,它是关系数据库查询最基本的特征。
按照下表所示,分别在数据库test中构造student、course和student_course三张表,并写入记录。
Student表
列名称
类型
宽度
允许为空
缺省值
主键
学号
Char
8
否
是
学生姓名
Nvarchar
8
否
性别
Bit
否
出生年月
Smalldatetime
否
班级号
Char
6
否
入学时间
Smalldatetime
否
家庭住址
Nvarchar
40
是
Course表:
列名称
类型
宽度
允许为空
缺省值
主键
课程号
char
10
否
是
课程名称
Nvarchar
20
否
书标识
Char
13
否
课程总学时
Tinyint
是
周学时
Tinyint
是
课程学分
Tinyint
是
Student_course表
列名称
类型
宽度
允许为空
缺省值
主键
Sno
Char
10
否
是
Cno
Char
8
否
是
Grade
Tinyint
否
1.SQL 2000兼容2种连接形式:用于FROM子句的ANSI连接语法和用于WHERE子句的SQL SERVER连接语法形式。
从student、course和student_course三张表中检索学生的学号、姓名、学习课程号、学习课程名及课程成绩,语句如下:
select student.学号,student_course.学生姓名,student_course.课程号,course.课程名,student_course.成绩 from student, student_course,course
where student.学号=student_course.学号
and course.课程号=student_course.课程号
2.使用UNION子句进行查询
使用UNION子句可以将一个或者多个表的某些数据类型相同的列显示在同一列上。如从teacher表中列出教工号、姓名并从student表中列出学号及学生姓名,语句及查询结果如下:
select 学号 AS 代码,学生姓名 AS 姓名 from student
union
select 教工号,姓名 from teacher
3.用GROUP子句进行查询
如果要在数据检索时对表中数据按照一定条件进行分组汇总或求平均值,就要在SELECT语句中与GROUP BY子句一起使用集合函数。使用GROUP BY子句进行数据检索可得到数据分类的汇总统计、平均值或其他统计信息。
⑴ 使用