数据库基础培训

日期:2016-6-4 14:51 | 标签: 数据库 | 阅读:398

2016年6月4日数据库基础培训。

数据查询

-- 最基本查询
select * from project
-- 第一步优化(只返回需要的字段 | 加上top)
select columnName1, ... from 
-- 第二步优化,使用where加上条件
distinct columnName(唯一一条)| 
-- 第三步优化,使用时间字段做索引,且按照倒序来排序
order by timeColumn desc
--  条件查询
select columnName1,columnName2 ... group by columnName1,ColumnName2  
-- 进一步筛选  
having (注意区分where)     
and or 需要注意添加括号   
in(data1,data2)  | not in  
like | not like [可能引起索引不起作用:‘%关键字’造成不起作用] 
-- 判断为null可以使用is Null,替换函数isnull(字段名,替换值),注意要匹配类型
-- 不加事务
with no lock

数据插入

数据更新

-- 数据更新基本语法.update set
update Table set ColumnName='xx'  where 
-- 两表关联更新(也可以自我关联),update from 
update Table2 set ColumnName1 = from Table2 a,Table1 b where a.ColumnName2=b.ColumnName2  
-- 练习:更新最大时间的值
select max(time),value from table1
select min(time),value from table1
-- 
declare @num numeric(18,2)  
declare @num1 numeric(18,2)
-- 赋值
select @num=0, @num1=0
-- 应用场景:上一条值减去下一条值
update Table set @num = @num+data (data为Table值)

删除

truncate 删除表的所有数据
drop Table
delete from Table where

表关联、表嵌套

表嵌套(原理:每一次父查询都会执行子查询,会造成性能慢)

select *, (select DeviceName from [7Device] b where a.DeviceID=b.DeviceID)    
as DeviceName from [1AlarmRecord] a where DeviceID=1

表拼接

Intersect: 交集  
Minus: 差值  
union: 会过滤重复  
union all : 不包括重复行  
(要求: 字段必须命名[第一个],字段类型不一致、字段数量一致)

表关联

-- 最简单使用(内关联)
select * from Table1 a,Table2 b where a.ColumnName = b.ColumnName  
-- left outer/ left inner || right outer/right inner  || full join

参考:关于表连接

临时表

系统表 tempdb,可以查询临时表
# 局部临时表
## 全局临时表(需要手动清除或者关闭数据库所有连接)
生成临时表起到缓存的作用。
ps:不使用#会生成物理表,约束条件需要手动进行设置
数据要先筛选在进行表连接

select * from (子查询1) a  (子查询2) b on a.ColumnName = b.ColumnName

(注意字段名称重复的情况)

表定义

-- (ps:exec必须带有括号)  
declare @xxx varchar(100)   
set @xxx = "sql语句"   
exec(@xxx)  
-- 创建物理表  
create Table 表名称(
    字段名称,类型... 
)

需要注意表的作用域范围(局部可以访问全局)

函数

sum avg count data convert cast(区别)字符串... 
convert(varchar(30),getdate(),121)

缓存

在查询完毕后会耗缓存,但是速度会加快

工具

  1. 智能提示 ctrl+j
  2. 对象管理器,选择对应表导出,此外还可以看到创建时间与修改时间
  3. 菜单栏的灵活运用
  4. 不仅仅可以修改200条,还可以定制,点击左上角菜单
  5. 任务->生成脚本->配置需要导出的表的属性(可以点击高级,勾选导出数据)
  6. 导入数据(Excel,平面文件源,...),装引擎后可以跨数据库导入
  7. 作业代理
  8. sqlserver配置管理器,查看对应服务、协议(使得可以跨电脑访问)

跟踪与调试

  1. 工具->跟踪器
  2. 添加管理员权限后,可以进行调试,类似c#

其它

性能

使用awf分配内存,需要设置最大内存限制,否则会冲爆服务器内存
数据库恢复模式设为简单,不会产生大量日志
存储大量数据的表,压缩类型(启用)[存储->管理压缩->row],减掉30-40%存储空间 ,也可以直接生成sql语句进行设置。
查看存储过程性能,直接右键->显示执行计划,会显示可以进行优化的地方(上限是2秒)

索引

设计->管理索引主键
最好以时间值作为索引,原理是常用为主
海量数据尽量不要用游标,直接使用case when
触发器尽量不用
聚集索引,物理存储已经拍好了序
非聚集索引,不是连续的,临时排好的序
增删改多时最好不要建立索引

版权声明: 署名-非商业性使用-禁止演绎 4.0 国际(CC BY-NC-ND 4.0
Copyright ©2013-2017 | 粤ICP备14081691号 | yipeng手工打造 | 联系方式