当前位置: 代码迷 >> SQL >> SQL话语精妙集合
  详细解决方案

SQL话语精妙集合

热度:82   发布时间:2016-05-05 13:10:15.0
SQL语句精妙集合
?1一、基础
??2
??31、说明:创建数据库
??4Create?DATABASE?database-name
??5
??62、说明:删除数据库
??7drop?database?dbname
??8
??93、说明:备份sql?server
?10---?创建?备份数据的?device
?11USE?master
?12EXEC?sp_addumpdevice?disk,?testBack,?c:\mssql7backup\MyNwind_1.dat
?13---?开始?备份
?14BACKUP?DATABASE?pubs?TO?testBack
?15
?164、说明:创建新表
?17create?table?tabname(col1?type1?[not?null]?[primary?key],col2?type2?[not?null],..)
?18根据已有的表创建新表:
?19A:create?table?tab_new?like?tab_old?(使用旧表创建新表)
?20B:create?table?tab_new?as?select?col1,col2…?from?tab_old?definition?only
?21
?225、说明:删除新表
?23drop?table?tabname
?24
?256、说明:增加一个列
?26Alter?table?tabname?add?column?col?type
?27注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
?28
?297、说明:添加主键:?Alter?table?tabname?add?primary?key(col)
?30说明:删除主键:?Alter?table?tabname?drop?primary?key(col)
?31
?328、说明:创建索引:create?[unique]?index?idxname?on?tabname(col….)
?33删除索引:drop?index?idxname
?34注:索引是不可更改的,想更改必须删除重新建。
?35
?369、说明:创建视图:create?view?viewname?as?select?statement
?37删除视图:drop?view?viewname
?38
?3910、说明:几个简单的基本的sql语句
?40选择:select?*?from?table1?where?范围
?41插入:insert?into?table1(field1,field2)?values(value1,value2)
?42删除:delete?from?table1?where?范围
?43更新:update?table1?set?field1=value1?where?范围
?44查找:select?*?from?table1?where?field1?like?’%value1%’?---like的语法很精妙,查资料!
?45排序:select?*?from?table1?order?by?field1,field2?[desc]
?46总数:select?count?as?totalcount?from?table1
?47求和:select?sum(field1)?as?sumvalue?from?table1
?48平均:select?avg(field1)?as?avgvalue?from?table1
?49最大:select?max(field1)?as?maxvalue?from?table1
?50最小:select?min(field1)?as?minvalue?from?table1
?51
?5211、说明:几个高级查询运算词
?53A:?UNION?运算符
?54UNION?运算符通过组合其他两个结果表(例如?TABLE1?和?TABLE2)并消去表中任何重复行而派生出一个结果表。当?ALL?随?UNION?一起使用时(即?UNION?ALL),不消除重复行。两种情况下,派生表的每一行不是来自?TABLE1?就是来自?TABLE2。
?55B:?EXCEPT?运算符
?56EXCEPT?运算符通过包括所有在?TABLE1?中但不在?TABLE2?中的行并消除所有重复行而派生出一个结果表。当?ALL?随?EXCEPT?一起使用时?(EXCEPT?ALL),不消除重复行。
?57C:?INTERSECT?运算符
?58INTERSECT?运算符通过只包括?TABLE1?和?TABLE2?中都有的行并消除所有重复行而派生出一个结果表。当?ALL?随?INTERSECT?一起使用时?(INTERSECT?ALL),不消除重复行。
?59注:使用运算词的几个查询结果行必须是一致的。
?60
?6112、说明:使用外连接
?62A、left?outer?join
?63左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
?64SQL:?select?a.a,?a.b,?a.c,?b.c,?b.d,?b.f?from?a?LEFT?OUT?JOIN?b?ON?a.a?=?b.c
?65B:right?outer?join:
?66右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
?67C:full?outer?join
?68全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
?69
?70二、提升
?71
?721、说明:复制表(只复制结构,源表名:a?新表名:b)?(Access可用)
?73法一:select?*?into?b?from?a?where?1<>1
?74法二:select?top?0?*?into?b?from?a
?75
?762、说明:拷贝表(拷贝数据,源表名:a?目标表名:b)?(Access可用)
?77insert?into?b(a,?b,?c)?select?d,e,f?from?b;
?78
?793、说明:跨数据库之间表的拷贝(具体数据使用绝对路径)?(Access可用)
?80insert?into?b(a,?b,?c)?select?d,e,f?from?b?in?‘具体数据库’?where?条件
?81例子:..from?b?in?&Server.MapPath(.)&\data.mdb?&?where..
?82
?834、说明:子查询(表名1:a?表名2:b)
?84select?a,b,c?from?a?where?a?IN?(select?d?from?b?)?或者:?select?a,b,c?from?a?where?a?IN?(1,2,3)
?85
?865、说明:显示文章、提交人和最后回复时间
?87select?a.title,a.username,b.adddate?from?table?a,(select?max(adddate)?adddate?from?table?where?table.title=a.title)?b
?88
?896、说明:外连接查询(表名1:a?表名2:b)
?90select?a.a,?a.b,?a.c,?b.c,?b.d,?b.f?from?a?LEFT?OUT?JOIN?b?ON?a.a?=?b.c
?91
?927、说明:在线视图查询(表名1:a?)
?93select?*?from?(Select?a,b,c?FROM?a)?T?where?t.a?>?1;
?94
?958、说明:between的用法,between限制查询数据范围时包括了边界值,not?between不包括
?96select?*?from?table1?where?time?between?time1?and?time2
?97select?a,b,c,?from?table1?where?a?not?between?数值1?and?数值2
?98
?999、说明:in?的使用方法
100select?*?from?table1?where?a?[not]?in?(‘值1’,’值2’,’值4’,’值6’)
101
10210、说明:两张关联表,删除主表中已经在副表中没有的信息
103delete?from?table1?where?not?exists?(?select?*?from?table2?where?table1.field1=table2.field1?)
104
10511、说明:四表联查问题:
106select?*?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?..
107
10812、说明:日程安排提前五分钟提醒
109SQL:?select?*?from?日程安排?where?datediff(minute,f开始时间,getdate())>5
110
11113、说明:一条sql?语句搞定数据库分页
112select?top?10?b.*?from?(select?top?20?主键字段,排序字段?from?表名?order?by?排序字段?desc)?a,表名?b?where?b.主键字段?=?a.主键字段?order?by?a.排序字段
113
11414、说明:前10条记录
115select?top?10?*?form?table1?where?范围
116
11715、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
118select?a,b,c?from?tablename?ta?where?a=(select?max(a)?from?tablename?tb?where?tb.b=ta.b)
119
12016、说明:包括所有在?TableA?中但不在?TableB和TableC?中的行并消除所有重复行而派生出一个结果表
121(select?a?from?tableA?)?except?(select?a?from?tableB)?except?(select?a?from?tableC)
122
12317、说明:随机取出10条数据
124select?top?10?*?from?tablename?order?by?newid()
125
12618、说明:随机选择记录
127select?newid()
128
12919、说明:删除重复记录
130Delete?from?tablename?where?id?not?in?(select?max(id)?from?tablename?group?by?col1,col2,)
131
13220、说明:列出数据库里所有的表名
133select?name?from?sysobjects?where?type=U
134
13521、说明:列出表里的所有的
136select?name?from?syscolumns?where?id=object_id(TableName)
137
13822、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select?中的case。
139select?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
140显示结果:
141type?vender?pcs
142电脑?A?1
143电脑?A?1
144光盘?B?2
145光盘?A?
  相关解决方案