一、基础
1、创建数据库
create database database-name
2、删除数据库
drop database dbname
3、备份sql server
— 创建 备份数据的 device
use master
exec sp_addumpdevice ‘disk’,’testback’, :\mssql7backup\mynwind_1.dat’ — 开始 备份
backup database pubs to testback
4、创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
例子:
create table tablea(
[id] [int] not null primary key,
[name][nvarchar](50) not null,
[age] [int] not null,)
根据已有的表创建新表:
a:create table tab_new like tab_old (使用旧表创建新表sql server2008不可以)
b:create table tab_new as select col1,col2… from tab_old definition only
c: select *into tableanew from tablea(复制表结构和表数据。旧表创建新表无主键。sql server2008r2可以用 亲测)
d:select * into table3 from tablea where 1=2;(复制表数据,主键复制不过去)
e: insert into table3 select * from tablea where id=1;(如果表存在,导入数据)
f: select * into table5 from tablea where 1<>1;(旧表创建新表,只有表结构)
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 table,
求和: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 运算符
ntersect 运算符通过只包括 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
在使用left join时,on和where条件的区别如下:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。可以理解为,左表记录保留,右表不满足条件的填写为null 2、where条件是在临时表生成好后,再对临时表进行过
滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
b:right (outer) join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有
行。
c:full/cross (outer) join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
13、分组:group by:
一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在sqlserver中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通字段放在一起;
14、对数据库进行操作:
分离数据库:exec sp_detach_db databasename
附加数据库:sp_attach_db后接表明,
需要完整的路径名
15.如何修改数据库的名称:
sp_renamedb ‘old_name’, ‘new_name’
16、左匹配、模糊、右匹配、全匹配
左匹配:左边开始是字段条件的比如1左匹配,就是1开头的字段
右匹配:右边开始是条件的
17、sql模糊查询条件的四种匹配模式
①、%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示:
例如 select * from [user] where u_name like ‘%三%’
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
再例如需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
select * from [user] where u_name like ‘%三%’ and u_name like ‘%猫%’
再例如 select * from [user] where u_name like ‘%三%猫%’
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。备注:%三:表示左匹配。三%:表示右匹配。%三%:表示模糊查询
②、_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
例如 select * from [user] where u_name like ‘_三_’
只找出“唐三藏”,这样u_name为三个字且中间一个字是“三”的;
再例如 select * from [user] where u_name like ‘三__’
只找出“三脚猫”这样name为三个字且第一个字是“三”的;
③、[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
例如 select * from [user] where u_name like ‘[张李王]三’
将找出“张三”、“李三”、“王三”(而不是“张李王三”);
再例如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
select * from [user] where u_name like ‘老[1-9]’
将找出“老1”、“老2”、……、“老9”;
如果要找“-”字符请将其放在首位:’张三[-1-9]’;
oracle 10g以上的版本用法为:
select * from flow_user where regexp_like(username, ‘[张王李]飞’)
④、[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
例如 select * from [user] where u_name like ‘[^张李王]三’
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
再例如 select * from [user] where u_name like ‘老[^1-4]’
将排除“老1”到“老4”,寻找“老5”、“老6”、……、“老9”。
注:oracle like 不支持正则,你可以使用支持like的正则regexp_like
⑤、查询内容包含通配符时
* 表示查找的是所有信息,例如select * from tbl_user
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
function sqlencode(str)
str=replace(str,”[“,”[[]”) ‘此句一定要在最前
str=replace(str,”_”,”[_]”)
str=replace(str,”%”,”[%]”)
。
sqlencode=str
end function
注:
在查询前将待查字符串先经该函数处理即可,并且在网页上连接数据库用到这类的查询语句时侯要注意:
例如 select * from user where name like ‘老[^1-4]’
18、
从table中查询“字段1+1”的最大值,如果“字段1+1”的最大值为null,则值取1,否则取“字段1+1”的最大值。