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

黑马程序员之SQL学习笔记:sql 整理的一些笔记

2012-11-05 21:15 459 查看
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------

sql server 笔记:

--------------------------------------------

DBMS 数据库管理系统

Catalog 分类

table 表

Column 列

field 字段

primarykey 主键:业务主键:有业务意义如身份证;(会有重复)

逻辑主键:没有任何意义的,给程序看的,推存使用它;

一般用俩种做主键:int或Guid(产生的算法永远不会重复)

sql 中生成guid的函数是newid(),

.net中生成的方法:Guid.NewGuid(),

返回类型是Guid类型;

int自增字段的优点:占用空间小,无需开发人员干预、易读;

缺点:效率低,数据导入导出的时候很痛苦;

Guid的优点:效率高、数据导入导出方便;

缺点:占用空间大(大约数据库%20--%30),不易读;

业界主流倾向Guid;

表间关系、外键(foreignKey)

----------------------------------------------------

常用字段类型:bit(可选址0或1),datetime,int,varchar(不补空格),

nvarchar(可能含有中文用它);

----------------------------------------------------------

sql 语句:

ddl(数据定义语言) dml(数据操作语言)

插入 insert into 表名(列名1,列名2...)values('*','*'...);

insert into 表名 values('*'..); 可以省略字段名,不建议用.

insert into 表名 (id)values(newid()),

数据更新:

更新一个列:update 表名 set age=30;

更新多个列:update 表名 set age=50,name='*';

也可以 age=age+1 等等....

带过滤语句的条件的:

uptate ** set 列名=n'年轻人'

where age>=20 等于判断一个=号;<>不等于

还有或者:where age=20 or(或者) and(并且) not(否的) age=30

数据删除:

删除表中全部数据:delete from 表名

drop 表名 把表全部删除

-----------------------------------------------------

数据检索:

select *(字段) from 表名 检索所有的字段

where 字段<.....

select name as 姓名 取别名;

select count(*) from 表名 查看表有多少条数据

select max(列名) from 表名 最大

min 最小

avg 平均

sum 求和 这些叫做聚合函数

select * from 表

order by 字段 asc(升序) desc(降序) 根据那个字段进行排序

!!where 要在order by 之前

----------------------------------------------------------

通配符:

通配符过滤使用like

单字符 like'_*';

多字符 like %*%;

空值处理:null 表示不知道 null +谁都是不知道

查询字段里有null的。 where 字段 is(not) null;

where 字段 in(1,2,3) 在这个范围内的

where 字段 between 20 and 30 20--30之间

-------------------------------------------------

数据分组:

group by 字段 分组里面的个数

select 年龄,conut(*) from 表

group by 年龄

having conut(*)>1

having 是对分最后信息的过滤,能用的列和select中能用的

列是一样的。 having 无法代替where。

top 几 就是前几行的意思

select top 3 * from table

select top 3*from 表 //取第6--8 三个的工资 降序

where 字段 not in(select top 5 字段 from 表 order by 工资 desc)

order by 工资 desc

-------------------------------------------------------

alter table 表 add 字段.... 增加字段

select distinct 字段... //distinct 是针对整行有重复的 去掉重复的。

union 把俩个查询结果加他,能混成一个结果。

上下俩个类型要相同。个数要一样。

它默认会把重复的数据只保留一条。

可以用union all 都显示。

-------------------------------------------------

函数:

select abs(); 求绝对值

ceiling() 舍入到最大的整数

floor() 舍入最小整数

round 四舍五入

字符串函数:

len() 字符串长度

lower()转小写

upper()转大写

ltrim() 去掉左空格

rtrim() 去掉右空格

substring('abcdef',2,3) 'bcd'

日期函数:

getdate 获取当前日期

select dateadd(day,-3,getdate)

dateadd +

datediff -

select datepart(year,getdate()) 取今年年份

类型转换函数:

cast(被转换的 as 数据类型)

convert(date_type,expression)

空值处理函数

isnull(字段,'***') 如果有Null就返回****

------------------------------------------------------

重要滴:case

select 字段

(

case ziduan

when 1 then 'sdf'

when 2 then 'sdf'

else'未知'

end

) as 客户 类型

from 表

select 字段

(

case

when 工资<2000 then'低收入'

when >=2000 and <=5000 then''

else ''

end

) as ***

from ....

----------------------------------------------

练习 :

有一张表T_Scores,记录比赛成绩

Date Name Score

2008-8-8 拜仁 胜

2008-8-9 奇才 胜

2008-8-9 湖人 胜

2008-8-10 拜仁 负

2008-8-8 拜仁 负

2008-8-12 奇才 胜

要求输出下面的格式:

name 胜 负

拜仁 1 2

湖人 1 0

奇才 2 0

---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: