‘壹’ sql的基本操作
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:
删除新表:drop table tabname
6、说明:
增加一个列:Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:
添加主键:Alter table tabname add primary key(col)
说明:
删除主键:Alter table tabname drop primary key(col)
8、说明:
创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:
创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
其次,大家来看一些不错的sql语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend
这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?
采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
随机读取若干条记录,测试过
Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql select * From 表名 Order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 用...代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute说明
Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
•RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
•Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。
•BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
资料引用:http://www.knowsky.com/398670.html
‘贰’ SQL基本操作语句
查询语句-select * from table;
select * from table where 条件1=数值 and 条件2=数值;
select * from table where id in (select id from table);两表关联
select a.a,b.b,c.c from table1 a,table2 b,table3 c where a.id1=b.id2;
插入语句-insert into table (字段1,字段2,字段3,……)
values (数值1,数值2,数值3,……);
更新语句-update 表名 set 数值 where=id = 1;
添加列语句-alter table 表名
add (列名1 类型1,列名2 类型2,列名3 类型3,……);
查询随机20条记录-select * from( select * from emp order by dbms_random.value) where rownum <= 10;
修改列类型-alter table 表名
modify (列名1 类型1,列名2 类型2,列名3 类型3,……);
删除列语句-alter table 表名
drop column 列名s;
显示查询时间-set timing on;
删除表语句-deltet table 表名;
清空表数据-truncate table 表名;
修改列名 - ALTER TABLE emp RENAME COLUMN comm TO newa;
集合查询(无重复):select * from table_name union
select * from table_name;
集合查询(有重复):select * from table_name union all
select * from table_name;
差 集 查 询:select * from table_name minus
select * from table_name;
--------------------------------------------------------------------------------
运行脚本-start d:\文件名.sql;
编辑脚本-edit d:\文件名.sql;
另存为脚本-spool d:\文件.sql;
select * from emp;
spool off;
分页显示-set pagesize 页数;
行数显示-set linesize 行数;
创建用户-create user 用户名 identified by 密码;(需要SYS/SYSTEM权限才能建立用户)
赋予权限-grant resource to 用户名;(建表权限)
赋予查询权限-grant select on emp to 用户名;
赋予修改权限-grant update on emp to 用户名;
赋予所有访问权限-grant all on emp to 用户名;
--------------------------------------------------------
收回查询权限-revoke select on emp from 用户名;
传递权限-grant select on emp to 用户名2 with grant option;
账户锁定-
creata profile 名称 limit failed_login_attcmpts 输入次数限制 password_lock_time 锁定天数;
------------------------------DBA权限登录
alter user 想要锁定的用户名 profile 名称;
------------------------------DBA权限登录
解锁用户锁定-alter user 用户名 account unlock;
定期修改密码-create profile 名字 limit password_life_time 天数 password_grace_time 宽限天数;
切换用户-conn system/密码;
更改密码-password 用户名;
删除用户-drop user 用户名 cascade(删除用户及用户建立的所有表);
查询同样结构两表中的不同数据-select * from emp_tmp where empno not in(select empno from emp);
select * from v$session;
select * from v$version;
定义函数:
---------函数说明 函数是计算数字平方;
FUNCTION y2
(inx2 number)
return number is
Result number(2);
begin
Result := inx2*inx2;
return(Result);
end y2;
---------函数说明 函数是输入汉字然后输出拼音;
FUNCTION HZ
(inputStr in VARCHAR2)
RETURN VARCHAR2 iS
outputStr varchar2(10);
BEGIN
SELECT c_spell INTO outputStr FROM BASE$CHINESE WHERE C_WORD = inputStr;
RETURN outputStr;
END hz;
----------函数说明 函数是计算累加自然月;
FUNCTION month
(inmonth number,
inaddmonth number)
return varchar2 is
Result varchar2(6);
begin
Result :=substr(to_char(add_months(to_date(inmonth,'yyyymm'),inaddmonth),'yyyymmdd'),1,6);
return(Result);
end month;
select to_char(add_months(trunc(sysdate),-1),'yyyymmdd') from al;--取上个月的日期;
select to_char((sysdate-30),'yyyymmdd') from al; ---去当前日期前30天日期;
ORACLE 随机数
DBMS_RANDOM.VALUE(low IN NUMBER,high IN NUMBER) RETURN NUMBER;
select round(dbms_random.value(x,x)) from al;
ORACLE 取当前时间并按毫秒计算
select systimestamp from al;
select * from cda_datasource---中继表
‘叁’ SQL数据库的简单操作
一 简单查询 简单的Transact SQL查询只包括选择列表 FROM子句和WHERE子句 它们分别说明所查询列 查询的 表或视图 以及搜索条件等 例如 下面的语句查询testtable表中姓名为 张三 的nickname字段和email字段 SELECT nickname emailFROM testtableWHERE name= 张三 (一)选择列表 选择列表(select_list)指出所查询列 它可以是一组列名列表 星号 表达式 变量(包括局部变量和全局变量)等构成 选择所有列例如 下面语句显示testtable表中所有列的数据 SELECT *FROM testtable 选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同 例如 SELECT nickname emailFROM testtable 更改列标题在选择列表中 可重新指定列标题 定义格式为 列标题=列名列名 列标题如果指定的列标题不是标准的标识符格式时 应使用引号定界符 例如 下列语句使用汉字显示列标题 SELECT 昵称=nickname 电子邮件=emailFROM testtable 删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行 默认为ALL 使用DISTINCT选项时 对于所有重复的数据行在SELECT返回的结果集合中只保留一行 限制返回的行数使用TOP n [PERCENT]选项限制返回的数据行数 TOP n说明返回n行 而TOP n PERCENT时 说明n是表示一百分数 指定返回的行数等于总行数的百分之几 例如 SELECT TOP *FROM testtable SELECT TOP PERCENT *FROM testtable(二)FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图 在FROM子句中最多可指定 个表或视图 它们之间用逗号分隔 在FROM子句同时指定多个表或视图时 如果选择列表中存在同名列 这时应使用对象名限定这些列所属的表或视图 例如在usertable和citytable表中同时存在cityid列 在查询两个表中的cityid时应使用下面语句格式加以限定 SELECT username citytable cityidFROM usertable citytableWHERE usertable cityid=citytable cityid在FROM子句中可用以下两种格式为表或视图指定别名 表名 as 别名表名 别名例如上面语句可用表的别名格式表示为 SELECT username b cityidFROM usertable a citytable bWHERE a cityid=b cityidSELECT不仅能从表或视图中检索数据 它还能够从其它查询语句所返回的结果集合中查询数据 例如 SELECT a au_fname+a au_lnameFROM authors a titleauthor ta(SELECT title_id titleFROM titlesWHERE ytd_sales> ) AS tWHERE a au_id=ta au_idAND ta title_id=t title_id此例中 将SELECT返回的结果集合给予一别名t 然后再从中检索数据 (三)使用WHERE子句设置查询条件 WHERE子句设置查询条件 过滤掉不需要的数据行 例如下面语句查询年龄大于 的数据 SELECT *FROM usertableWHERE age> WHERE子句可包括各种条件运算符 比较运算符(大小比较) > >= = < <= <> !> !<范围运算符(表达式值是否在指定的范围) BEEEN…AND…NOT BEEEN…AND…列表运算符(判断表达式是否为列表中的指定项) IN (项 项 ……)NOT IN (项 项 ……)模式匹配符(判断值是否与指定的字符通配格式相符):LIKE NOT LIKE空值判断符(判断表达式是否为空) IS NULL NOT IS NULL逻辑运算符(用于多条件的逻辑连接) NOT AND OR 范围运算符例 age BEEEN AND 相当于age>= AND age<= 列表运算符例 country IN ( Germany China ) 模式匹配符例 常用于模糊查找 它判断列值是否与指定的字符串格式相匹配 可用于char varchar text ntext datetime和 *** alldatetime等类型查询 可使用以下通配字符 百分号% 可匹配任意类型和长度的字符 如果是中文 请使用两个百分号即%% 下划线_ 匹配单个任意字符 它常用来限制表达式的字符长度 方括号[] 指定一个字符 字符串或范围 要求所匹配对象为它们中的任一个 [^] 其取值也[] 相同 但它要求所匹配对象为指定字符以外的任一个字符 例如 限制以Publishing结尾 使用LIKE %Publishing 限制以A开头 LIKE [A]% 限制以A开头外 LIKE [^A]% 空值判断符例WHERE age IS NULL 逻辑运算符 优先级为NOT AND OR(四)查询结果排序 使用ORDER BY子句对查询返回的结果按一列或多列排序 ORDER BY子句的语法格式为 ORDER BY {column_name [ASC|DESC]} [ …n]其中ASC表示升序 为默认值 DESC为降序 ORDER BY不能按ntext text和image数据类型进行排序 例如 SELECT *FROM usertableORDER BY age desc userid ASC另外 可以根据表达式进行排序 二 联合查询 UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示 即执行联合查询 UNION的语法格式为 select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement][…n]其中selectstatement为待联合的SELECT查询语句 ALL选项表示将所有行合并到结果集合中 不指定该项时 被联合查询结果集合中的重复行将只保留一行 联合查询时 查询结果的列标题为第一个查询语句的列标题 因此 要定义列标题必须在第一个查询语句中定义 要对联合查询结果排序时 也必须使用第一查询语句中的列名 列标题或者列序号 在使用UNION 运算符时 应保证每个联合查询语句的选择列表中有相同数量的表达式 并且每个查询选择表达式应具有相同的数据类型 或是可以自动将它们转换为相同的数据类型 在自动转换时 对于数值类型 系统将低精度的数据类型转换为高精度的数据类型 在包括多个查询的UNION语句中 其执行顺序是自左至右 使用括号可以改变这一执行顺序 例如 查询 UNION (查询 UNION 查询 )三 连接查询 通过连接运算符可以实现多个表查询 连接是关系数据库模型的主要特点 也是它区别于其它类型数据库管理系统的一个标志 在关系数据库管理系统中 表建立时各数据之间的关系不必确定 常把一个实体的所有信息存放在一个表中 当检索数据时 通过连接操作查询出存放在多个表中的不同实体的信息 连接操作给用户带来很大的灵活性 他们可以在任何时候增加新的数据类型 为不同实体创建新的表 尔后通过连接进行查询 连接可以在SELECT 语句的FROM子句或WHERE子句中建立 似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来 所以 在Transact SQL中推荐使用这种方法 SQL 标准所定义的FROM子句的连接语法格式为 FROM join_table join_type join_table[ON (join_condition)]其中join_table指出参与连接操作的表名 连接可以对同一个表操作 也可以对多表操作 对同一个表操作的连接又称做自连接 join_type 指出连接类型 可分为三种 内连接 外连接和交叉连接 内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作 并列出这些表中与连接条件相匹配的数据行 根据所使用的比较方式不同 内连接又分为等值连接 自然连接和不等连接三种 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种 与内连接不同的是 外连接不只列出与连接条件相匹配的行 而是列出左表(左外连接时) 右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行 交叉连接(CROSS JOIN)没有WHERE 子句 它返回连接表中所有数据行的笛卡尔积 其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数 连接操作中的ON (join_condition) 子句指出连接条件 它由被连接表中的列和比较运算符 逻辑运算符等构成 无论哪种连接都不能对text ntext和image数据类型列进行直接连接 但可以对这三种列进行间接连接 例如 SELECT p pub_id p pub_id p pr_infoFROM pub_info AS p INNER JOIN pub_info AS p ON DATALENGTH(p pr_info)=DATALENGTH(p pr_info)(一)内连接内连接查询操作列出与连接条件匹配的数据行 它使用比较运算符比较被连接列的列值 内连接分三种 等值连接 在连接条件中使用等于号(=)运算符比较被连接列的列值 其查询结果中列出被连接表中的所有列 包括其中的重复列 不等连接 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值 这些运算符包括> >= <= < !> ! 和> 自然连接 在连接条件中使用等于(=)运算符比较被连接列 lishixin/Article/program/SQLServer/201311/21994 <!-- /和 -->
‘肆’ SQL的基本语法
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left (outer) join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:Group by:
一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
13、对数据库进行操作:
分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb 'old_name', 'new_name'
二、提升
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1(仅用于SQlServer)
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
具体实现:
关于数据库分页:
declare @start int,@end int
@sql nvarchar(600)
set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’
exec sp_executesql @sql
注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段
alter table tablename
--添加一个自增列
add column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U' // U代表用户
21、说明:列出表里的所有的列名
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
‘伍’ 1. SQL的基本操作指令有哪些至少举出5个
列举几个吧
1、显示当前数据库服务器中的数据库列表:mysql> SHOW DATABASES;
2、建立数据库:mysql> CREATE DATABASE 库名;
3、建立数据表:mysql> USE 库名;mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
4、删除数据库:mysql> DROP DATABASE 库名;
5、删除数据表:mysql> DROP TABLE 表名;
6、将表中记录清空:mysql> DELETE FROM 表名;
7、往表中插入记录:mysql> INSERT INTO 表名 VALUES ("hyq","M");
8、更新表中数据:mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';
9、用文本方式将数据装入数据表中:mysql> load data local infile "d:/mysql.txt" into table 表名;
10、导入.sql文件命令:mysql> USE 数据库名;mysql> source d:/mysql.sql;
‘陆’ sql2000数据库的使用方法
此方法适合操作MSSQL2000
使用此方式的条件
(1)自己电脑安装MSSQL2000数据库
(2)您的网站和数据库在自己电脑调试成功
此方法是将远程服务器中的数据库备份到本地电脑的数据库或是将本地电脑数据库还原到远程服务器的数据库
( 以下将重点讲解如何把本地数据库还原到远程服务器的数据库,备份的方式和还原类似不再讲解)
1.连接上远程数据库服务器:a:打开自己电脑的MSSQL企业管理器--找到SQL Server 组--点击右键--新建SQL Server 注册(I)--下一步--在可用的服务器 下输入数据库的IP地址如192.168.0.1 点击添加和下一步---点击 系统管理员给我分配的SQL SERVER 登陆信息 和下一步-- 在登陆名内输入数据库名,在密码内输入数据库密码 点击下一步--继续点击下一步直到完成 这样就和远程的数据库建立了连接. 2.把本地数据库导入到远程数据库:打开刚建立的数据库服务器如192.168.0.1--点开数据库--找到自己的数据库名---右键---所有任务里的导入数据---下一步--到了选择数据源页---服务器中默认local 点使用 SQL Server身份验证,用户名输入sa 密码输入您电脑数据库的sa密码,数据库选择你要导入到远程数据库的原始数据库名,然后下一步---到了选择目的画面 服务器 选择您远程数据库的IP 比如192.168.0.1--点使用SQL Server 身份验证,用户名中输入您在我们公司开通的数据库名,密码中写上对应的数据库密码,数据库中选择您在本站开通的数据库,然后下一步---点 在SQL Server数据库之间复制对象和数据,下一步--到了选择要复制的对象画面,把使用默认选项前面的勾去掉,然后点击右边的 选项 ,把安全措施选项中的 3个选择前的勾全部去掉,然后确定,下一步--到了 保存、调度和复制包画面,把立即运行前 保证打上勾(选择上)--然后默认下一步 直到完成,本地电脑的数据库将自动复制到远程数据库。
‘柒’ SQL语言的基本操作方法实验报告:嵌套查询、集合查询,深刻领会视图的概念、实质和使用方法,SQL的9个动词
嵌套查询;一个select-from-where语句称为一个查询块。将一个查询块嵌套在另一个查询块的where字句或having短语的条件中的查询。
集合查询:标准SQL直接支持的集合操作种类 并操作(UNION),一般商用数据库支持的集合操作种类 并操作、叫操作、差操作。形式 :<查询块> UNION <查询块>
视图概念:视图时一个定制的虚拟表,它可以时本地的、远程的或带参数的。实质:一个虚拟表。使用方法:可以在项目管理器中浏览视图,或用命令。
SQL的9个动词 :
数据查询:SELECT (查询出数据,也可用于变量赋值)
数据定义(表/视图/查询/存储过程/自定义函数/索引/触发器等):CREATE (创建)、DROP(删除)、ALTER(修改)
数据操作:INSERT(插入)、UPDATE(更新)、DELETE(删除)
数据控制:Grant(授权)、revoke(回收权限)
‘捌’ SQL数据库常用命令及语法举例
下面是一些常用的SQL语句,虽然很基础,可是却很值得收藏,对于初学者非常实用
‘玖’ SQL数据库的操作
SQL包括了所有对数据库的操作,主要是由4个部分组成:
1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。
3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。
4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。
下面我们将分别介绍: SQL数据定义功能包括定义数据库、基本表、索引和视图。
首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^)
1.数据库的建立与删除
(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为:
CREATE DATABASE <数据库名> 〔其它参数〕
其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其它参数〕因具体数据库实现系统不同而异。
例:要建立项目管理数据库(xmmanage),其语句应为:
CREATE DATABASE xmmanage
(2)数据库的删除:将数据库及其全部内容从系统中删除。
其语句格式为:DROP DATABASE <数据库名>
例:删除项目管理数据库(xmmanage),其语句应为: DROP DATABASE xmmanage
2.基本表的定义及变更
本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。 SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。SQL中的查询语句只有一个:SELECT,它可与其它语句配合完成所有的查询功能。SELECT语句的完整语法,可以有6个子句。完整的语法如下:SELECT 目标表的列名或列表达式集合FROM 基本表或(和)视图集合〔WHERE条件表达式〕〔GROUP BY列名集合〔HAVING组条件表达式〕〕〔ORDER BY列名〔集合〕…〕
简单查询,使用TOP子句
查询结果排序order by
带条件的查询where,使用算术表达式,使用逻辑表达式,使用between关键字,使用in关键字,
模糊查询like
整个语句的语义如下:从FROM子句中列出的表中,选择满足WHERE子句中给出的条件表达式的元组,然后按GROUPBY子句(分组子句)中指定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出。ORDER子句(排序子句)是对输出的目标表进行重新排序,并可附加说明ASC(升序)或DESC(降序)排列。在WHERE子句中的条件表达式F中可出现下列操作符和运算函数:算术比较运算符:<,<=,>,>=,=,<>。逻辑运算符:AND,OR,NOT。集合运算符:UNION(并),INTERSECT(交),EXCEPT(差)。集合成员资格运算符:IN,NOT IN谓词:EXISTS(存在量词),ALL,SOME,UNIQUE。聚合函数:AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(计数)。F中运算对象还可以是另一个SELECT语句,即SELECT语句可以嵌套。上面只是列出了WHERE子句中可出现的几种主要操作,由于WHERE子句中的条件表达式可以很复杂,因此SELECT句型能表达的语义远比其数学原形要复杂得多。下面,我们以上面所建立的三个基本表为例,演示一下SELECT的应用:1.无条件查询例:找出所有学生的的选课情况SELECT st_no,su_noFROM score例:找出所有学生的情况SELECT*FROM student“*”为通配符,表示查找FROM中所指出关系的所有属性的值。2.条件查询条件查询即带有WHERE子句的查询,所要查询的对象必须满足WHERE子句给出的条件。例:找出任何一门课成绩在70以上的学生情况、课号及分数SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.scoreFROM student,scoreWHERE score.score>=70 AND score.stno=student,st_no这里使用UNIQUE是不从查询结果集中去掉重复行,如果使用DISTINCT则会去掉重复行。另外逻辑运算符的优先顺序为NOT→AND→OR。例:找出课程号为c02的,考试成绩不及格的学生SELECT st_noFROM scoreWHERE su_no=‘c02’AND score<603.排序查询排序查询是指将查询结果按指定属性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。例:查找不及格的课程,并将结果按课程号从大到小排列SELECT UNIQUE su_noFROM scoreWHERE score<60ORDER BY su_no DESC4.嵌套查询嵌套查询是指WHERE子句中又包含SELECT子句,它用于较复杂的跨多个基本表查询的情况。例:查找课程编号为c03且课程成绩在80分以上的学生的学号、姓名SELECT st_no,st_nameFROM studentWHERE stno IN (SELECT st_noFROM scoreWHERE su_no=‘c03’ AND score>80 )这里需要明确的是:当查询涉及多个基本表时用嵌套查询逐次求解层次分明,具有结构程序设计特点。在嵌套查询中,IN是常用到的谓词。若用户能确切知道内层查询返回的是单值,那么也可用算术比较运算符表示用户的要求。5.计算查询计算查询是指通过系统提供的特定函数(聚合函数)在语句中的直接使用而获得某些只有经过计算才能得到的结果。常用的函数有:COUNT(*) 计算元组的个数COUNT(列名) 对某一列中的值计算个数SUM(列名) 求某一列值的总和(此列值是数值型)AVG(列名) 求某一列值的平均值(此列值是数值型)MAX(列名) 求某一列值中的最大值MIN(列名) 求某一列值中的最小值例:求男学生的总人数和平均年龄SELECT COUNT(*),AVG(st_age)FROM studentWHERE st_sex=‘男’例:统计选修了课程的学生的人数SELECT COUNT(DISTINCT st_no)FROM score注意:这里一定要加入DISTINCT,因为有的学生可能选修了多门课程,但统计时只能按1人统计,所以要使用DISTINCT进行过滤。 由于数据库管理系统是一个多用户系统,为了控制用户对数据的存取权利,保持数据的共享及完全性,SQL语言提供了一系列的数据控制功能。其中,主要包括安全性控制、完整性控制、事务控制和并发控制。1.安全性控制数据的安全性是指保护数据库,以防非法使用造成数据泄露和破坏。保证数据安全性的主要方法是通过对数据库存取权力的控制来防止非法使用数据库中的数据。即限定不同用户操作不同的数据对象的权限。存取权控制包括权力的授予、检查和撤消。权力授予和撤消命令由数据库管理员或特定应用人员使用。系统在对数据库操作前,先核实相应用户是否有权在相应数据上进行所要求的操作。(1)权力授予:权力授有数据库管理员专用的授权和用户可用的授权两种形式。数据库管理员专用授权命令格式如下:|CONNECT |GRANT|RESOURCE|TO 用户名〔IDENTIFED BY 口令〕|DBA |其中,CONNECT表示数据库管理员允许指定的用户具有连接到数据库的权力,这种授权是针对新用户;RESOURCE表示允许用户建立自己的新关系模式,用户获得CONNECT权力后,必须获得RESOURCE权力才能创建自己的新表;DBA表示数据库管理员将自己的特权授予指定的用户。若要同时授予某用户上述三种授权中的多种权力,则必须通过三个相应的GRANT命令指定。另外,具有CONNECT和RESOURCE授权的用户可以建立自己的表,并在自己建立的表和视图上具有查询、插入、修改和删除的权力。但通常不能使用其他用户的关系,除非能获得其他用户转授给他的相应权力。例:若允许用户SSE连接到数据库并可以建立他自己的关系,则可通过如下命令授予权力:GRANT CONNECT TO SSE INENTIFIED BY BD1928GRANT RESOURCE TO SSE用户可用的授权是指用户将自己拥有的部分或全部权力转授给其他用户的命令形式,其命令格式如下:|SELECT ||INSERT ||DELETE |GRANT|UPDATE(列名1[,列名2]…)|ON|表名 |TO|用户名|〔WITH GRANT OPTION〕|ALTER | |视图名| |PUBLIC||NDEX ||ALL |若对某一用户同时授予多种操作权力,则操作命令符号可用“,”相隔。PUBLIC 表示将权力授予数据库的所有用户,使用时要注意:任选项WITH GRANT OPTION表示接到授权的用户,具有将其所得到的同时权力再转授给其他用户权力。例:如果将表student的查询权授予所有用户,可使用以下命令:GRANT SELECT ON student TO PUBLIC例:若将表subject的插入及修改权力授予用户SSE并使得他具有将这种权力转授他人的权力,则可使用以下命令:GRANT INSERT,UPDATE(su_subject) ON subject TO SSE WITH GRANT OPTION这里,UPDATE后面跟su_subject是指出其所能修改的列。(2)权力回收:权力回收是指回收指定用户原已授予的某些权力。与权力授予命令相匹配,权力回收也有数据库管理员专用和用户可用的两种形式。DBA专用的权力回收命令格式为:|CONNECT |REVOKE|RESOURCE|FROM用户名|DBA |用户可用的权力回收命令格式为:|SELECT ||INSERT ||DELETE |REVOKE|UPDATE(列名1〔,列名2〕…) |ON|表名 |FROM |用户名||ALTER | |视图名| |PUBLIC||INDEX ||ALL |例:回收用户SSE的DBA权力:REVOKE DBA FROM SSE2.完整性控制数据库的完整性是指数据的正确性和相容性,这是数据库理论中的重要概念。完整性控制的主要目的是防止语义上不正确的数据进入数据库。关系系统中的完整性约束条件包括实体完整性、参照完整性和用户定义完整性。而完整性约束条件的定义主要是通过CREATE TABLE语句中的〔CHECK〕子句来完成。另外,还有一些辅助命令可以进行数据完整性保护。如UNIQUE和NOT NULL,前者用于防止重复值进入数据库,后者用于防止空值。3.事务控制事务是并发控制的基本单位,也是恢复的基本单位。在SQL中支持事务的概念。所谓事务,是用户定义的一个操作序列(集合),这些操作要么都做,要么一个都不做,是一个不可分割的整体。一个事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。SQL提供了事务提交和事务撤消两种命令:(1)事务提交:事务提交的命令为:COMMIT 〔WORK〕事务提交标志着对数据库的某种应用操作成功地完成,所有对数据库的操作都必须作为事务提交给系统时才有效。事务一经提交就不能撤消。(2)事务撤消:事务撤消的命令是:ROLLBACK 〔WORK〕事务撤消标志着相应事务对数据库操作失败,因而要撤消对数据库的改变,即要“回滚”到相应事务开始时的状态。当系统非正常结束时(如掉电、系统死机),将自动执行ROLLBACK命令
‘拾’ SQL的基本操作(1.数据类型)
数据类型 数据类弄是数据的一种属性 表示数据所表示信息的类型 任何一种计算机语言都定义了自己的数据类型 当然 不同的程序语言都具有不同的特点 所定义的数据类型的各类和名称都或多或少有些不同 SQL Server 提供了 种数据类型 ·Binary [(n)] ·Varbinary [(n)] ·Char [(n)] ·Varchar[(n)] ·Nchar[(n)] ·Nvarchar[(n)] ·Datetime ·Smalldatetime ·Decimal[(p[ s])] ·Numeric[(p[ s])] ·Float[(n)] ·Real ·Int ·Smallint ·Tinyint ·Money ·Smallmoney ·Bit ·Cursor ·Sysname ·Timestamp ·Uniqueidentifier ·Text ·Image ·Ntext ( )二进制数据类型 二进制数据包括 Binary Varbinary 和 Image Binary 数据类型既可以是固定长度的(Binary) 也可以是变长度的 Binary[(n)] 是 n 位固定的二进制数据 其中 n 的取值范围是从 到 其存储窨的大小是 n + 个字节 Varbinary[(n)] 是 n 位变长度的二进制数弊李据 其中 n 的取值范围是从 到 其存储窨的大小是 n + 个字节 不是 n 个字节 在 Image 数据类型中存储的数据是以位字符串存储的 不是由 SQL Server 解释的 必须由应用程序来解释 例如 应用程序可以使用 BMP TIEF GIF 和 JPEG 格式把数据存储在 Image 数据类型中 ( )字符数据类型 字符数据的类型包括 Char Varchar 和 Text 字符数据是由任何字母 符号和数字任意组合而成的数据 Varchar 是变长字符数据 其长度不超过 KB Char 是定长字符数据 其长度最多为 KB 超过 KB 的ASCII 数据可以使用租槐迟Text 数据类型存储 例如 因为 Html 文档全部都是 ASCII 字符 并且在一般情况下长度超过 KB 所以这些文档可以 Text 数据类型存储在 SQL Server 中 ( )Unicode 数据类型 Unicode 数据类型包括 Nchar Nvarchar 和Ntext 在 Microsoft SQL Server 中 传统的非 Unicode 数据类型允许使用由特定字符集定义的字符 在 SQL Server 安装过程中 允许选择一种字符集 使用 Unicode 数据类型 列中可以存储任何由Unicode 标准定义的字符 在 Unicode 标准中 包括了以各种字符集定义的全部字符 使用Unicode 数据类型 所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍 在 SQL Server 中 Unicode 数据以 Nchar Nvarchar 和 Ntext 数据明禅类型存储 使用这种字符类型存储的列可以存储多个字符集中的字符 当列的长度变化时 应该使用 Nvarchar 字符类型 这时最多可以存储 个字符 当列的长度固定不变时 应该使用 Nchar 字符类型 同样 这时最多可以存储 个字符 当使用 Ntext 数据类型时 该列可以存储多于 个字符 ( )日期和时间数据类型 日期和时间数据类型包括 Datetime 和 Smalldatetime 两种类型 日期和时间数据类型由有效的日期和时间组成 例如 有效的日期和时间数据包括 / / : : : : PM 和 : : : : AM / / 前一个数据类型是日期在前 时间在后一个数据类型是霎时间在前 日期在后 在 Microsoft SQL Server 中 日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时 所存储的日期范围是从 年 月 日开始 到 年 月 日结束(每一个值要求 个存储字节) 使用 Smalldatetime 数据类型时 所存储的日期范围是 年 月 日 开始 到 年 月 日结束(每一个值要求 个存储字节) 日期的格式可以设定 设置日期格式的命令如下 Set DateFormat {format | @format _var| 其中 format | @format_var 是日期的顺序 有效的参数包括 MDY DMY YMD YDM MYD 和 DYM 在默认情况下 日期格式为 MDY 例如 当执行 Set DateFormat YMD 之后 日期的格式为年 月 日 形式 当执行 Set DateFormat DMY 之后 日期的格式为 日 月有年 形式 ( )数字数据类型 数字数据只包含数字 数字数据类型包括正数和负数 小数(浮点数)和整数 整数由正整数和负整数组成 例如 和 在 Micrsoft SQL Server 中 整数存储的数据类型是 Int Smallint 和 Tinyint Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围 而 Smallint 据类型存储数据的范围大于 Tinyint 数据类型存储数据的范围 使用 Int 数据狗昔存储数据的范围是从 到 (每一个值要求 个字节存储空间) 使用 Smallint 数据类型时 存储数据的范围从 到 (每一个值要求 个字节存储空间) 使用 Tinyint 数据类型时 存储数据的范围是从 到 (每一个值要求 个字节存储空间) 精确小娄数据在 SQL Server 中的数据类型是 Decimal 和 Numeric 这种数据所占的存储空间根据该数据的位数后的位数来确定 在SQL Server 中 近似小数数据的数据类型是 Float 和 Real 例如 三分之一这个分数记作 当使用近似数据类型时能准确表示 因此 从系统中检索到的数据可能与存储在该列中数据不完全一样 ( )货币数据表示正的或者负的货币数量 在 Microsoft SQL Server 中 货币数据的数据类型是Money 和 Smallmoney Money 数据类型要求 个存储字节 Smallmoney 数据类型要求 个存储字节 ( )特殊数据类型 特殊数据类型包括前面没有提过的数据类型 特殊的数据类型有 种 即 Timestamp Bit 和 Uniqueidentifier Timestamp 用于表示SQL Server 活动的先后顺序 以二进投影的格式表示 Timestamp 数据与插入数据或者日期和时间没有关系 Bit 由 或者 组成 当表示真或者假 ON 或者 OFF 时 使用 Bit 数据类型 例如 询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中 Uniqueidentifier 由 字节的十六进制数字组成 表示一个全局唯一的 当表的记录行要求唯一时 GUID是非常有用 例如 在客户标识号列使用这种数据类型可以区别不同的客户 用户定义的数据类型 用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型 当几个表中必须存储同一种数据类型时 并且为保证这些列有相同的数据类型 长度和可空性时 可以使用用户定义的数据类型 例如 可定义一种称为 postal_code 的数据类型 它基于 Char 数据类型 当创建用户定义的数据类型时 必须提供三个数 数据类型的名称 所基于的系统数据类型和数据类型的可空性 ( )创建用户定义的数据类型 创建用户定义的数据类型可以使用 Transact SQL 语句 系统存储过程 sp_addtype 可以来创建用户定义的数据类型 其语法形式如下 sp_addtype {type} [ system_data_bype][ null_type ] 其中 type 是用户定义的数据类型的名称 system_data_type 是系统提供的数据类型 例如 Decimal Int Char 等等 null_type 表示该数据类型是如何处理空值的 必须使用单引号引起来 例如 NULL NOT NULL 或者 NONULL 例子 Use cust Exec sp_addtype ssn Varchar( ) Not Null 创建一个用户定义的数据类型 ssn 其基于的系统数据类型是变长为 的字符 不允许空 例子 Use cust Exec sp_addtype birthday datetime Null 创建一个用户定义的数据类型 birthday 其基于的系统数据类型是 DateTime 允许空 例子 Use master Exec sp_addtype telephone varchar( ) Not Null Eexc sp_addtype fax varchar( ) Null 创建两个数据类型 即 telephone 和 fax ( )删除用户定义的数据类型 当用户定义的数据类型不需要时 可删除 删除用户定义的数据类型的命令是 sp_droptype { type } 例子 Use master Exec sp_droptype ssn 注意 当表中的列还正在使用用户定义的数据类型时 或者在其上面还绑定有默认或者规则时 这种用户定义的数据类型不能删除 lishixin/Article/program/SQLServer/201311/11231