回覆列表
  • 1 # 趣趣hsjdnkf

    一、基礎必會篇

    1、說明:建立資料庫

    CREATE DATABASE database-name

    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],…)

    根據已有的表建立新表:

    A:select * into table_new from table_old (使用舊錶建立新表)

    B:create table tab_new as select col1,col2… from tab_old definition only<僅適用於Oracle>

    drop table tabname

    A:alter table tabname add column col type

    B:alter table tabname drop column colname

    注:DB2DB2中列加上後資料型別也不能改變,唯一能改變的是增加varchar型別的長度。

    7、說明:新增主鍵: Alter table tabname add primary key(col)

    8、說明:建立索引:create [unique] index idxname on tabname(col….)

    9、說明:建立檢視:create view viewname as select statement

    10、說明:幾個簡單的基本的sql語句

    選擇:select * from table1 where 範圍

    插入:insert into table1(field1,field2) values(value1,value2)

    更新: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、說明:使用外連線

    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

    B:right (outer) join:

    右外連線(右連線):結果集既包括連線表的匹配連線行,也包括右連線表的所有行。

    C:full/cross (outer) join:

    全外連線:不僅包括符號連線表的匹配行,還包括兩個連線表中的所有記錄。

    13、分組:Group by:

    一張表,一旦分組 完成後,查詢後只能得到組相關的資訊。

    組相關的資訊:(統計資訊) count,sum,max,min,avg 分組的標準)

    在SQLServer中分組時:不能以text,ntext,image型別的欄位作為分組依據

    在selecte統計函式中的欄位,不能和普通的欄位放在一起;

    14、對資料庫進行操作:

    分離資料庫: sp_detach_db; 附加資料庫:sp_attach_db 後接表明,附加需要完整的路徑名

    15、如何修改資料庫的名稱:

    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、說明:子查詢(表名1:a 表名2:b)

    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、說明:外連線查詢(表名1:a 表名2:b)

    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、說明:線上檢視查詢(表名1:a )

    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’)

    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最大的記錄的所有資訊(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.

  • 中秋節和大豐收的關聯?
  • 如果岳飛抗金之前就事先知道了自己最終的悲慘結局,岳飛還會不會去參軍抗金?