前言
刚放假,电脑出了毛病,重装系统也就罢了,所有的资料全部丢失,编程的环境没了,什么都没了,很是伤心,不得已,更是增加了电脑联网的决心,话说申请了宽带还要2-3天才能装上。在次期间JSP是不能搞了,于是决定把SQL再看一边,于是就有了此宝典的由来。
(话说欲炼此功必先自宫,如果你非要那样做,我也不会阻拦。但是找个安静的环境还是必要的,我喜欢在看书的时候手机关机。)
第一招:数据的检索:
1、SELECT * FROM Table_name
2、带别名的检索
SELECT FNumber AS 工号,FName AS 姓名,FAge AS 年龄,FSalary AS 工资 FROM
T_Employee (AS可以省略)
3、SELECT * 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
数据库系统首先按照第一个排序规则进行排序;如果按照第一个排序规则无法区分两条记录的顺序,则按照第二个排序规则进行排序;如果按照第二个排序规则无法区分两条记录的顺序,则按照第三个排序规则进行排序;……
3与WHERE语句连用
SELECT * FROM T_Employee
WHERE FAge>23
ORDER BY FAge DESC,FSalary DESC
注意:WHERE和ORDER 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
然而“!”运算符的方式由于只能运行在MSSQLServer和DB2两种数据库系统上
如果要增加数据库的可移植性,可以使用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是闭区间