SQL自动学习.docx
- 文档编号:30185439
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:68
- 大小:9.46MB
SQL自动学习.docx
《SQL自动学习.docx》由会员分享,可在线阅读,更多相关《SQL自动学习.docx(68页珍藏版)》请在冰豆网上搜索。
SQL自动学习
自己整理的东西:
1、SQL查寻EXCEL表格
-->Jet引擎访问Excel
select*fromOpenRowSet('Microsoft.Jet.OLEDB.4.0','Excel8.0;HDR=Yes;IMEX=1;Database=D:
\Roy.xls','select*from[Sheet1$]')
select*fromOpenRowSet('Microsoft.Jet.OLEDB.4.0','Excel8.0;HDR=Yes;IMEX=1;Database=D:
\Roy.xls',[Sheet1$])
select*fromOpenDataSource('Microsoft.Jet.OLEDB.4.0','Excel8.0;HDR=Yes;IMEX=1;Database=D:
\Roy.xls')...[Sheet1$]
select*fromOpenDataSource('Microsoft.Jet.OLEDB.4.0','DataSource=D:
\Roy.xls;ExtendedProperties="Excel8.0;HDR=Yes;IMEX=1"')...[Sheet1$]
-->ACE引擎访问Excel97-2003
select*fromOpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:
\Roy.xls','select*from[Sheet1$]')
select*fromOpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:
\Roy.xls',[Sheet1$])
select*fromOpenDataSource('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:
\Roy.xls')...[Sheet1$]
select*fromOpenDataSource('Microsoft.ACE.OLEDB.12.0','DataSource=D:
\Roy.xls;ExtendedProperties="Excel12.0;HDR=Yes;IMEX=1"')...[Sheet1$]
解释:
HDR=YES所行做为列名
IMEX=1
2、SQL查寻远程SQL
/*不同服务器数据库之间的数据操作*/
--创建链接服务器
execsp_addlinkedserver'ITSV','','SQLOLEDB','远程服务器名或ip地址'
execsp_addlinkedsrvlogin'ITSV','false',null,'用户名','密码'
--查询示例
select*fromITSV.数据库名.dbo.表名
--导入示例
select*into表fromITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
execsp_dropserver'ITSV','droplogins'
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select*fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
--生成本地表
select*into表fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
--把本地表导入远程表
insertopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
select*from本地表
--更新本地表
updateb
setb.列A=a.列A
fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)asainnerjoin本地表b
ona.column1=b.column1
--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
execsp_addlinkedserver'ITSV','','SQLOLEDB','远程服务器名或ip地址'
--查询
select*
FROMopenquery(ITSV,'SELECT*FROM数据库.dbo.表名')
--把本地表导入远程表
insertopenquery(ITSV,'SELECT*FROM数据库.dbo.表名')
select*from本地表
--更新本地表
updateb
setb.列B=a.列B
FROMopenquery(ITSV,'SELECT*FROM数据库.dbo.表名')asa
innerjoin本地表bona.列A=b.列A
--3、opendatasource/openrowset
SELECT*
FROMopendatasource('SQLOLEDB','DataSource=ip/ServerName;UserID=登陆名;Password=密码').test.dbo.roy_ta
--把本地表导入远程表
第2章使用SQLServer2008管理工具
1、
2、模板资源管理器
有一些编程的模板
3、SQL接机从书
学习SQL的老师
4、SQL配置管理器
5、SQLServerBusinessIntelligenceDevelopmentStudio
6、外围应用配置
讲的是2005的,晕
7、SQLCMD
开始——运行——CMD——sqlcmd–s服务器名称
UseTEST
GO
Select*from七月
Go
Exit
Sqlcmd-?
(可看到SQLCMD的帮助文档)
第3章管理数据库
1、数据库组成
2、建立数据库
3、通过语句建立数据库
Createdatabase教务管理系统
ON
(
name=教务管理系统_DATE,
Filename='d:
\123\教务管理系统_DATE.mdf',
Size=5Mb,
MAXSIZE=20Mb,
FILEGROWTH=5%
)
LOGON
(
NAME=教务管理系统_LOG,
Filename='d:
\123\教务管理系统_DATE.ldf',
Size=2Mb,
Maxsize=10mb,
Filegrowth=1mb
)
)
路径要注意要最少二级目录。
4、查询数据库状态
可以用以下几个方法:
●目录视图
●函数
Selectdatabasepropertyex('TEST','vesion')
具体意思查看“连机帮助”
●系统存储过程
sp_helpdb,查了全部的数据库信息
5、修改数据库
直接用视图模式就行了,T-SQL没有怎么教自已看“连机帮助”
alterdatabasetestmodifyname=test1修改数据库名字(这里逻辑名是没有修改的)
其它的自已看“连机帮助”
6、DELETE数据库
Dropdatabase“名称”
6、分离与附加数据库
可又把数据库文件放到其它SQL2008的系统上,如果没有日志文件,系统会自动建立新的文件。
分离后文件别不是删出,而是可又复制备份到其它地方了。
如果要用,在附加回来即可。
7、收缩数据库
就是把分配的空间搞小一点,而达到结省空间的目的。
8、数据库快照概述
如果我们对数据库照了个相,那么照相的时刻,将被记录,我们可查看到那个时刻的情况,而且可恢复,但恢复后不能操作了。
每天可做6-12个快照,如果又有新的快照,最开始的将自动删出。
注:
做了快照是不能对原数据库做分离操作的。
只有把快照删了才行。
9、数据库快照建立
●建立数据库快照
createdatabase快照TEST‘快照的名字
on
(name=test123,filename='d:
\123\test快照')‘数据库中的文件,有几个就做几个
assnapshotoftest123‘原数据库是的名字
做好后快照与原数据库中包含的表是一样的。
●还原到快照
restoredatabasetest123--要还原数据库的名字
fromdatabase_snapshot='快照test'--用哪一份备份的快照来还原数据库TEST123
10、数据库复制
在“任务”-复制中操作
和分离后后手动复制差不多的功能。
作用不大。
第4章SQLServer2008数据表管理
1、数据类型
列的类型比如,字符型,整型等共有28种;
●整数数据类型:
BIGINT、INT、SMALLINT、TINYINT
●高精度的数据类型DECIMAL、MUMERIC
●货币类型:
MONEY、SMALLMONEY
●符点,FLOAT、REAL
●BAT,只有1和0
字符类的:
●字符型:
CHAR(50)不管有多长都是50
●VARCHAR(50)实际为多少就是多少。
●TEXT文本型的
●NCHAR
●NVARCHAR
●NTEXT
时间类的:
Datetime它的范围为17531-1-1到9999-12-31,精度为3.33MS
Smalldatetime它的范围为1900-1-2到2079-12-31,精度为1分钟
二进制的:
专用的:
2、CREATETABLE建立表
createtable建立表测试createtable
(
员工intidentity,--标示字段,自动增长
姓名nvarchar(10)null,--可为空
)
3、建立数据表
4、临时表
createtable#临时表测试
(
员工intidentity,--标识字段,自动增长
姓名nvarchar(10)notnull,--不能为空
)
select*from#临时表测试
临时表只有当表的用户才有效的。
如果想所有用户都看到,只有在表名前加“##”,而且系统视图里看不到它,只有用SELECT语句可查到它
5、设置标识字段
就是一个编号,系统会自动给我们编号,比如增加一行,系统编号会从1到2
6、使用默认值
就是对某一名设置一个默认值,比如把学生姓名自动设为“男”,当然也可又改动的。
7、建立约束
对或一列设置一个条件,要满足条件的值才符合约束,比如:
设置年龄伙18到65岁
表达示要求:
列名>15and列名<65
如果不符合约束的话,数据将不能补修改的,会提示错误。
8、修改表
execsp_rename'七月','新员工信息'--重命名“七月”这个表为“新员工信息”
ALTERTABLE'七月'--修改表“七月”
ADD时间datatimenull--新加一列为“时间”
ALTERCOLUMN时间SMALLTINNULL--改“时间”这一列的数据类型
dropcloumn时间--“把时间”列删出。
9、定义用户自定义类型
10、使用规则
createruletestguize--定义规划名字为TESTGUIZE
as
@valuebetween1and100--@value为变量,设定规则的取值为TO100
sp_bindruletestguize,'成绩信息.分数'--将我们上面定义的规则邦定到成绩信息表,分数列
11、解除与删出规划
sp_unbindrule'成绩信息.分数'--解出了成绩信息表,分数列的规侧
drop_RULE[规侧名字]
12、数据关系图
第5章操作架构、索引和视图
1、创建视图
createviewv_1232--视图名字为V_1232
as
selecttop100七月.date,九月.date--视图需查的东西
From七月,九月--来到哪一个表或多个表
select*fromv_123--现在直接查视图了
2、修改与删出视图
alterviewview_1—修改的名字
as
select*--后面为修改的内容
from七月.datejoin九月.date
3、通过视图修改数据select
4、索引概述
索引就相关与一本书的目录,方便用户快速的查找到相关的数据。
特点:
1、唯一性:
使库中索引列的值保证唯一,不重复。
(所以我不用)
2、使有ORDERBYGROUPBY的列速度会很快。
3、索引会使我们对表的修改或增加速度变慢
4、
5、创建概述(GOOD)
具集索引
非具集索引
一个表可建立一个具集索引和N个非具集索引
表的主键已为具集索引了
createnonclusteredindextime_index--建立非聚集索引,名字为TIME_INDEX
on九月(time)--建立在“九月”这个表,“time”这个列上。
注:
这个好啊,速度可又快很多,而且数据越大,就越明显。
不过建议对于数据常修改的的表可又不建,或建立好后在建立索引。
6、删出索引
dropindex学生信息.time_index--删出"学生信息"表的“time_index”索引
7、全文索引
好像更好些,而且有新数据加进去后,还可又更新它
8、创建架构
Createschema架构Tauthorizationsuxiong--建架构的名字为“架构T”,所用都为“suxiong”
好像就是给不同的用户,不用的权限吧。
9、架构2
10、具集索引、非具集索引
聚集:
可以为多列。
第6章数据查询和管理
1、简单的SELECT语句
select*fromtest1
select12/2--查/2等于多少?
selectlog
(2)--查log
(2)等于多少?
其它类式
selectdistincttime--查不重复的TIME列
2、设置条件查找
select*from九月
wheredate='2011-09-8'andtime='0'ortime='1'
条件可多个或一个等等可,可又用AND、OR来应用。
select*from九月
wheredatelike'2011-09%'通配符的表示。
SELECT*FROM[123]
whereCGIlike'460-00-33051-%'通配符的表示。
3、排序
selecttop200*from九月
orderbydateasc,time--decs为降,ASC为升,如果DATE有一样的值,那么我们在加入TIME,如果TIME大的值,DATE在前面
4、分组
selecttop200date,AVG(tch话务)from九月
groupbydate
--groupbyrollup(列名),这里是在全部汇总后还要计算一个总的平均值。
--groupbycube(列名),这里是在全部汇总后还要计算一个总的平均值。
ROLLUP与CUBE有点不同,自己看一下吧
5、使用函数
SUMAVGMINMAX
selectCGI,AVG(TCH),AVG(拥塞率)from[123$]
where(日期='2011-10-22'or日期='2011-10-23')and时间in(2,3,4)
groupbycgi
日期
时间
CGI
TCH
拥塞率
2011-10-22
2
460-00-32791-42363
0.799074076
0
2011-10-22
2
460-00-33051-31234
14.75696312
0
2011-10-22
3
460-00-32836-7092
0.779777776
0.470026671
2011-10-22
4
460-00-33066-726
12.93044439
0
2011-10-22
5
460-00-32838-47172
9.876777821
1.57E-05
2011-10-22
6
460-00-32810-14941
7.821604918
0
2011-10-22
7
460-00-33051-10594
2.519074074
0
2011-10-22
8
460-00-32810-6053
7.923251018
0
2011-10-23
2
460-00-33291-7862
6.732510775
0
2011-10-23
3
460-00-33045-10435
6.556148091
0
2011-10-23
4
460-00-32902-2740
0.579370376
0
2011-10-23
5
460-00-32807-2835
0.495062303
0
2011-10-22
6
460-00-32775-28565
7.448999993
0.002408263
2011-10-22
7
460-00-33031-43401
3.686420372
0
2011-10-22
8
460-00-33283-55272
2.181481494
0
2011-10-22
2
460-00-32897-8011
12.82983532
1.52E-05
2011-10-24
3
460-00-33069-50905
2.896962994
0.0007099
2011-10-24
4
460-00-32815-7892
9.247736656
0
2011-10-24
5
460-00-32833-50120
0.545481479
0
结果为:
CGI
Expr1001
Expr1002
460-00-32791-42363
0.799074076
0
460-00-32836-7092
0.779777776
0.470026671
460-00-32897-8011
12.82983532
1.51778E-05
460-00-32902-2740
0.579370376
0
460-00-33045-10435
6.556148091
0
460-00-33051-31234
14.75696312
0
460-00-33066-726
12.93044439
0
460-00-33291-7862
6.732510775
0
常用语句:
6、HAVING子句
7、插入数据INSERT
insertintotestvalues('印小','123','99','3')—所有列都插入值
insertintotest(姓名,学号,分数)values('印小','123','99')—只插入三列
8、插入数据INSERT….select
从其它表中插入数据
inserttest
SELECT*FROMtest1
Where条件
--把TEST1中所有数据,插入到TEST表,
9、产生一个新表select….into
会产生一个新表
10、修改数据UPDATE
updatetest
set姓名='李军'--要改成什么
where姓名='印小'--改哪一个呢,条件为姓名为印小的。
11、UPDATE中FROM中
相当与VLOOOKUP一样,根据一个表的值,把其它表的值也搞过来。
12、DELETE
13、TOP
declare@iint--生明变量
set@i=10--等于
selecttop(@i)percent*fromtest--这里是用了变量,变量要用()
selecttop10percent*fromtest--PERCENT表示返回百分之十的值
selecttop10withties*fromtestorderby姓名--返回条,但如果条的时候与后面相同,那么也会显示出来。
但一定要用ORDERBY
14、compute
结果的合计
select*fromtestwhere姓名='张军'
computesum(分数)
15、WHERE中运用运算符
select*fromtestwhere姓名='张军'--等于关系
select*fromtestwhere姓名='张军'and姓名='大小'--和的关系
select*fromtestwhere姓名='张军'OR姓名='大小'--或的关系
select*fromtestwhere分数between1and92
select*fromtestwhere分数in(9,2,44)--在(9,2,44)的行
select*fromtestwhere分数notin(9,2,44)--不在(9,2,44)里的行
select*fromtestwhere分数>98--大于,还有小于
select*fromtestwhere分数<>98--不等于
select*fromtestwhere分数/4=11--分数除等于的行
select*fromtestwhere分数like'9?
'--等于?
的行
第7章操作查询
多个表的操作
1、基本连接
相当于VLOOKUP,结构为左右结构,如图:
方法一:
selectc.cgi,c.tch话务量最大,a.时间,a.sdcch话务量,a.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 自动 学习