数据库表的查询操作(实验⼆),数据库表查询实验
【实验⽬的】:了解SQL语⾔的使⽤,进⼀步理解关系运算,巩固数据库的基础知识。
【实验要求】:掌握利⽤Select语句进⾏各种查询操作:单表查询、多表连接及查询、嵌套查询、集合查询等。
select中distinct【实验内容】
⼀、单表查询
1.简单查询
打开查询分析器,根建⽴teacher表,并加⼊数据。从teacher表中分别检索出教师的所有信息,以及仅查询教⼯号、姓名和职称。语句如下:
select * from teacher
select tno, tname from teacher
如要查询时改变列标题的显⽰,则从teacher表中分别检索出教师教⼯号、姓名、电⼦邮箱信息并分别加上
‘教师姓名'、‘教⼯号'、'电⼦邮
箱'等标题信息。
select tno ⼯号, tname 姓名, temail 电⼦邮箱 from teacher
使⽤TOP关键字:分别从teacher中检索出前2条及前⾯67%的教师的信息。
select top 2 * from teacher
select top 67 percent * from teacher
使⽤DISTINCT关键字:从teacher表中检索出教师的职称并且要求显⽰的职称不重复。select  distinct tposition  from  teacher
2.⽤计算列:将teacher表中各教师的姓名、教⼯号及⼯资按95%发放的信息,第2条语句将⼯资按95%发放后列名该为‘预发⼯资'。语句如下:
select tno tname ,tsalary*0.95 from teacher
select tno⼯号, tname姓名, tsalary*0.95 AS 预发⼯资 from teacher
3.使⽤ORDER BY⼦句对查询的结果进⾏排序
使⽤ORDER BY语句可以对查询的结果进⾏排序,ASC、DESC分别是升序和降序排列的关键字,系统默认的是升序排列。从teacher表中查询⼯资⼤于2800的教师的教⼯号、姓名,并按升序排列,语句如下:
select tno, tname from teacher
WHERE tsalary>2800 order by tsalary ASC
4.条件查询
(1)使⽤关系运算符:从teacher表中查询出⼯作量⼤于288的教师资料,语句如下:
select * from teacherWHERE tamount>288 order by tamount DESC
(2)使⽤BETWEEN AND谓词:从teacher表中查询出⼯作量界于144和288之间的教师资料,语句如下:
select * from teacher WHERE tamount between 144 and 288
(3) 使⽤IN谓词:从teacher表中查询出职称为“教授”或“副教授”的教师的教⼯号、教师姓名、职称及家庭住址,语句如下:
select tno,tname,tposition, taddress from teacher
WHERE tposition in ('教授','副教授')
(4)使⽤LIKE谓词:从teacher表中分别检索出姓'王'的教师的资料,或者姓名的第2个字是'莉'或'轩'的教师的资料,语句如下:
select * from teacher WHERE tname like '王%'
select * from teacher WHERE tname like '_[莉,轩]%'
⼆、多表查询
数据库各表中存放着不同的数据,⽤户经常需要⽤多个表中的数据来组合提炼出所需要的信息,如果⼀个查询需要对多个表进⾏操作,就称为关联查询,关联查询的结果集或结果表称为表之间的连接。关联查询实际上是通过各各表之间共同列的关联来查询数据的,它是关系数据库查询最基本的特征。
1.SQL 2000兼容2种连接形式:⽤于FROM⼦句的ANSI连接语法和⽤于WHERE⼦句的SQL SERVER连接语法形式。
从student、course和SC三张表中检索学⽣的学号、姓名、学习课程号、学习课程名及课程成绩,语句如下:
select student.sno, sname, cno, grade
from student inner join SC on student.sno=SC.sno
select student.ade
from student,sc
WHERE student.sno=sc.sno
select student.sno,student.sname,sco,ade
from student,sc,course
WHERE student.sno=sc.sno and sco=courseo
2.使⽤UNION⼦句进⾏查询
使⽤UNION⼦句可以将⼀个或者多个表的某些数据类型相同的列显⽰在同⼀列上。如从teacher表中列出教⼯号、姓名并从student表中列出学号及学⽣姓名,语句及查询结果如下:
select sno AS 学号或⼯号, sname AS 姓名 from student
union
select tno, tname from teacher
3.⽤GROUP⼦句进⾏查询
如果要在数据检索时对表中数据按照⼀定条件进⾏分组汇总或求平均值,就要在SELECT语句中与GROUP BY⼦句⼀起使⽤集合函数。使⽤GROUP BY⼦句进⾏数据检索可得到数据分类的汇总统计、平均值或其他统计信息。
(1) 使⽤不带HAVING的GROUP BY⼦句。
使⽤不带HAVING 的GROUP BY⼦句汇总出SC表中的学⽣的学号及总成绩,语句如下:
select '学号'=sno,'总成绩'=SUM(Grade)
from SC
group by Sno
(2)使⽤带HAVING 的GROUP BY⼦句。
使⽤带HAVING 的GROUP BY⼦句汇总出SC表中总分⼤于450分的学⽣的学号及总成绩,语句如下:
select '学号'=sno,'总成绩'=SUM(Grade) from SC
group by Sno
Having SUM(Grade)>160
4.⽤COMPUTE和COMPUTE BY⼦句进⾏查询
使⽤COMPUTE和COMPUTE BY 既能浏览数据⼜能看到统计的结果。
(1) ⽤COMPUTE⼦句汇总出SC表中每个学⽣的学号及总成绩,语句如下:
select '学号'=sno,'成绩'=Grade from SC
order by sno COMPUTE SUM(Grade)
(2)⽤COMPUTE BY ⼦句按学号汇总出SC表中每个学⽣的学号及总成绩,语句如下:
select '学号'=sno,'成绩'=Grade from SC
ORDER BY Sno COMPUTE SUM(Grade) by sno
观察执⾏COMPUTE和COMPUTE BY⼦句的结果有什么不同?
5.嵌套查询
(1) 使⽤IN或NOT IN关键字
使⽤IN关键字查询出j10011班所有男⽣的学号、课程号及相应的成绩,语句如下:
select SC.sno , ade
FROM SC
WHERE sno IN
( SELECT sno FROM student
WHERE Sclass='j10011' AND Ssex='男')
使⽤IN关键字查询出与教师不同名的学⽣(学号,姓名),语句如下:
select sno 学号, sname 姓名
from student
where sname not in (select tname from teacher)
(2) 使⽤EXISTS 或NOT EXISTS关键字。
使⽤EXISTS关键字查询出‘j10011'班的学⽣的学号、课程号及相应的成绩,语句如下:
SELECT SC.sno,SCo,SC.grade
FROM SC
WHERE EXISTS
( SELECT * FROM student
WHERE SC.sno=student.sno AND student.sclass=‘j10011' )

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。