SQL SERVER设计与高级查询
第四章 高级查询
【基础回顾】
内联接查询
在FROM子句中使用INNER JOIN...ON子句实现
SELECT C.IP,U.UserName,U.Dept
FROM ComputerList AS C INNER JOIN UserList AS U ON(C.ID=U.ID)
WHERE U.UserName!=''
左外联接Left Outer Join
SELECT C.IP AS IP地址,U.UserName AS 用户名,U.Dept as 部门
FROM ComputerList AS C
LEFT OUTER JOIN UserList AS U ON C.ID=U.ID
右外联结……
【高级查询】
--简单子句格式
select * from TableName where 字段> (子查询)
--例句:查询比某同学年龄大的学员信息
select * from stuInfo
where stuAge > (select stuAge from stuInfo where stuName = '梅超风')
--表连接都可以用子查询替换,反之不一定
--子查询适合做查询筛选条件,表连接适合做多表查询
-- IN 和NOT IN 子查询
--IN 后面的子查询可以返回多条记录
--例句:查询参加过考试学院信息/ 未参加考试的学员信息使用NOT IN
select * from stuInfo
where stuNo in (select stuNo from stuMarks)
in和比较运算符区别是:运算结果是否为一
--EXISTS 和NOT EXISTS 子查询
--一般用于IF语句的存在检测,也可以作为WHERE语句的子查询
--子句查询结果(结果集)非空,则EXISTS(子查询)返回true,否则返回false
if exists (子查询)
语句
--例句:如果笔试成绩有人达到分,每人+2分,否则,每人+5分
if exists(select writtenExam from stuMarks where writtenEam >80)
begin
print '本班笔试成绩有人高于分,每人加分,加分后的成绩是:'
update stuMarks set writtenExam = writtenExam +2
select * from stuMarks
end
else
begin
print '本班笔试成绩没有人高于分,每人加分,加分后的成绩是:'
select * from stuMarks
end
(如果有不对的或需要补充的地方,还请老师和同学们帮忙指出来,谢谢!)
2010/3/14 整理