黑马程序员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
数据插入
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
相关文章推荐
- 黑马程序员--学习笔记之SQL基础语句及函数
- 黑马程序员之SQL 学习笔记:T-SQL语句的使用和编写
- 黑马程序员之ADO.NET学习笔记:通过SqlCommand对象执行SQL语句
- 黑马程序员--SQL语句学习总结2
- 黑马程序员----SQL 语句学习
- 黑马程序员_学习日记48_616数据库开发及ADO.Net(带参数的Sql语句、数据库与文本文件导入导出、省市联动、资料管理器、DataSet (ado.net断开式数据访问)、SQLHelper)
- 黑马程序员 学习笔记——SQL查询语句大全
- MySQL学习---->第二练:语句初步(SQL概述、数据定义、查询)
- [整理]SQL语句学习手册实例版
- PHP学习笔记 第九讲 数据库中的常用SQL语句
- Oracle PL/SQL语句基础学习笔记(上)
- 黑马程序员-java学习笔记-循环语句
- hadoop学习之HIVE(3.3):hiveSQL语句详解(DML)
- SQL 语句学习
- MyBatis学习-使用SqlBuilder生成SQL语句
- 黑马程序员-自己总结的java学习笔记(2)java语句基础。
- Sql语句学习指南
- 学习资料 50个常用的sql语句
- sql语句学习
- 黑马程序员---C语言学习笔记之分支结构if语句与switc语句的详解