T-SQL高级查询
2010-04-29 09:53
399 查看
一、子查詢:
子查询在WHERE语句中的一般用法:
SELECT … FROM 表1 WHERE 字段1 >(子查询)
外面的查询称为父查询,括号中嵌入的查询称为子查询
UPDATE、INSERT、DELETE一起使用,语法类似于SELECT语句
将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个
例如:
SELECT * FROM stuInfo
WHERE stuAge>( SELECT stuAge FROM stuInfo where stuName='李斯文')
GO
二、使用子查询替换表连接
一般来说,表连接都可以用子查询替换,但有的子查询却不能用表连接替换
子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据
表连接更适合于查看多表的数据
例如:
SELECT stuName FROM stuInfo
WHERE stuNo=(SELECT stuNo FROM stuMarks WHERE writtenExam=60)
GO
三、IN子查询
IN后面的子查询可以返回多条记录,常用IN替换等于(=)的比较子查询
例如:
SELECT stuName FROM stuInfo
WHERE stuNo IN
(SELECT stuNo FROM stuMarks WHERE writtenExam=60)
GO
四、EXISTS子查询
如果子查询的结果非空,即记录条数1条以上,则EXISTS (子查询)将返回真(true),否则返回假(false)
EXISTS也可以作为WHERE 语句的子查询,但一般都能用IN子查询替换
EXISTS子查询的语法:
IF EXISTS (子查询)
语句
例如:
/*--采用EXISTS子查询,进行酌情加分--*/
IF EXISTS (SELECT * FROM stuMarks WHERE writtenExam>80)
BEGIN
print '本班有人笔试成绩高于分,每人加分,加分后的成绩为:'
UPDATE stuMarks SET writtenExam=writtenExam+2
SELECT * FROM stumarks
END
ELSE
BEGIN
print '本班无人笔试成绩高于分,每人可以加分,加分后的成绩:'
UPDATE stuMarks SET writtenExam=writtenExam+5
SELECT * FROM stumarks
END
GO
相反:NOT EXISTS子查询
例如:
IF NOT EXISTS (SELECT * FROM stuMarks WHERE
writtenExam>60 AND labExam>60)
BEGIN
print '本班无人通过考试,试题偏难,每人加分,加分后的成绩为:'
UPDATE stuMarks
SET writtenExam=writtenExam+3,labExam=labExam+3
SELECT * FROM stuMarks
END
ELSE
BEGIN
print '本班考试成绩一般,每人只加分,加分后的成绩为:'
UPDATE stuMarks
SET writtenExam=writtenExam+1,labExam=labExam+1
SELECT * FROM stuMarks
END
GO
子查询在WHERE语句中的一般用法:
SELECT … FROM 表1 WHERE 字段1 >(子查询)
外面的查询称为父查询,括号中嵌入的查询称为子查询
UPDATE、INSERT、DELETE一起使用,语法类似于SELECT语句
将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个
例如:
SELECT * FROM stuInfo
WHERE stuAge>( SELECT stuAge FROM stuInfo where stuName='李斯文')
GO
二、使用子查询替换表连接
一般来说,表连接都可以用子查询替换,但有的子查询却不能用表连接替换
子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据
表连接更适合于查看多表的数据
例如:
SELECT stuName FROM stuInfo
WHERE stuNo=(SELECT stuNo FROM stuMarks WHERE writtenExam=60)
GO
三、IN子查询
IN后面的子查询可以返回多条记录,常用IN替换等于(=)的比较子查询
例如:
SELECT stuName FROM stuInfo
WHERE stuNo IN
(SELECT stuNo FROM stuMarks WHERE writtenExam=60)
GO
四、EXISTS子查询
如果子查询的结果非空,即记录条数1条以上,则EXISTS (子查询)将返回真(true),否则返回假(false)
EXISTS也可以作为WHERE 语句的子查询,但一般都能用IN子查询替换
EXISTS子查询的语法:
IF EXISTS (子查询)
语句
例如:
/*--采用EXISTS子查询,进行酌情加分--*/
IF EXISTS (SELECT * FROM stuMarks WHERE writtenExam>80)
BEGIN
print '本班有人笔试成绩高于分,每人加分,加分后的成绩为:'
UPDATE stuMarks SET writtenExam=writtenExam+2
SELECT * FROM stumarks
END
ELSE
BEGIN
print '本班无人笔试成绩高于分,每人可以加分,加分后的成绩:'
UPDATE stuMarks SET writtenExam=writtenExam+5
SELECT * FROM stumarks
END
GO
相反:NOT EXISTS子查询
例如:
IF NOT EXISTS (SELECT * FROM stuMarks WHERE
writtenExam>60 AND labExam>60)
BEGIN
print '本班无人通过考试,试题偏难,每人加分,加分后的成绩为:'
UPDATE stuMarks
SET writtenExam=writtenExam+3,labExam=labExam+3
SELECT * FROM stuMarks
END
ELSE
BEGIN
print '本班考试成绩一般,每人只加分,加分后的成绩为:'
UPDATE stuMarks
SET writtenExam=writtenExam+1,labExam=labExam+1
SELECT * FROM stuMarks
END
GO
相关文章推荐
- SQL高级查询相关
- 笔记:Oracle SQL 高级查询简介 (1) case、层次化、扩展group by
- sql server 常用高级查询sql
- SQL Server T-SQL高级查询
- 面试遇到地一个Sql高级查询疑难?
- sql高级语句查询
- 理解T-SQL:高级查询
- SQL高级查询技巧2
- SQL学习之高级查询
- SQL 高级查询
- SQL Server T-SQL高级查询
- sql高级查询
- 2017-3-10 SQL server T-sql语句 高级查询
- SQL Server T-SQL高级查询
- SQL高级查询的练习题
- SQL高级查询技巧
- 76.Oracle数据库SQL开发之 高级查询——使用PIVOT
- Oracle Database 11g SQL 开发指南学习笔记:高级查询
- SQL Server Transact-SQL高级查询
- SQL Server SQL高级查询语句小结