SQL Server高级查询
简介
关于数据库,我们经常会听说“增查删改”之类的词语,听起来很简单,但是如果想要准确的获取到需要的数据的话,还是要花点功夫的。下面由我来和大家谈谈高级查询的用法以及和普通查询的区别
高级查询
子查询
语法: select ...列名... from 表1 where 列1 (逻辑运算符,大于'>',等于'='...) ( select ...列名... from 表2 where 列2 (逻辑运算符,大于'>',等于'='...) 1)
简化: select ... from 表1 where 列1 > (子查询)
描述: 1.子查询就是一个查询语句又嵌套了一个查询语句。比如你想要以一列中筛选出的数据来作为条件去查询另一列中的数据。其中标红的部分称为子查询,而蓝色部分就是父查询。这只是一种称呼。
2.子查询还可以用于不同的表间查询,就像是表连接查询。以A表筛选出来的数据作为条件去查询B表中的数据。想必大家都了解表连接查询,其中最重要的一点就是表间要有主外键引用关系,所以这
也成为了子查询和表连接查询的不同之处。子查询在表连接查询的基础上,还可以用于没有表间连接的情况。所以子查询比表连接查询更为强大,可用用于多种场合。
3.子查询通常用于查询的筛选条件,就是where后面的条件。而表连接查询常用于查看多表的数据,就是只做查看数据操作。
4.需要确保子查询语句不会返回多个值,可以用逻辑运算符。否则会报错。但也有可以包含多个值的子查询,后文会讲到。
IN子查询和NOT IN子查询
IN子查询语法:select ...列名... from 表1 where 列1 IN ( select ...列名... from 表2 where 列2 (逻辑运算符,大于'>',等于'='...) 1)
简化: select ... from 表1 where 列1 IN (子查询)
NOT IN子查询语法:select ...列名... from 表1 where 列1 NOT IN ( select ...列名... from 表2 where 列2 (逻辑运算符,大于'>',等于'='...) 1)
简化: select ... from 表1 where 列1 NOT IN (子查询)
描述: 1.可以明显的看出,(IN子查询和NOT IN子查询)和前文的子查询语法上的区别只是where后面的逻辑运算符变成了IN和NOT IN。其他方面没有任何区别。
2.(IN子查询和NOT IN子查询)和前文的子查询性质基本上一样,只是IN子查询中的子查询语句可以返回多个值的,IN子查询会将这些值都作为条件来判断。而NOT IN则是取反。是不是很像普通查询
中的 [] 和 between 1 and 10 呢?条件都是一个范围的值。(这里需要注意,只能是一列的多个值。)
EXISTS和NOT EXISTS子查询
语法: IF EXISTS(子查询语句)
...语句...
描述: EXISTS一般用于if语句的条件检测。如果子查询的结果非空,EXISTS就返回true,执行if结构内的语句,否则返回false,不执行if结构内的语句。而NOT EXISTS则是将返回的结果取反。
总结
可以用到子查询的地方非常多。子查询语句可以嵌套在SQL语句中任何表达式出现的位置。SELECT语句、from子句、where子句、Group by子句、having子句......,还可以嵌套多层...
虽然子查询很强大,但使用哪种查询并不重要,重要的是我们需要哪种查询。
附加代码
ps:如若对此文有疑义,欢迎提出。