编织梦想

书不记,熟读可记;义不精,细思可精;惟有志不立,直是无著立处.

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

阅读更多
个人分类: SQL Server
想对作者说点什么? 我来说一句

sqlassist_setup2(SQL助手v4.18).rar

2010年01月19日 4.12MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭