数据库小结1

 一、基础

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”的最大值。

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐