您的位置:首页 > 职场人生

黑马程序员sql学习002 sql语句强化

2012-04-24 12:13 239 查看
---------------------- android培训java培训、期待与您交流! ---------------------- -

数据插入

insert into users (id,name) values(2,'jainfa');

可以给字段设置默认值 如果给GUid设置了默认值 newid()就会自动添加//注意:GUid类型一般很少自动增加

数据更新

update users set name='a fa';//将所有的name设置成了 a fa 这个值了 //注意一般都有where 条件配合使用

update users set name='liu' where id =1

update users set id =id+2,nane=n'剪发'//注意:在属性中为中文是这个字段前要加上N 要不然会出错; 结果一条语句 中修改多个字段

**where中可以使用的其他逻辑运算符 or and not < > >= <= !=(<>)等**

删除数据

delete from users 删除表中所以数据 ,清空

drop table users 删除了这个表

也可以加where条件

delete from users where id>3

修改数据//alter table 《--用于在已有表中添加、修改、删除列--》

alter table users add F_dalary int;//添加列

alter table users add F_nikoname nvarchar(8)

alter table users dorp column F_nikoname;//删除表中的列

alter table users alter column money;//修改表中数据类型

数据检索

select top (2) * from users where id >5

select id 编号 ,name 姓名 fron user where id>7

select 1+2 可以使用与表无关数据

select getdate()

聚合函数

count(*)行总数 max(列名) min(列名) avg(列名) sum(列名)

***不能出现在where子句中的*** 可以使用having 要放在group by 之后

数据排序

order by 子句位于select语句的尾部,可以指定按照一个列或者多个列进行排序,

where 一定要放在order by 之前

asc表示升序//默认为升序 一般不要省略

desc降序

select * from users order by id desc,name asc;//order by 可以用“,”隔开排序条件 先执行前面的语句 后执行后面的

通配符过滤 模糊匹配

1、通配符过滤使用 like

2、单字符匹配的通配符为半角下划线"_"匹配单个出现的字符

例如;意任意开头姓名中剩余部分有'fa'的

select * from users where name like '_fa';

3、多字符匹配为半角半分号 % ,匹配任意次数出现的任意字符(0或者很多)

例如'a%'匹配以a开头的任意长度的字符串; '%jian%'检索了任意其中包含了jian这个字符串的字符串

select * from users where name like '%jian%';

空值处理

数据库中,如果一个列没有指定值 那么这个值就是null

区别 null

c#中 表示不指向任何东西 而sql中表示 "不知道" 的意思 例如 select null+1 表示值为null

sql中使用 is null ,is not null 来判断空值

select * from name is null

select * from name is not null

多值匹配

in和 between and

select * from users where id in(1,3,4)或者 select * from users where id=1 or id=3 or id=4

select * from users where id between 2 and 5 表示 (id>=2 and id <=5)

数据分组

group by //没有出现在group by 子句中的列是不能放到select语句中后的列名列表中的(聚合函数除外)

select name count(*) 相同年龄个数 from

6句中的*** 可以使用having 要放在group by 之后***

select name count(*) from users group by name having count(*)>1

****having 不能替代where 作用不一样,having是针对“分组以后数据”进行过滤的 要是和group by 一起用 那么能用的列和select 中的列是一样的***

限制结果集行数

top n

select top 10 * from users order by name asc//排行榜前10名信息

问题:跟随业务量的增加今后查询全部肯定会很慢 这样筛选出来前几名的就不用在去查询后面的信息了

例题:检索工资从高到底排序 从第6名开始一共取出3个人的信息

select top 3 * from users where

id not in (select top 5 * from users order by F_salary desc)

order by F_salary asc

或者

select top count(*)-5 into @tem from users order by asc ;

sleect top 3 * from @tem order by desc

一般不用子查询 很浪费内存和存储器的时间周期

!!!!!!

sql2005中新增的功能 row_number()函数 经常用于分页

!!!!!!

去掉表中重复数据

select F_nikoname from users//有很多重复昵称的名字

select distinct F_nikoname from users

《----distinct 对整个结果集进行数据重复处理的(你的查询中完全重复的),而不是针对每一个列---》

select distinct F_nikoname , name from users//这样是错误的不能去掉针对某一行的数据

联合结果集

UNION select //原则:每个结果集必须有相同的列数,每个结果集的列必须类型相同

UNION 把两个查询结果合为一个查询结果,这两个查询中列的个数和类型必须相同

select id ,name from users

union

select id ,name from tem_users//成功

类型必须相容

select id ,name ,F_nikoname from users

union

select tem_id ,tem_name,'临时用户没有昵称' from tem_users //成功 类型相容

union 会把完全重复的数据给去掉 想要显示不让重复行的数据合并用下面的

UNION all//使用这个查询可能速度会快一些,原因:在用UNION的时候会经常去查询核对是否有重复的数据行出现 ,而用了 UNION all 之后就不用在进行数据匹配操作

一般使用 UNION all 进行数据查询结果联合

--------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: