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
|