数据库的简单查询和连接查询
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五:数据库的简单查询和连接查询
实验目的:
掌握简单表的数据查询、数据排序和数据联结查询的操作方法。
实验内容:
简单查询操作和连接查询操作。
实验步骤:
一. 单表查询:
1. 查询全体学生的学号和姓名:
select sno, sname from student
2. 查询全体学生的所有信息:
select * from student
或者select sno, sname, ssex,sage, sdept from student
3. 查询全体学生的姓名, 出生年份,和所在系, 并用小写字母表示所有系名:
select sname, '出生年份为: ', year(getdate()) - sage, lower(sdept) from student
4. 给上例的结果集指定列名:
select sname, '出生年份为: ' 出生, year(getdate())- sage 年份, lower(sdept) 系名from student
5. 查询选修了课程的学生的学号:
select distinct sno from sc
比较: select sno from sc
6. 查询年龄在20岁以下的学生的姓名及其年龄:
select sname, sage from student where sage<20
7. 查询考试成绩有不及格的学生的学号:
select distinct sno from sc where grade<60
比较: select sno from sc where grade<60
8. 查询年龄在20-30岁直接的学生的姓名, 姓名, 所在系:
select sname, ssex, sdept from student where sage between 20 and 30
9. 查询IS,CS,MA系的所有学生的姓名和性别:
select sname, ssex from student where sdept in ('IS', 'MA','CS')
10. 查找所有姓’李’的学生的姓名, 学号和性别:
select sname, sno, ssex from student where sname like '李%'
比较: 将学生表中的’95001’号学生的姓名’李勇’改为’李勇勇’, 再执行:
select sname, sno, ssex from student where sname like '李_'
11. 查询没有先行课的课程的课程号cno和课程名cname:
select cno, cname from course where pcno is null
二. 查询结果排序
12. 查询选修了3号课程的学生的学号和成绩, 并按分数降序排列:
select sno, grade from sc where cno='3' order by grade DESC
23. 查询全体学生的情况,查询结果按所在系号升序排列, 同一系中的学生按年龄降序排列:
select * from student order by sdept ASC, sage DESC
三. 连接查询:
14. 查询每个学生及其选修课程的情况:
select student.*, sc.* from student, sc where student.sno=sc.sno
比较: 笛卡尔集: select student.*, sc.* from student, sc
自然连接: select student.sno, sname, ssex, sdept, cno, grade from student, sc where student.sno=sc.sno
15. 查询每一门课程的间接先行课(只求两层即先行课的先行课):
select o, Second.pcno 间接先行课from course First, course Second where First.pcno=o
比较:
select o, Second.pcno 间接先行课from course First, course Second where First.pcno=o and Second.pcno is not null
16. 列出所有学生的基本情况和选课情况, 若没有选课,则只列出基本情况信息:
SQL Server 中: select s.sno, sname, ssex,sdept, cno, grade from student s, sc sc where s.sno*=sc.sno
*= 是右连接,相当于right outer join
=* 是左连接,相当于left outer join
(此处相当于左外连接)select s.sno,sname, ssex,sdept,cno,grade from student s left outer join sc on s.sno=sc.sno
17. 查询每个学生的学号, 姓名, 选修的课程名和成绩:
select S.sno, sname, cname, grade from student S, course C, sc SC where S.sno=SC.sno and o=o
思考:
如何求出不及格学生的学号, 姓名, 不及格的课程名以及成绩。
小结: