数据库原理实验报告(4)资料 下载本文

(g)查询数学与信息技术学院(DEPT_ID为07)或物理与电子工程学院(DEPT_ID为09)姓张的学生的信息。

select *from Student where DEPT_ID in ('07', '09') and S_Name like '张%'

(h)查询所有核心课程(课程名中带*的)的情况。

SELECT * FROM Course WHERE C_Name like '%*%'

(i)查询缺少了成绩的学生的学号和课程号,查询结果按课程号升序排列。 select S_ID,C_ID from SC where EXAM_Grade IS NULL

order by C_ID

二、二、在SQL Server查询分析器中,用T-SQL语句实现下列数据联接查询操作:

(a)查询每个学生的情况以及他(她)所选修的课程。 Select Student.S_ID, S_Name,Gender, Birth_Place,DEPT_ID, Class_ID, Course.C_name from Student join SC on Student.S_ID=SC.S_ID join Course on Course.C_ID=SC.C_ID

(b)查询学生的学号、姓名、选修的课程名及成绩。

select Student.S_ID, S_Name,C_Name, EXAM_Grade

from Student inner join SC on Student.S_ID=SC.S_ID inner join Course on SC.C_ID=Course.C_ID

(c)查询选修C语言程序设计且成绩为85分以上的学生学号、姓名及成绩。

Select Student.S_ID,S_NAME,EXAM_Grade from Student,SC,Course

where Student.S_ID=SC.S_ID and Course.C_ID=SC.C_ID and C_Name='C语言程序设 计' and EXAM_Grade>=85

(d)查询和学生柏文楠是同一个民族的学生(用自身联接实现)。

SELECT S_Name from Student

where Nationality=(select Nationality from Student where S_Name='柏文楠')

(e)分别用等值联接和内联接查询有授课记录的老师的姓名。 1. 等值联接

select DISTINCT T_Name from

Teacher inner join TC on Teacher.T_ID=TC.T_ID

2.内联接

select DISTINCT T_Name from Teacher,TC where Teacher.T_ID=TC.T_ID

(f)用外联接查询所有老师的授课情况,输出老师的工号、姓名、职称、院系、担任的课程号和授课的学期,结果按院系和职称升序排列。如果该老师没有授课历史,在课程号和授课的学期中显示空值。

select Teacher.T_ID,Teacher.T_Name,Teacher.Academic_Title,Department. DEPT_Name,TC.C_ID,TC.Semester

from Teacher Right join TC on Teacher.T_ID=TC.T_ID join Department ON Department.DEPT_ID=Teacher.DEPT_ID

order by Department.DEPT_Name , Teacher.Academic_Title

4.实验思考:

①联接查询中,输出列名时何时可以忽略列名前的表名,何时不能? 表名.列名

若选择的字段名在各个表中是唯一的,则可以省略字段名前的表名。 ②联接查询中,INNER JOIN、 LEFT OUTER JOIN 、RIGHT OUTER JOIN、 FULL OUTER JOIN 的结果各有什么不同?

? INNER JOIN :

Inner join 产生的结果集中,是A和B的交集

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

? LEFT OUTER JOIN:

(1) Left outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。