一、实验目的
1. 掌握连接查询方法。
2. 掌握各种查询的使用方法。
二、实验硬、软件环境
开发环境: Windows XP 操作系统及以上版本
数据库管理系统:SQL Server 2012
运行环境:Windows XP 操作系统及以上版本
三、实验内容及步骤
1. 查询于兰兰的选课信息,列出学号,姓名,课程号(使用两种连接查询方式)。
代码及运行结果如下:
第一种方法:
SELECT STUDENT.SNO,SNAME,CNO
FROM STUDENT,SC
WHERE (STUDENT.SNO = SC.SNO) AND (SNAME= '于兰兰' )
第二种方法:
SELECT STUDENT.SNO,SNAME,CNO
FROM STUDENT INNER JOIN SC
ON STUDENT.SNO = SC.SNO
WHERE SNAME= '于兰兰'
2.查询所有学生的学号、姓名、课程名称及成绩(用左连接)。
代码及运行结果如下:
SELECT STUDENT.SNO,SNAME,CNAME,GRADE
FROM STUDENT
LEFT OUTER JOIN SC
ON STUDENT.SNO = SC.SNO
LEFT OUTER JOIN COURSE
ON SC.CNO = COURSE.CNO
3.查询所有姓“李”的男同学,要求显示其学号、姓名、性别。
代码及运行结果如下:
SELECT STUDENT.SNO,SNAME,SEX
FROM STUDENT
WHERE (SNAME LIKE '李%')AND (SEX='男')
4.检索张艳同学 同一专业班级的学生学号、姓名。
代码及运行结果如下:
SELECT STUDENT.SNO,SNAME
FROM STUDENT
WHERE SPECIAL= (SELECT SPECIAL
FROM STUDENT
WHERE SNAME='张艳')
5.查询选修三门以上(含三门)课程的学生的学号和平均分数。
代码及运行结果如下:
SELECT SC.SNO,AVG(GRADE) AS Totalcj
FROM SC
GROUP BY SNO
HAVING (COUNT(*)>=3)
6. 查询成绩表中至少有2名学生选修课程的课程号、平均分数、选课人数。
代码及运行结果如下:
SELECT SC.CNO,AVG(GRADE) AS Totalcj,COUNT(*) AS Sc_NUM
FROM SC
GROUP BY CNO
HAVING (COUNT(*)>=2)
四、实验结果及分析
1.通过此次实验我掌握连接查询方法,多表连接时需满足FROM子句指明进行连接的表名,WHERE子句指明连接的列名及其连接条件;利用关键字JOIN进行连接,当将JOIN 关键词放于FROM子句中时,应有关键词ON与之对应,以表明连接的条件。
2.利用JOIN连接方法有INNER JOIN(内连接)、LEFT(OUTER)JOIN(左外连接)、RIGHT(OUTER)JOIN(右外连接)、FULL(OUTER)JOIN、CROSS JOIN(交叉连接)。
3.第一个和第三个实验中涉及三个表时,WHERE子句中需要有两个连接条件,此时需要用到AND。第五个和第六个实验的GOURP BY是对查询的列的内容进行分组,在查询语句与聚合函数之间用HAVING来连接。