(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值取代。