现在的位置: 首页 > 综合 > 正文

8月17

2014年01月29日 ⁄ 综合 ⁄ 共 3332字 ⁄ 字号 评论关闭

 

create table T_Emplopyee
(
 FNumber varchar(20),
 FName varchar(20),
 FAge int ,
 FSalary decimal(10,2),
 primary key(FNumber)
);

insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('DEV001','Tom',25,8300);
insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('DEV002','Jerry',28,2300.80);
insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('SALE001','John',23,5000);
insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('SALE002','Kerry',28,6200);
insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('SALE003','Tina',28,6200);
insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('HR001','Stone',22,1200);
insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('HR002','Tom',25,5200);
insert into T_Emplopyee(FNumber,FName,FAge,FSalary) values ('IT001','Smith',28,3900);

/*select基本用法:(1)select是实现数据检索的SQL语句*/

select * from T_Emplopyee; //简单的数据检索

select FNumber from T_Emplopyee; //检索某一列的数据

select FNumber,FAge from T_Emplopyee; //检索多列的数据

/*列别名:别名的定义格式为:“列名 AS 别名”*/

//对每一列进行别名定义
select FNumber as Number, FName as Name,FAge as Age, FSalary as Salary from T_Emplopyee;

//定义别名的时候“AS” 不是必须的,可以省略,如果数据库支持中文,别名还可以写成汉字
select FNumber Number, FName 名字, FAge Age, FSalary 薪水 from T_Emplopyee;

/*按条件过滤用:where*/
select FName from T_Emplopyee where FSalary<5000;
select * from T_Emplopyee where FSalary<5000 or FAge>25;

/*数据汇总:聚合函数(1)MAX:计算字段的最大值(2)MIN:计算字段最小值
(3):AVG:计算字段平均值(4):SUM:计算字段合计值(5):COUNT:统计数据条数
这些聚合函数的参数为要统计的字段名(即列名)*/

select max(FSalary) from T_Emplopyee where FAge>25;

//可以为聚合函数的结果指定一个别名
select max(FSalary) as Max_Salary from T_Emplopyee where FAge>25;

select avg(FAge) from T_Emplopyee where FSalary>3800;

//多次使用聚合函数
select min(FSalary), max(FSalary) from T_Emplopyee;

select count(*), count(FNumber) from T_Emplopyee;
/*count(*)统计的是结果集的总条数,count(列名)统计的是结果集中该列不为空的记录的条数*/

/*排序*/
/*select语句允许使用order by子句执行结果集的排序方式,order by 放在where语句后面,
其中ASC代表升序(默认),DESC代表降序*/

select * from T_Emplopyee order by FAge asc;
select * from T_Emplopyee order by FAge desc;
//对多个列进行排序
select * from T_Emplopyee order by FAge desc, FSalary desc;


/*高级数据过滤*/

/*通配符过滤*/
/*单字符过滤*,'_'匹配单个字符*/
select * from T_Emplopyee where FName like '_erry';
/*多字符匹配,'%'匹配任意次数(零或多个)出现的任意字符*/
select * from T_Emplopyee where FName like 'T%';

select * from T_Emplopyee where FName like '%n_';

/*集合匹配:集合匹配只在SQL Sever上提供支持,在MySql,Oracle,DB2上不支持,必须采用变通的手段来实现*/
/*进行集合匹配的通配符为“[]”,方括号中包含一个字符集,它匹配与字符集中任意一个字符相匹配的字符*/
/*比如"[bt]%"匹配第一个字符为b或者为t、长度不限的字符串*/
select * from T_Emplopyee where FName like '[SJ]%';

/*上面等价于*/
select * from T_Emplopyee where FName like 'S%'or FName like 'J%';

/*还可以使用否定符"^"来对集合求反,它匹配不与字符集中任意一个字符相匹配的字符,
比如比如"[^bt]%"匹配第一个字符不为b或者为t、长度不限的字符串*/
select * from T_Emplopyee where FName like '[^SJ]%';

/*上面等价于*/
select * from T_Emplopyee where not (FName like 'S%') and not(FName like 'J%');

/*空值检测*/
/*检测字段为空:is null*/
select * from T_Emplopyee where FName is null;

/*检测字段非空:is not null*/
select * from T_Emplopyee where FName is not null;

/*is null和is not null还可以和其它过滤条件一起使用*/
select * from T_Emplopyee where FName is not null and FSalary<5000;

/*反义运算符*/
select * from T_Emplopyee where FAge<>22 and FSalary>=2000;

/*上面等价于*/
select * from T_Emplopyee where not(FAge=22) and not(FSalary<2000);
/*"!"运算符的方式只能用在MS SQL Server和DB2上,推荐使用NOT运算符的方式来表示“非”的语意*/

/*多值检测*/
/*使用or*/
select FAge,FNumber,FName from T_Emplopyee where FAge=23 or FAge=25 or FAge=28;
/*使用in,进行多个离散值的匹配*/
select FAge,FNumber,FName from T_Emplopyee where FAge in (23,25,28);

/*范围值检测*/
select * from T_Emplopyee where FAge between 23 and 27;

/*还可以使用between and进行多个不连续范围值的检测*/
select * from T_Emplopyee where (FSalary between 2000 and 3000)
or (FSalary between 5000 and 9000);
/*数据库对between and进行查询优化,比其它方式好,应优先使用*/

 

 

抱歉!评论已关闭.