容易忽略的SQL语句

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会在查询结果的最后增加一个总的统计行,会对所有数据求和。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值