数据库SQL
1、说明:创建数据库
CREATEDATABASEdatabase-name
2、说明:删除数据库
dropdatabasedbname
3、说明:备份sqlserver
---创建备份数据的device
USEmaster
EXECsp_addumpdevice'disk','testBack','c:/mssql7backup/MyNwind_1.dat'
---开始备份
BACKUPDATABASEpubsTOtestBack
4、说明:创建新表
createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)
根据已有的表创建新表:
A:createtabletab_newliketab_old(使用旧表创建新表)
B:createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly
5、说明:删除新表
droptabletabname
6、说明:增加一个列
Altertabletabnameaddcolumncoltype
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键:Altertabletabnameaddprimarykey(col)
说明:删除主键:Altertabletabnamedropprimarykey(col)
8、说明:创建索引:create[unique]indexidxnameontabname(col….)
删除索引:dropindexidxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:createviewviewnameasselectstatement
删除视图:dropviewviewname
10、说明:几个简单的基本的sql语句
选择:select*fromtable1where范围
插入:insertintotable1(field1,field2)values(value1,value2)
删除:deletefromtable1where范围
更新:updatetable1setfield1=value1where范围
查找:select*fromtable1wherefield1like’%value1%’---like的语法很精妙,查资料!
排序:select*fromtable1orderbyfield1,field2[desc]
总数:selectcountastotalcountfromtable1
求和:selectsum(field1)assumvaluefromtable1
平均:selectavg(field1)asavgvaluefromtable1
最大:selectmax(field1)asmaxvaluefromtable1
最小:selectmin(field1)asminvaluefromtable1
11、说明:几个高级查询运算词
A:UNION运算符
UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION一起使用时(即UNIONALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。
B:EXCEPT运算符
EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。当ALL随EXCEPT一起使用时(EXCEPTALL),不消除重复行。
C:INTERSECT运算符
INTERSECT运算符通过只包括TABLE1和TABLE2中都有的行并消除所有重复行而派生出一个结果表。当ALL随INTERSECT一起使用时(INTERSECTALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left(outer)join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
B:right(outer)join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross(outer)join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:Groupby:
一张表,一旦分组完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息)count,sum,max,min,avg分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
13、对数据库进行操作:
分离数据库:sp_detach_db;附加数据库:sp_attach_db后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb'old_name','new_name'
一、创建索引:
在SQLite中,创建索引的SQL语法和其他大多数关系型数据库基本相同,因为这里也仅仅是给出示例用法:
sqlite>CREATETABLEtesttable(first_colinteger,second_colinteger);
--创建最简单的索引,该索引基于某个表的一个字段。
sqlite>CREATEINDEXtesttable_idxONtesttable(first_col);
--创建联合索引,该索引基于某个表的多个字段,同时可以指定每个字段的排序规则(升序/降序)。
sqlite>CREATEINDEXtesttable_idx2ONtesttable(first_colASC,second_colDESC);
--创建唯一性索引,该索引规则和数据表的唯一性约束的规则相同,即NULL和任何值都不同,包括NULL本身。
sqlite>CREATEUNIQUEINDEXtesttable_idx3ONtesttable(second_colDESC);
sqlite>.indicestesttable
testtable_idx
testtable_idx2
testtable_idx3
从.indices命令的输出可以看出,三个索引均已成功创建。
二、删除索引:
索引的删除和视图的删除非常相似,含义也是如此,因此这里也只是给出示例:
sqlite>DROPINDEXtesttable_idx;
--如果删除不存在的索引将会导致操作失败,如果在不确定的情况下又不希望错误被抛出,可以使用"IFEXISTS"从句。
sqlite>DROPINDEXtesttable_idx;
Error:nosuchindex:testtable_idx
sqlite>DROPINDEXIFEXISTStesttable_idx;
三、重建索引:
重建索引用于删除已经存在的索引,同时基于其原有的规则重建该索引。这里需要说明的是,如果在REINDEX语句后面没有给出数据库名,那么当前连接下所有Attached数据库中所有索引都会被重建。如果指定了数据库名和表名,那么该表中的所有索引都会被重建,如果只是指定索引名,那么当前数据库的指定索引被重建。
--当前连接attached所有数据库中的索引都被重建。
sqlite>REINDEX;
--重建当前主数据库中testtable表的所有索引。
sqlite>REINDEXtesttable;
--重建当前主数据库中名称为testtable_idx2的索引。
sqlite>REINDEXtesttable_idx2;
四、数据分析:
和PostgreSQL非常相似,SQLite中的ANALYZE命令也同样用于分析数据表和索引中的数据,并将统计结果存放于SQLite的内部系统表中,以便于查询优化器可以根据分析后的统计数据选择最优的查询执行路径,从而提高整个查询的效率。见如下示例:
--如果在ANALYZE命令之后没有指定任何参数,则分析当前连接中所有Attached数据库中的表和索引。
sqlite>ANALYZE;
--如果指定数据库作为ANALYZE的参数,那么该数据库下的所有表和索引都将被分析并生成统计数据。
sqlite>ANALYZEmain;
--如果指定了数据库中的某个表或索引为ANALYZE的参数,那么该表和其所有关联的索引都将被分析。
sqlite>ANALYZEmain.testtable;
sqlite>ANALYZEmain.testtable_idx2;
五、数据清理:
和PostgreSQL中的VACUUM命令相比,他们的功能以及实现方式非常相似,不同的是PostgreSQL提供了更细的粒度,而SQLite只能将该命令作用于数据库,无法再精确到数据库中指定的数据表或者索引,然而这一点恰恰是PostgreSQL可以做到的。
当某个数据库中的一个或多个数据表存在大量的插入、更新和删除等操作时,将会有大量的磁盘空间被已删除的数据所占用,在没有执行VACUUM命令之前,SQLite并没有将它们归还于操作系统。由于该类数据表中的数据存储非常分散,因此在查询时,无法得到更好的批量IO读取效果,从而影响了查询效率。
在SQLite中,仅支持清理当前连接中的主数据库,而不能清理其它Attached数据库。VACUUM命令在完成数据清理时采用了和PostgreSQL相同的策略,即创建一个和当前数据库文件相同大小的新数据库文件,之后再将该数据库文件中的数据有组织的导入到新文件中,其中已经删除的数据块将不会被导入,在完成导入后,收缩新数据库文件的尺寸到适当的大小。该命令的执行非常简单,如:
sqlite>VACUUM;