自己总结的 有不对的还请大家指正
数据库一
(1)数据库中的概念
Catalog 分类 不同的类数据放到不同数据库中
表 不同类型的资料放到不同格子中 列 字段
主键 数据行的唯一标示 不会重复的列才能当主键没有特殊理由都要设主键
业务主键 有业务意义的字段 身份证银行账号
逻辑主键 没有任何意义的字段 流水号 推荐使用逻辑主键
表间关联 外键
字段类型
bit 可选值(0,1)datetime int varchar nvarchar
char 不足部分用空格代替 varchar 可变的长度所以名字之类的应该用varchar或nvarchar
sql语句
sql语句中字符串都是单引号 大小写不敏感
创建表语句
CREATE TABLE T_Person(Id int NOt NULL,Name nvarchar(50),Age int NULL),
删除表 Drop table T_Person
简单的插入语句
Insert intoperson1(number,name,age)values(3,嘎嘎子,13)
sql主要分 数据定义语言ddl(creattable droptable) 数据操作语言dml(insert into )
用 标识列实现自动将字段是标识列设置成是 一个表只有一个字段能有一个标识列
Guid算法 产生一串数字 主要用Guid产生一串不重复数字
用法 Guid id=Guid.NewGuid();
数据插入
insert into Person1(Name,Age)values('lily',38); (Name,Age)可省略 但一般不这样用
insert into person2(id,name,Age)value(newid() ,'lily',23);此时表中的id类型选择uniqueidentifier
Guid 类型的默认值可以设置为newid()就会自动生成Guid类型的一串数字
更新数据sql语句
update person set Age=30,Name=‘lala’ ; 修改person表中的所有数据 让他们的Age字段等于30 Name字段等于lala
update person set Age=Age+1; 可以让Age+1;
条件更新
update person set Nickname=N'青年人'where Age>30 更新年龄>30的 字段Nickname的为青年人
删除数据
delete from Person 删除表中所有数据 清空 Drop person 把表都去掉了
delete fromPerson where Age>20 去掉Age》20 这一行
数据检索
select *from 表名 检索 这个表中的所有数据
select 列名1列名2 from表名 检索表中列名为1列名为2的数据
修改表的字段名
select 列名 as 新列名,列名as 新列名 from表名
select gatedate();获取时间
select还可以计算 select 列名 as 姓名,Fsalary+1000 as 月薪 from 表名 把把Faslary+1000;
聚合函数
select max(Fsalary) from 表名 字段Fsalary中最大的数查出来 类似的min()最小的 avg()平均
select count(*)from 表名
select *from 表名 order by 列名 按照一个列 排序 默认升序从小到大 by后边加上(Asc降序 )( Desc升序)
语句中有where时 order by 放在where后边
select* from person
where Age>20
order by Age Desc 筛选表person中 年龄大于20的 排序方式为升序
通配符过滤
单字符匹配
半角下的"_" select*from person where name like '_hha' 已任意开头后边为hha的
半角下的"%" select*from person where name like '%n%';姓名中包含n的字符
空值处理
null 不等于没有名字
select *from person where name is null 查出name中为null的数据
多值匹配
select * from person
where age=23 or age=19 or12 查找年龄为23 19 12的
select*from person
where age in (23,12,34)查找 年龄为 23 12 34的
select*from person 查找 年龄大于20小于30的
where age>20and age<30
数据库二
(1)分组查询
select Fage,Count (*)From person group by fage 按照年龄分组 输出这一组的个数
select fage,fsalary,count(*)from person group by age//错误 可以max(fsalary)
没有出现在group by 句子的列不能放到select 语句后 聚合函数除外
聚合函数不应该出现在where后边 可以换成having having count(*)>1 having 是对分组后进行筛选
能用的列出现在select中
(2)限制结果集的函数
select top3 *from person order by fsalary Desc
(3)去掉重复数据
ALTER TABLE person subcompany varchar(20); 增加一个subcompany字段
select distinct name from person distinct 去掉重复的完全重复的行
把两个结果和到一起
union (默认把重复的数据去掉)不让重复的去掉 应该是 union all 两个查询语句之间加上union 两个查询语句字段个数要一样类型要相容
不刻意的去掉重复行 一般都写 union all
写报表
select '正式员工最高年龄',max(age)from person
union all
select '正式员工最低年龄',min(age)from person
(4)数字函数
abs()求绝对值 ceiling()舍入到最大数 3.1会变成4 floor()涉入到最小整数2.9变成2 round()两个参数 一个数值 一个精度 round(2.14,1)精度为一位小数点四舍五入
(5)字符串函数
len(字段)字段的长度 例如 select name len(name)from person 就会把name字段下 数据的长度显示出来 例如name 下有个“tom” 就会显示3
lower()upper()转小写转大写 ltrim()字符串左侧空格去掉 rtrim()字符串右侧去掉 左右都去(ltrim(rtrim('ddd')))
substring('sdfdsd',2,3)从2开始长度为三
select name substring(name ,2 ,3)字段中 name值中从2开始长度为三
(6)日期函数 datepart 为度量单位 例如 day hh
getdate()取当前日期 dateadd(datepart,number,date)计算增加以后的日期 select dateadd(day,-3,gatedate())计算三天以前
datediff(datepart,stardate,enddate)
datepart(datepart,getdate()) 取出日期的固定部分
统计员工入职年份个数
select datepart(year,indate),count(*)from person group by datepart(year,indate)
(7)
类型转换函数
cast(expression as date_type) cast('123'as int) cast('2004-2-3'as datetime)
convert(datetime,'2009-09-09')
(8)空值处理函数
isnull(expression,value) 如果expression不为空 就显示expression值为空就显示value值
select isnull(name,'小李')as 姓名 from person
case函数 用法1
单值判断相当于switch case
select name ,
{case fleve1
when 1 then 'ddd'
when 2 then 'dddddd'
else '不知道'
end) as 客户类型 from person
}
select name
(case
when salary<2000 then '低收入'
when salary>=2000 and salary<=5000 then '中等收入'
else '高收入'
end)as 收入水平
from person
)
(9)索引
为了提高查询的效率 只在经常需检索的字段上插入索引
(10)Join 关联
用法 ponson as o jion person1 as c on o.customer=c.id
|