`
bianku
  • 浏览: 72361 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

葵花宝典之SQL篇

    博客分类:
  • SQL
阅读更多

葵花宝典之SQL

 

                         By --- 一名

 

前言

刚放假,电脑出了毛病,重装系统也就罢了,所有的资料全部丢失,编程的环境没了,什么都没了,很是伤心,不得已,更是增加了电脑联网的决心,话说申请了宽带还要2-3天才能装上。在次期间JSP是不能搞了,于是决定把SQL再看一边,于是就有了此宝典的由来。

 

(话说欲炼此功必先自宫,如果你非要那样做,我也不会阻拦。但是找个安静的环境还是必要的,我喜欢在看书的时候手机关机。)

第一招:数据的检索

1SELECT * FROM Table_name

2、带别名的检索

SELECT FNumber AS ,FName AS 姓名,FAge AS 年龄,FSalary AS 工资 FROM

T_Employee AS可以省略)

 

3SELECT * FROM T_Employee

WHERE FSalary<5000 OR FAge>25

4、数据数据汇总:

   MAX 计算字段最大值

MIN 计算字段最小值

AVG 计算字段平均值

SUM 计算字段合计值

COUNT 统计数据条数

1查询年龄大于25岁的员工的最高工资:

       SELECT MAX(FSalary) FROM T_Employee

WHERE FAge>25

结果:6200

2统计一下工资大于3800 元的员工的平均年龄:

SELECT AVG(FAge) FROM T_Employee

WHERE FSalary>3800

结果:25

3公司每个月应支出工资总额:

SELECT SUM(FSalary) FROM T_Employee

结果:34302.04

4统计公司的最低工资和最高工资:

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

                                 结果:1200.00 8300.00

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

                                 结果:8 8

           思考:COUNT(*),COUNT(FNumber) 是否等价?

     T_Employee表中插入一条数据:

         INSERT INTO T_Employee(FNumber,FAge,FSalary) VALUES('IT002',27,2800)

    很显然Fname为空,执行下面SQL语句:

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

                                 结果:9 9 8

        很显然COUNT(Fname)是统计Fname不为空的记录总条数

5、排序

1按照年龄从大到小排序

SELECT * FROM T_Employee

ORDER BY FAge ASC

ASC代表升序、DESC 代表降序

2按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序

SELECT * FROM T_Employee

ORDER BY FAge DESC,FSalary DESC

数据库系统首先按照第一个排序规则进行排序;如果按照第一个排序规则无法区分两条记录的顺序,则按照第二个排序规则进行排序;如果按照第二个排序规则无法区分两条记录的顺序,则按照第三个排序规则进行排序;……

3WHERE语句连用

SELECT * FROM T_Employee

WHERE FAge>23

ORDER BY FAge DESC,FSalary DESC

     注意WHEREORDER BY   的顺序是不可以颠倒的

第二招:高级数据过滤

 6通配符过滤    使用关键字 LIKE

          1单字符匹配_ 

SELECT * FROM T_Employee

WHERE FName LIKE '_erry'

 

          2多字符匹配 %

              SELECT * FROM T_Employee

WHERE FName LIKE 'T%'

 

          3集合匹配“[]

              SELECT * FROM T_Employee

WHERE FName LIKE '[SJ]%'

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

SELECT * FROM T_Employee

WHERE FName LIKE '[^SJ]%'

7空值检测 

             1  SELECT * FROM T_Employee

WHERE FNAME=null

                     执行这个语句后没有任何结果!

原因:要使用IS NULL关键字

SELECT * FROM T_Employee

WHERE FNAME IS NULL

             2  IS NULL/IS NOT NULL可以和其他的过滤条件一起使用

                SELECT * FROM T_Employee

WHERE FNAME IS NOT NULL AND FSalary <5000

8反义运算符

                !”取反 如:

            !=”表示“不等于”

!<”表示“不小于”

 !>”表示“不大于”

1检索所有年龄不等于22岁并且工资不小于2000

SELECT * FROM T_Employee

WHERE FAge!=22 AND FSALARY!<2000

           然而!”运算符的方式由于只能运行在MSSQLServerDB2两种数据库系统上

           如果要增加数据库的可移植性,可以使用NOT来表示“非”

9多值检测

              1 公司要为年龄为23岁、25岁和28岁的员工发福利,请将他们的年龄、工号和姓名检索出来

              SELECT FAge,FNumber,FName FROM T_Employee

WHERE FAge=23 OR FAge=25 OR FAge=28

OR   SELECT FAge,FNumber,FName FROM T_Employee

WHERE FAge IN (23,25,28)

10范围值检测

               1SELECT * FROM T_Employee

WHERE FAGE>=23 AND FAGE <=27

       OR      SELECT * FROM T_Employee

WHERE FAGE BETWEEN 23 AND 27

2检索所有工资介于2000元到3000元之间以及5000元到8000元的员工信息

SELECT * FROM T_Employee

WHERE (FSalary BETWEEN 2000 AND 3000)

OR (FSalary BETWEEN 5000 AND 8000)

注意:BETTWEEN AND是闭区间

 

第三招:数据分组

11数据分组入门

             SQL语句中使用GROUP BY子句进行分组,使用方式为“GROUP BY 分组字段”

               1SELECT FAge FROM T_Employee

GROUP BY FAge

 

2SELECT FAge,FSalary FROM T_Employee

GROUP BY FAge   这句是错误的!

 

SELECT FAge,AVG(FSalary) FROM T_Employee

GROUP BY FAge    这句是正确的!

 

3SELECT FSubCompany,FDepartment FROM T_Employee

GROUP BY FSubCompany,FDepartment “组中组的实现”

 

4查看每个年龄段的员工的人数

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee

GROUP BY FAge

                             结果:22 1

23 2

25 2

27 1

28 3

font-family: Times New

3
1
分享到:
评论
1 楼 taote 2009-07-11  
学习温故了一番,TK

相关推荐

Global site tag (gtag.js) - Google Analytics