(1)
数据记录筛选:
sql=
"select
* from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql=
"select
* from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"
sql=
"select
top 10 * from 数据表 where 字段名 order by 字段名 [desc]"
sql=
"select
* from 数据表 where 字段名 in ('值1','值2','值3')"
sql=
"select
* from 数据表 where 字段名 between 值1 and 值2"
(2)
更新数据记录:
sql=
"update
数据表 set 字段名=字段值 where 条件表达式"
sql=
"update
数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"
(3)
删除数据记录:
sql=
"delete
from 数据表 where 条件表达式"
sql=
"delete
from 数据表"
(将数据表所有记录删除)
(4)
添加数据记录:
sql=
"insert
into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
sql=
"insert
into 目标数据表 select * from 源数据表"
(把源数据表的记录添加到目标数据表)
(5)
数据记录统计函数:
AVG
(字段名)
得出一个表格栏平均值
COUNT
(*|字段名)
对数据行数的统计或对某一栏有值的数据行数统计
MAX
(字段名)
取得一个表格栏最大的值
MIN
(字段名)
取得一个表格栏最小的值
SUM
(字段名)
把数据栏的值相加
引用以上函数的方法:
sp_helpdb
查看数据库
go
use
数据库名
go
select
*
from
sysobjects
where
xtype=
'u'
查看数据库中有什么数据表
go
sp_help
数据表名 查看数据表的结构
go
sql=
"select
sum(字段名) as 别名 from 数据表 where 条件表达式"
set
rs=conn.excute(sql)
用
rs(
"别名"
)
获取统的计值,其它函数运用同上。
(5)
数据表的建立和删除:
CREATE
TABLE
数据表名称(字段1
类型1(长度),字段2 类型2(长度) …… )
例:
CREATE
TABLE
tab01(
name
varchar
(50),datetime
default
now())
DROP
TABLE
数据表名称
(永久性删除一个数据表)
4.
记录集对象的方法:
rs.movenext
将记录指针从当前的位置向下移一行
rs.moveprevious
将记录指针从当前的位置向上移一行
rs.movefirst
将记录指针移到数据表第一行
rs.movelast
将记录指针移到数据表最后一行
rs.absoluteposition=N
将记录指针移到数据表第N行
rs.absolutepage=N
将记录指针移到第N页的第一行
rs.pagesize=N
设置每页为N条记录
2、更改表格
ALTER
TABLE
table_name
ADD
COLUMN
column_name
DATATYPE
说明:增加一个栏位(没有删除某个栏位的语法。
ALTER
TABLE
table_name
ADD
PRIMARY
KEY
(column_name)
说明:更改表得的定义把某个栏位设为主键。
ALTER
TABLE
table_name
DROP
PRIMARY
KEY
(column_name)
说明:把主键的定义删除。
3、建立索引
CREATE
INDEX
index_name
ON
table_name
(column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。
4、删除
DROP
table_name
DROP
index_name
二、的资料形态
DATATYPEs
smallint
16
位元的整数。
interger
32
位元的整数。
decimal
(p,s)
p
精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数
点後有几位数。如果没有特别指定,则系统会设为
p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char
(n)
n
长度的字串,n不能超过 254。
varchar
(n)
长度不固定且其最大长度为
n 的字串,n不能超过 4000。
graphic(n)
和
char
(n)
一样,不过其单位是两个字元
double
-bytes,
n不能超过127。这个形态是为
了支援两个字元长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为
n 的双字元字串,n不能超过 2000。
date
包含了
年份、月份、日期。
time
包含了
小时、分钟、秒。
timestamp
包含了
年、月、日、时、分、秒、千分之一秒。
三、资料操作
DML (Data Manipulation Language)
资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(
insert
)、查询资料(query)、更改资料(
update
)
、删除资料(
delete
)四种模式,以下分
别介绍他们的语法:
1、增加资料:
INSERT
INTO
table_name
(column1,column2,...)
valueS
(
value1,value2, ...)
说明:
1.若没有指定
column
系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name
也可以是景观 view_name。
INSERT
INTO
table_name
(column1,column2,...)
SELECT
columnx,columny,...
FROM
another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。
2、查询资料:
基本查询
SELECT
column1,columns2,...
FROM
table_name
说明:把table_name
的特定栏位资料全部列出来
SELECT
*
FROM
table_name
WHERE
column1
= xxx
[
AND
column2
> yyy] [
OR
column3
<> zzz]
三)交叉连接
交叉连接不带
WHERE
子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
于6*8=48行。
SELECT
type,pub_name
FROM
titles
CROSS
JOIN
publishers
ORDER
BY
type
UNION
运算符可以将两个或两个以上上
SELECT
语句的查询结果集合合并成一个结果集合显示,即执行联合查询。
UNION
的语法格式为:
select_statement
UNION
[
ALL
]
selectstatement
[
UNION
[
ALL
]
selectstatement][…n]
其中selectstatement为待联合的
SELECT
查询语句。
ALL
选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一
行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用
UNION
运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类
型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的
UNION
语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
查询1
UNION
(查询2
UNION
查询3)
INSERT
语句
用户可以用
INSERT
语句将一行记录插入到指定的一个表中。例如,要将雇员John
Smith的记录插入到本例的表中,可以使用如下语句:
INSERT
INTO
EMPLOYEES
valueS
(
'Smith'
,
'John'
,
'1980-06-10'
,
'Los
Angles'
,16,45000);
通过这样的
INSERT
语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。
我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。
如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。
回到原来的
INSERT
的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。
同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。
对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd)
Alter
database
TestAA
set
RESTRICTED_USER
with
rollback
immediate
RESTRICTED_USER
只允许 db_owner 固定数据库角色成员以及 dbcreator 和 sysadmin 固定服务器角色成员连接到数据库,不过对连接数没有限制。在
ALTER
DATABASE
语句的终止子句所指定的时间范围内,所有数据库连接都将被断开。在数据库转换到
RESTRICTED_USER 状态后,不合格用户所做的连接尝试将被拒绝。
Alter
database
TestAA
set
MULTI_USER
with
rollback
immediate
sql
2008 不支持nolog 和 truncate_only 如果要截断日志的话,需要先把数据库搞成简单模型,然后在收缩日志,在改成完全模式。备份一次数据库。
Alter
database
set
recovery
{simple/
full
/bulk_logged}
dbcc
shrinkfile(
'filename'
,10)
set
statistics
io
on
set
statistics
profile
on
set
statistics
time
on
DBCC
FREEPROCCACHE
不用关闭和重启服务器或者服务
DBCC
DROPCLEANBUFFERS
DBCC
PROCCACHE
DBCC
SHOW_STATISTICS (
table
,
target )
SELECT
top
20
*
FROM
OPENDATASOURCE(
'SQLOLEDB'
,
'Data
Source=xxx.xxx.xx.x,port;User ID=sa;Password=xxxxxxx'
).[product].dbo.tableaa
data
source 好像不能有中括号,好多网友的opendatasource不能用就是这个原因
SELECT
*
FROM
OpenDataSource
(
'Microsoft.Jet.OLEDB.4.0'
,
'Data
Source="c:\bbb.xls";User ID=;Password=;Extended properties=Excel 5.0'
)...[sheet1$]
文本的查询
文件必须是,号分割文件
HDR=YES
的时候,第一行被认为是字段名
HDR=
NO
的时候,第一行被认为是数据
select
*
from
OPENROWSET(
'MICROSOFT.JET.OLEDB.4.0'
,
'Text;HDR=NO;DATABASE=C:\'
--c:\是目录
,aaa#txt)
--文件名
BULK
INSERT xxxx_trs.dbo.xxxx_day
FROM
'
F:\BI_DsssDayAddin_cms_IN.csv
'
WITH
(
FIELDTERMINATOR
='
,
',
ROWTERMINATOR
='
\n
'
)
--查看sql版本
SELECT
SERVERPROPERTY('
productversion
'),SERVERPROPERTY('
productlevel
'),SERVERPROPERTY('
edition
')
--初始化标识列
DBCC
CHECKIDENT (ProductPicture, RESEED, 1)
--数据库2个比较常用的函数
DATABASEPROPERTY
返回数据库状态的值
select
DATABASEPROPERTY(dbname, '
issingleuser
')
返回数据库是不是单用户模式
HAS_DBACCESS
( '
database_name
'
)
返回信息,说明用户是否可以访问指定的数据库
--T终端用户的人
Query
user 查询当前登录用户
LogOff
sessionid 注销会话
Tsdiscon
sessionid 断开某个会话的连接
命令行下需要先建立一个ipc$会话
net
use \\10.168.0.21\c$ "XX" /user:administrator
query
user /server 10.168.0.21
tsdiscon
2 /server 10.168.0.21
创建与删除SQL约束或字段约束。SQL约束控制
1)禁止所有表约束的SQL
select
'
alter
table
'+name+'
nocheck
constraint
all
'
from sysobjects where type='
U
'
2)删除所有表数据的SQL
select
'
TRUNCATE
TABLE
'+name
from sysobjects where type='
U
'
3)恢复所有表约束的SQL
select
'
alter
table
'+name+'
check
constraint
all
'
from sysobjects where type='
U
'
4)删除某字段的约束
declare
@name varchar(100)
--DF为约束名称前缀
select
@name=b.name from syscolumns a,sysobjects b where a.id=object_id('
表名
')
and b.id=a.cdefault and a.name='
字段名
'
and b.name like '
DF%
'
--删除约束
alter
table 表名 drop constraint @name
--为字段添加新默认值和约束
ALTER
TABLE 表名 ADD CONSTRAINT @name DEFAULT (0) FOR [字段名]对字段约束进行更改
--删除约束
ALTER
TABLE tablename
Drop
CONSTRAINT 约束名
--修改表中已经存在的列的属性(不包括约束,但可以为主键或递增或唯一)
ALTER
TABLE tablename
alter
column 列名 int not null
--添加列的约束
ALTER
TABLE tablename
ADD
CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名
--添加范围约束
alter
table tablename add check(性别 in ('
M
','
F
'))
创建一个库
CREATE
DATABASE g2 ON PRIMARY
(
NAME = '
g2
',
FILENAME = '
E:\benet\data1\g1.mdf
'
, SIZE = 307200KB , FILEGROWTH = 1024KB )
LOG
ON
(
NAME = '
g2_log
',
FILENAME = '
E:\benet\data1\g1_log.ldf
'
, SIZE = 1024KB , FILEGROWTH = 10%)
创建一个表
CREATE
TABLE biao2
(
id
int NOT NULL,
xingming
char(10) NOT NULL,
xingbie
float(53) NOT NULL,
nianling
int NOT NULL,
chengji
float(53) NULL
)
查询
select
* from biao1
where
chengji between 400 and 600
select
* from biao1
where
nianling like 55
select
* from biao1
where
nianling between 10 and 100
select
* from biao1
where
id = 5
insert
into biao1
values
(6 ,'
原迟
',1
, 100 , 1542.22)
update
biao1
set
chengji = chengji + 1000
select
* from biao1
delete
from
biao1
where
id = 1
select
* from biao1
select
* from biao1 排序
order
by no asc
update
biao2
set
zongji = shuxue + yuwen + huaxue
where
xingming = '
a
'
insert
into biao1
values
(7,'
骨血松涛
',1
, 700)
select
* from biao1
where
xingming like '
%血%
'
select
distinct xingbie from biao1
alter
table biao1
drop
column chengji 删除一列
alter
table biao2
add
liehao
int
select
* from biao1,biao2
where
biao1.id=biao2.id 将表一和表二联系起来,建立主索引, 注意小数点的应用
select
* from biao1
inner
join biao2
on
biao1.id=biao2.id 和上面的一样
查询时间
select
* from biao2
where
riqi between '
1993-01-01
00:00:00.000
'
and '
1994-6-29
00:00:00.000
'
select
xingming from biao2
where
bumen ='
xiaoshou
'
and xingbie ='
na
'
delete
from
biao2
where
xingming='
jinpeng
'
select
id ,xingming into biao2_backup
from
biao2
where
xingbie='
na
'
备份选择的数据
create
view shitu as
select
xingming ,riqi
from
biao2
where
xingbie = '
na
'
创建一个自己匹配的视图
视图相当于是一个符合你的目的的一个查询结果集.
他不占用空间,方便你以后的查找.
多文件还原代码
ESTORE
DATABASE [benet] FROM DISK = N'
G:\bak\wz.bak
'
WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO
RESTORE
DATABASE [benet] FROM DISK = N'
G:\bak\cy.bak
'
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
GO
恢复数据库
benet 来自文件 DISK = N'
G:\bak\cy.bak
'
with 文件数1个,
NORECOVERY
指定不发生回滚。从而使前滚按顺序在下一条语句中继续进行。
在这种情况下,还原顺序可还原其他备份,并执行前滚。
REPLACE覆盖
A.
还原完整数据库
注意:
MyAdvWorks
数据库仅供举例说明。
以下示例还原完整数据库备份。
复制代码
RESTORE
DATABASE MyAdvWorks
FROM
MyAdvWorks_1
注意:
对于使用完全恢复模式或大容量日志恢复模式的数据库,在大多数情况下,SQL
Server 2005 都要求您在还原数据库前备份日志尾部。有关详细信息,请参阅尾日志备份。
B.
还原完整数据库备份和差异备份
以下示例还原完整数据库备份后还原差异备份。另外,以下示例还说明如何还原媒体上的另一个备份集。差异备份追加到包含完整数据库备份的备份设备上。
复制代码
RESTORE
DATABASE MyAdvWorks
FROM
MyAdvWorks_1
WITH
NORECOVERY
RESTORE
DATABASE MyAdvWorks
FROM
MyAdvWorks_1
WITH
FILE = 2
C.
使用 RESTART 语法还原数据库
以下示例使用
RESTART 选项重新启动因服务器电源故障而中断的 RESTORE 操作。
复制代码
--
This database RESTORE halted prematurely due to power failure.
RESTORE
DATABASE MyAdvWorks
FROM
MyAdvWorks_1
--
Here is the RESTORE RESTART operation.
RESTORE
DATABASE MyAdvWorks
FROM
MyAdvWorks_1 WITH RESTART
D.
还原数据库并移动文件
以下示例还原完整数据库和事务日志,并将已还原的数据库移动到
C:\Program Files\Microsoft SQL Server\MSSQL\Data 目录下。
复制代码
RESTORE
DATABASE MyAdvWorks
FROM
MyAdvWorks_1
WITH
NORECOVERY,
MOVE
'
MyAdvWorks
'
TO
'
c:\Program
Files\Microsoft SQL Server\MSSQL\Data\NewAdvWorks.mdf
',
MOVE
'
MyAdvWorksLog1
'
TO
'
c:\Program
Files\Microsoft SQL Server\MSSQL\Data\NewAdvWorks.ldf
'
RESTORE
LOG MyAdvWorks
FROM
MyAdvWorksLog1
WITH
RECOVERY
E.
使用 BACKUP 和 RESTORE 创建数据库的副本
以下示例使用
BACKUP 和 RESTORE 语句创建 AdventureWorks 数据库的副本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新副本称为 TestDB。有关详细信息,请参阅 RESTORE FILELISTONLY (Transact-SQL)。
复制代码
BACKUP
DATABASE AdventureWorks
TO
DISK = '
C:\AdventureWorks.bak
'
RESTORE
FILELISTONLY
FROM
DISK = '
C:\AdventureWorks.bak
'
RESTORE
DATABASE TestDB
FROM
DISK = '
C:\AdventureWorks.bak
'
WITH
MOVE '
AdventureWorks_Data
'
TO '
C:\testdb.mdf
',
MOVE
'
AdventureWorks_Log
'
TO '
C:\testdb.ldf
'
GO
F.
使用 STOPAT 语法还原到时间点和使用多个设备进行还原
以下示例将数据库还原到它在
2005 年 4 月 15 日中午 12 点时的状态,并显示涉及多个日志和多个备份设备的还原操作。
复制代码
RESTORE
DATABASE MyAdvWorks
FROM
MyAdvWorks_1, MyAdvWorks_2
WITH
NORECOVERY, STOPAT = '
Apr
15, 2005 12:00 AM
'
RESTORE
LOG MyAdvWorks
FROM
MyAdvWorksLog1
WITH
NORECOVERY, STOPAT = '
Apr
15, 2005 12:00 AM
'
RESTORE
LOG MyAdvWorks
FROM
MyAdvWorksLog2
WITH
RECOVERY, STOPAT = '
Apr
15, 2005 12:00 AM
'
G.
将事务日志还原到标记
以下示例将事务日志还原到名为
ListPriceUpdate 的标记事务中的标记处。
复制代码
USE
AdventureWorks
GO
BEGIN
TRANSACTION ListPriceUpdate
WITH
MARK '
UPDATE
Product
list prices
'
GO
UPDATE
Production.Product
SET
ListPrice = ListPrice * 1.10
WHERE
ProductNumber LIKE '
BK-%
'
GO
COMMIT
TRANSACTION ListPriceUpdate
GO
--
Time passes. Regular database
--
and log backups are taken.
--
An error occurs.
USE
master
GO
RESTORE
DATABASE AdventureWorks
FROM
AdvWorks1
WITH
FILE = 3, NORECOVERY
GO
RESTORE
LOG AdventureWorks
FROM
AdvWorks1
WITH
FILE = 4,
STOPATMARK
= '
ListPriceUpdate
'
H.
使用 TAPE 语法还原
以下示例从
TAPE 备份设备还原完整数据库备份。
复制代码
RESTORE
DATABASE MyAdvWorks
FROM
TAPE = '
\\.\tape0
'
I.
使用 FILE 和 FILEGROUP 语法还原
以下示例还原一个包含两个文件、一个文件组和一个事务日志的数据库。
复制代码
RESTORE
DATABASE MyAdvWorks
FILE
= '
MyAdvWorks_data_1
',
FILE
= '
MyAdvWorks_data_2
',
FILEGROUP
= '
new_customers
'
FROM
MyAdvWorks_1
WITH
NORECOVERY
--
Restore the log backup.
RESTORE
LOG MyAdvWorks
FROM
MyAdvWorksLog1
J.
恢复到数据库快照
以下示例将数据库恢复到数据库快照。此示例假定该数据库当前仅存在一个快照。有关创建此数据库快照的示例,请参阅如何创建数据库快照
(Transact-SQL)。
注意:
恢复到快照将删除所有全文目录。
复制代码
USE
master
RESTORE
DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = '
AdventureWorks_dbss1800';
GO