数据检索

一、select 基本语法:

简单的数据检索:select * from 表名;

1)、检索出所需要的列:select 列名1,列名2,列名3.。。。 from 表名;

2)、给列去别名:1select 列名1 as 别名,列名2 as 别名,列名 as 别名3.。。。 from 表名;

 2、简写可以省去asselect 列名别名1,列名别名2.。。 from 表名 ;

3)、按条件过滤:select * from 表名 where 过滤条件;

4)、数据汇总: SQL 中提供了聚合函数来完成计算统计结果集条数、 某个字段的最大值、 某个字段的最小值、 某个字段的平均值以及某个字段的合计值等数据统计的功能,SQL 标准中规定了下面几种聚合函数:

函数名称

说明

max

计算字段最大值

min

计算字段最小值

avg

计算字段平均值

sum

计算字段合计值

count

统计数据条数

这几个聚合函数都有一个参数,这个参数表示要统计的字段名,比如要统计工资总额,那

么就需要把 FSalary 做为 SUM 函数的参数。

SELECT MAX(FSalary) FROM T_Employee WHERE FAge>25

还可以多次使用聚合函数,比如下面的 SQL 用来统计公司的最低工资和最高工资:

SELECT MIN(FSalary),MAX(FSalary) FROM  T_Employee

介绍的函数就是统计记录数量的 COUNT,这个函数有一点特别,因为它的即可以

像其他聚合函数一样使用字段名做参数, 也可以使用星号 “*” 做为参数。

SELECT COUNT(*),COUNT(FNumber) FROM  T_Employee

COUNT(*)统计的是结果集的总条数,而COUNT(FName)统计的则是除了结果集中 FName 不为空值(也就是不等于 NULL)的记录的总条数。

5)、排序:select的语句允许使用order by 来排序.order by位于select语句末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序是升序ASC(从小到大)还是降序desc(从大到校)。

ORDER  BY 子句完全可以与 WHERE 子句一起使用,唯一需要注意的就是 ORDER  BY 子句要放到 WHERE 子句之后,不能颠倒它们的顺序。

二、高级数据过滤::

1)、通配符过滤:SQL 中的通配符过滤使用 LIKE 关键字,可以像使用 ORAND 等操符一样使用它,它是一个二元操作符, 左表达式为待匹配的字段, 而右表达式为待匹配的通配符表达式。

1、单字符匹配:进行单字符匹配的通配符为半角下划线 “_” , 它匹配单个出现的字符。

SELECT* FROMT_Employee WHEREFName LIKE '_erry'

2、多字符匹配:进行多字符匹配的通配符为半角百分号“%” ,它匹配任意次数(零或多个)出现的任意字符。

SELECT * FROMT_Employee WHERE FName  LIKE 'T%'

3、集合匹配:进行集合匹配的通配符是“[]”,中括号中包含一个字符集中任意一个字符相匹配的的字符。

Select * from T_Employee where FName like ‘[SJ]%’;

还可以使用否定符“^”来对集合取相反,它匹配不予字符集中任意一个字符集中任意一个字符相匹配的字符。

SELECT * FROMT_Employee WHERE FName LIKE  '[^SJ]%'

执行完毕我们就能在输出结果中看到下面的执行结果:

FNumber  FName  F Age  FSalary 

DEV001  T om  25  8300.00 

HR002  T ina  25  5200.36 

SALES002  Kerry  28  6200.00

集合匹配只在 MSSQLServer 上提供支持,不过在其他数据库中我们可以通过变通手段

来实现相同的效果。

SELECT* FROMT_Employee

WHEREFName LIKE 'S%' ORFName LIKE 'J%' 

而下面的 SQL 可以实现和本节第二个例子相同的效果:

SELECT* FROMT_Employee

WHERE NOT(FName LIKE 'S%') AND NOT(FName LIKE 'J%')

2)、空值检测:使用IS NULL关键字,使用方法为“待检测字段名IS  NULL”, 比如要查询所有姓名未知的员工信息,则运行下面的SQL语句:

SELECT * FROM T_Employee  WHERE FNAME  IS NULL;

(3)、反义运算符:”=”,’<’,”>”,等都是进行数据值判断的,有时候需要使用这些运算符的反义。MSSqlServerDB2提供了“!”运算符进行对运算符的反义,也就是“!=”表示不等于、“!<”表示不小于、“!>”表示不大于。

不过这个运算符只在MSSQLSEVERDB22中数据库上提供支持,如果其他数据库上则可以有变通的方式实现,最常用的有2中变通方式:一种是用同意运算符、一种用NOT

a)否定运算符都可以用同意运算符来表示,例如:不大于可以用小于等于来代替、不小于可以用大于等于来代替。在sql中提供里一种通用的不等于运算符“<>”,这样在其它数据不等于、不大于、不小于可以分别表示为“<>”、“<=”、“>=”。

b)NOT运算符是用来表示将一个表达式的值去反,也就是将表达式结果为真的值变为假,将值为假的表达式结果变为真,使用非常简单“NOT(表达式)”。

(4)、多值检测:多值检测有orin2中,使用方法如下:

例如:检查出232427年龄的人员信息;

Select * form Employee where Age=23 or  Age=24 or  Age=27;

Select * form Employee where Age in(23.24,27);

5)范围值检测:范围值检测可以使用大于、小于、大于等于、小于等于、不小于、不大于来实现,不过SQL提供里一种专门的语法“BETWEEN AND, between and是一个闭区间它包括边界值如:Between 1 and 4就包括14;

数据库系统对Between  And进行了查询优化,使用它进行取值范围检测将会比其它方式性能更好。

三、数据分组:

(1)、SQL语句中是用Group By进行分组。分组语句必须和聚合函数一起使用,Group by字句负责将数据分成逻辑组,而聚合函数则对每组进行计算。     Group By也可以单独使用例如:

Select * from Employee group by age;

需要注意的是GROUP BY子句的位置,GROUP BY子句必须放到SELECT语句的之后,如果

SELECT语句有WHERE子句,则GROUP BY子句必须放到WHERE语句的之后。

GROUP  BY子句中可以指定多个列,只需要将多个列的列名用逗号隔开即可。

(2)数据分组与聚合函数:到目前为止聚合函数都是对普通结果集进行统计。

(3)HAVING语句:有时候需要对部分数据进行过滤,比如:只检索人数多于1个的年龄段,有的开发人员是使用如下:

Select FAge,COUNT(*) as CountofThisAge from Employee Group by  FAge Where Count(*)>1;

上面的语法书错误的正确的应该是:

Select *  FAge,Count(*) as CountofthisAge from Emplyee Group by FAge Having Count(*)>1;

Having语句能够使用的语法和where 几乎是一样的,不过使用where的是时候group by字句要位于where 字句之后,而使用Having字句的时候Group by要位于Having之前。

Having语句不能包含未分组的列名;

(4)限制结果集:在进行数据检索的时候有时候需要只检索结果集的部分行,比如:前3条数据,第3条数据到地6条数据;虽然主流数据库都提供这种功能,但是无论是语法还是使用方式都很大的差异。下面是MSSQLSERVER 2005的实例:

TOP关键字用来返回结果集中的钱N条数据,语法为:select top 条数 from 表名;

ROW_NUMBER()函数可以计算每一行数据在结果集中的行号:

Select ROW_NUMBER() OVER(ORDER BY FAge),FNumber,FName,FAge form 表名;

五、抑制数据库重复:DISTINCT关键字是用来进行重复数据的抑制的最简单的功能,而且所有的数据库都支持DISTINCT,DISTINCT使用非常简单只需要在select 后增加DISTINCT即可。

DISTINCT是对整个结果集进行 数据重复抑制的,不是简单的针对某个列。

六、计算字段:(1)、常量字段:比如:SELECT'CowNew集团',918000000,FName,F Age,FSubCompany FROM T_Employee这里的'CowNew集团'918000000并不是一个实际的存在的列,但是在查询出来的数据中它们看起来是一个实际存在的字段, 这样的字段被称为 常量字段” (也称为 常量值” ) 

(2)、字段间计算:比如:SELECT FNumber , FName,FAge * FSalary  FROM T_Employee;

工资指数的计算公式为年龄与工资的乘积,这就需要计算将F AgeFSalary的乘积做为一个工资指数列体现到检索结果中.

(3)、数据处理函数:主流数据库提供了计算字符串长度的函数,MSSQLSERVER中这个函数式为LEN。这个函数接受一个字符串类型的字段值做为参数,返回值为字符串的长度。

Select  FName,LEN(FName) form Employee where FName is not null;

(4)、字符串的拼接:MSSQLSERVER中使用”+”进行字符串的拼接。

(8)、简单的结果联合:UNION运算符要放置在两个查询语句之间。联合结果集的基本原则: 一是每个结果集必须有相同的列数; 二是每个结果集的列必须类型相容。

(9) UNION  ALL:默认情况下,UNION运算符合并了两个查询结果集,其中完全重复的数据行被合并为了一条。如果需要在联合结果集中返回所有的记录而不管它们是否唯一, 则需要在UNION运算符后使用ALL操作符,如:

SELECTFName,FAge FROMT_Employee 

UNION ALL

SELECTFName,FAge FROMT_TempEmployee ;

 

posted @ 2013-10-17 10:16  Andyabc  阅读(665)  评论(0编辑  收藏  举报