【轉】經典SQL語句大全1

spectre2發表於2011-03-24

一、基礎

1、說明:建立資料庫
CREATE DATABASE database-name
2
、說明:刪除資料庫
drop database dbname

3、說明:備份sql server
--- 建立 備份資料的 device
USE master
EXEC sp_addumpdevice '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],..)

根據已有的表建立新表:
Acreate 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
、說明:使用外連線
Aleft 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
Bright outer join:
右外連線(右連線):結果集既包括連線表的匹配連線行,也包括右連線表的所有行。
Cfull/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、說明:子查詢(表名1a 表名2b)
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、說明:外連線查詢(表名1a 表名2b)
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、說明:線上檢視查詢(表名1a )
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 中但不在 TableBTableC 中的行並消除所有重複行而派生出一個結果表
(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、說明:列示typevenderpcs欄位,以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、說明:選擇從1015的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14184018/viewspace-690355/,如需轉載,請註明出處,否則將追究法律責任。

相關文章