1 NOT关键字
我们很多时候都将NOT 和LIKE 关键字组合成NOT LIKE 来使用。但忘记了NOT自己也可以单独使用, 可以用来否定随后的表达式。例:
SELECT * FROM CLPatientRecord WHERE NOT CLPatientRecord.CLPRPatientSex='1' (搜索性别不为1的病人,1为男性,2 为女生)
2 检测NULL值。
检测某一个值是为为NULL,记得用 IS NULL,不为NULL,则用IS NOT NULL.
3 LIKE和通配符
% 表示包含零个或多个字符的任意字符串
_ 表示任命单个字符
[] 指定范围或列表中的任何单个字符
[^]指定不在指定范围中的任何单个字符 例:
SELECT * FROM CLPatientRecord WHERE CLPatientRecord.CLPRPatientSex like '^[1,2]'
如果要在字符串中搜索百分号%或下划线_的字面值,即不是当作转义值来使用,那么可以使用ESCAPE运算符。 例:
SELECT ProductID,Name From Producation.Product WHERE Name LIKE '%/_%' ESCAPE '/' (搜索产品名中存在文字_值的产品)
SELECT ProductID,Name From Producation.Product WHERE Name LIKE '%\_%' ESCAPE '\'
4 在TOP 关键字中使用百分比
我们习惯了使用 TOP 10,TOP 100,确很少使用TOP 1 PERCENT,(取记录中的1%),如
SELECT TOP 1 PERCENT * FROM CLPatientRecord
5 AVG函数忽略NULL值,但COUNT函数不忽略。
6 HAVING 关键字
WHERE子句用来限定数据聚合或分组之前的返回行,而HAVING子句用来限定聚合或分组之后的数据。所以,HAVING子句中的列名必须包含在GROUP BY 中。例:
SELECT CLPRPatientSex, COUNT(*) FROM CLPatientRecord WHERE CLPatientRecord.CLPRBirthDate between '1988/01/01' and '1990/09/25' group by all CLPRPatientSex having CLPRPatientSex like '1'
7 使用DISTINCT消除重复值
SELECT DISTINCT HirDate From Employee
确认只有在真正需要或有必要时使用DISTINCT,因为它会让较大结果集的查询速度减慢。
在聚合函数中使用DISTINCT。例:
计算产品列表的平均价格,你会使用: SELECT AVG(ListPrice) FROM Product
这个查询计算的是基于所有产品的平均列表价格。如果一些产品类型比其他多很多会怎么样呢?如果只对唯一价格点的平均价格感兴趣呢。你会希望写下面的查询:
SELECT AVG( DISTINCT ListPrice) FROM Product
它先返回唯一的一组价格点,然后计算它们的平均值。
8 使用INTO 子句
SELECT...INTO TableA FROM TableB (数据库中必须存在TableB ,不存在TableA.)
SELECT * INTO TableA FROM TableB 将B表中的数据插入到A表中
SELECT * INTO TableA FROM TableB WHERE 1=0 .根据B表的结构创建A表,但没有数据,但A表不包含B表中定义的外键等。
9 EXCEPT 与 INTERSECT
在两个查询中使用EXCEPT可以返回存在于一张表中而不存在于另一张表中的行。而INTERSECT可以返回两个查询都存在的行。
如:返回A表中有的,但B表中没有的数据
SELECT ProductID,Name FROM TableA
EXCEPT
SELECT ProcudtID,Name FROM TableB
----------------------
返回A,B表中都有的数据
SELECT ProductID,Name FROM TableA
EXCEPT
SELECT ProcudtID,Name FROM TableB
使用EXCEPT,两个查询必须有相同数量的列,那些列也需要有可兼容的数据类型。
EXCEPT的威力在于它会计算所有列以检测是否存在匹配,而且它比INNER JOIN效率更高
10 WITH CUBE
WITH CUBE为结果集增加行,根据GROUP BY子句中的列来汇总总数值。
如:select CLPAIssueUserID,COUNT(*) as Num from CLPatientAccount group by CLPAIssueUserID with cube
查询结果:
如图,WITH CUBE会在查询结果的最后增加一个总的统计行,会对所有数据求和。