一、基礎 1、創建資料庫 CREATE DATABASE database-name 2、刪除資料庫 drop database dbname 3、備份sql server 創建 備份數據的 device USE master EXEC sp_addumpdevice 'disk',’testBac ...
一、基礎
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、select isnull(max(欄位1+1),1) from table
從table中查詢“欄位1+1”的最大值,如果“欄位1+1”的最大值為null,則值取1,否則取“欄位1+1”的最大值。