當前位置:首頁 » 編程語言 » sql基本操作方法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql基本操作方法

發布時間: 2023-05-14 11:08:12

『壹』 sql的基本操作

1、說明:創建資料庫

CREATE DATABASE database-name

2、說明:刪除資料庫

drop database dbname

3、說明:備份sql server

--- 創建 備份數據的 device

USE master

EXEC sp_admpdevice '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:create 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、說明:使用外連接

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 outer join:

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

其次,大家來看一些不錯的sql語句

1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1

法二: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』)

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.排序欄位

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 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表

(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、說明:刪除重復記錄

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、說明:列出資料庫里所有的表名

select name from sysobjects where type='U'

21、說明:列出表裡的所有的

select name from syscolumns where id=object_id('TableName')

22、說明:列示type、vender、pcs欄位,以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、說明:選擇從10到15的記錄

select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

隨機選擇資料庫記錄的方法(使用Randomize函數,通過SQL語句實現)

存儲在資料庫中的數據來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP「找個隨機數」然後列印出來。實際上常見的解決方案是建立如下所示的循環:

Randomize

RNumber = Int(Rnd*499) +1

While Not objRec.EOF

If objRec("ID") = RNumber THEN

... 這里是執行腳本 ...

end if

objRec.MoveNext

Wend

這很容易理解。首先,你取出1到500范圍之內的一個隨機數(假設500就是資料庫內記錄的總數)。然後,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執行由THEN 關鍵字開始的那一塊代碼。假如你的RNumber 等於495,那麼要循環一遍資料庫花的時間可就長了。雖然500這個數字看起來大了些,但相比更為穩固的企業解決方案這還是個小型資料庫了,後者通常在一個資料庫內就包含了成千上萬條記錄。這時候不就死定了?

採用SQL,你就可以很快地找出准確的記錄並且打開一個只包含該記錄的recordset,如下所示:

Randomize

RNumber = Int(Rnd*499) + 1

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber

set objRec = ObjConn.Execute(SQL)

Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")

不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作「隨機」記錄。Recordset沒有包含其他內容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。

再談隨機數

現在你下定決心要榨乾Random 函數的最後一滴油,那麼你可能會一次取出多條隨機記錄或者想採用一定隨機范圍內的記錄。把上面的標准Random 示例擴展一下就可以用SQL應對上面兩種情況了。

為了取出幾條隨機選擇的記錄並存放在同一recordset內,你可以存儲三個隨機數,然後查詢資料庫獲得匹配這些數字的記錄:

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3

假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數學等式選出第一條記錄和適當數量的遞增記錄。這一操作可以通過好幾種方式來完成,但是 SELECT 語句只顯示一種可能(這里的ID 是自動生成的號碼):

SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

注意:以上代碼的執行目的不是檢查資料庫內是否有9條並發記錄。

隨機讀取若干條記錄,測試過

Access語法:SELECT top 10 * From 表名 ORDER BY Rnd(id)

Sql server:select top n * from 表名 order by newid()

mysql select * From 表名 Order By rand() Limit n

Access左連接語法(最近開發要用左連接,Access幫助什麼都沒有,網上沒有Access的SQL說明,只有自己測試, 現在記下以備後查)

語法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

使用SQL語句 用...代替過長的字元串顯示

語法:

SQL資料庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename

Access資料庫:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;

Conn.Execute說明

Execute方法

該方法用於執行SQL語句。根據SQL語句執行後是否返回記錄集,該方法的使用格式分為以下兩種:

1.執行SQL查詢語句時,將返回查詢得到的記錄集。用法為:

Set 對象變數名=連接對象.Execute("SQL 查詢語言")

Execute方法調用後,會自動創建記錄集對象,並將查詢結果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以後對象變數就代表了該記錄集對象。

2.執行SQL的操作性語言時,沒有記錄集的返回。此時用法為:

連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]

•RecordAffected 為可選項,此出可放置一個變數,SQL語句執行後,所生效的記錄數會自動保存到該變數中。通過訪問該變數,就可知道SQL語句隊多少條記錄進行了操作。

•Option 可選項,該參數的取值通常為adCMDText,它用於告訴ADO,應該將Execute方法之後的第一個字元解釋為命令文本。通過指定該參數,可使執行更高效。

•BeginTrans、RollbackTrans、CommitTrans方法

這三個方法是連接對象提供的用於事務處理的方法。BeginTrans用於開始一個事物;RollbackTrans用於回滾事務;CommitTrans用於提交所有的事務處理結果,即確認事務的處理。

事務處理可以將一組操作視為一個整體,只有全部語句都成功執行後,事務處理才算成功;若其中有一個語句執行失敗,則整個處理就算失敗,並恢復到處里前的狀態。

BeginTrans和CommitTrans用於標記事務的開始和結束,在這兩個之間的語句,就是作為事務處理的語句。判斷事務處理是否成功,可通過連接對象的Error集合來實現,若Error集合的成員個數不為0,則說明有錯誤發生,事務處理失敗。Error集合中的每一個Error對象,代表一個錯誤信息。

資料引用:http://www.knowsky.com/398670.html

『貳』 SQL基本操作語句

查詢語句-select * from table;
select * from table where 條件1=數值 and 條件2=數值;
select * from table where id in (select id from table);兩表關聯
select a.a,b.b,c.c from table1 a,table2 b,table3 c where a.id1=b.id2;
插入語句-insert into table (欄位1,欄位2,欄位3,……)
values (數值1,數值2,數值3,……);
更新語句-update 表名 set 數值 where=id = 1;

添加列語句-alter table 表名
add (列名1 類型1,列名2 類型2,列名3 類型3,……);

查詢隨機20條記錄-select * from( select * from emp order by dbms_random.value) where rownum <= 10;
修改列類型-alter table 表名
modify (列名1 類型1,列名2 類型2,列名3 類型3,……);
刪除列語句-alter table 表名
drop column 列名s;
顯示查詢時間-set timing on;

刪除表語句-deltet table 表名;

清空表數據-truncate table 表名;

修改列名 - ALTER TABLE emp RENAME COLUMN comm TO newa;

集合查詢(無重復):select * from table_name union
select * from table_name;
集合查詢(有重復):select * from table_name union all
select * from table_name;
差 集 查 詢:select * from table_name minus
select * from table_name;

--------------------------------------------------------------------------------
運行腳本-start d:\文件名.sql;

編輯腳本-edit d:\文件名.sql;

另存為腳本-spool d:\文件.sql;
select * from emp;
spool off;

分頁顯示-set pagesize 頁數;

行數顯示-set linesize 行數;

創建用戶-create user 用戶名 identified by 密碼;(需要SYS/SYSTEM許可權才能建立用戶)
賦予許可權-grant resource to 用戶名;(建表許可權)
賦予查詢許可權-grant select on emp to 用戶名;
賦予修改許可權-grant update on emp to 用戶名;
賦予所有訪問許可權-grant all on emp to 用戶名;
--------------------------------------------------------
收回查詢許可權-revoke select on emp from 用戶名;
傳遞許可權-grant select on emp to 用戶名2 with grant option;
賬戶鎖定-
creata profile 名稱 limit failed_login_attcmpts 輸入次數限制 password_lock_time 鎖定天數;
------------------------------DBA許可權登錄
alter user 想要鎖定的用戶名 profile 名稱;
------------------------------DBA許可權登錄
解鎖用戶鎖定-alter user 用戶名 account unlock;
定期修改密碼-create profile 名字 limit password_life_time 天數 password_grace_time 寬限天數;

切換用戶-conn system/密碼;
更改密碼-password 用戶名;
刪除用戶-drop user 用戶名 cascade(刪除用戶及用戶建立的所有表);

查詢同樣結構兩表中的不同數據-select * from emp_tmp where empno not in(select empno from emp);

select * from v$session;
select * from v$version;

定義函數:
---------函數說明 函數是計算數字平方;
FUNCTION y2
(inx2 number)
return number is
Result number(2);
begin

Result := inx2*inx2;

return(Result);
end y2;

---------函數說明 函數是輸入漢字然後輸出拼音;
FUNCTION HZ
(inputStr in VARCHAR2)
RETURN VARCHAR2 iS
outputStr varchar2(10);
BEGIN
SELECT c_spell INTO outputStr FROM BASE$CHINESE WHERE C_WORD = inputStr;
RETURN outputStr;
END hz;
----------函數說明 函數是計算累加自然月;
FUNCTION month
(inmonth number,
inaddmonth number)
return varchar2 is
Result varchar2(6);
begin

Result :=substr(to_char(add_months(to_date(inmonth,'yyyymm'),inaddmonth),'yyyymmdd'),1,6);

return(Result);
end month;

select to_char(add_months(trunc(sysdate),-1),'yyyymmdd') from al;--取上個月的日期;
select to_char((sysdate-30),'yyyymmdd') from al; ---去當前日期前30天日期;

ORACLE 隨機數
DBMS_RANDOM.VALUE(low IN NUMBER,high IN NUMBER) RETURN NUMBER;
select round(dbms_random.value(x,x)) from al;

ORACLE 取當前時間並按毫秒計算
select systimestamp from al;

select * from cda_datasource---中繼表

『叄』 SQL資料庫的簡單操作

一 簡單查詢 簡單的Transact SQL查詢只包括選擇列表 FROM子句和WHERE子句 它們分別說明所查詢列 查詢的 表或視圖 以及搜索條件等 例如 下面的語句查詢testtable表中姓名為 張三 的nickname欄位和email欄位 SELECT nickname emailFROM testtableWHERE name= 張三 (一)選擇列表 選擇列表(select_list)指出所查詢列 它可以是一組列名列表 星號 表達式 變數(包括局部變數和全局變數)等構成 選擇所有列例如 下面語句顯示testtable表中所有列的數據 SELECT *FROM testtable 選擇部分列並指定它們的顯示次序查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同 例如 SELECT nickname emailFROM testtable 更改列標題在選擇列表中 可重新指定列標題 定義格式為 列標題=列名列名 列標題如果指定的列標題不是標準的標識符格式時 應使用引號定界符 例如 下列語句使用漢字顯示列標題 SELECT 昵稱=nickname 電子郵件=emailFROM testtable 刪除重復行SELECT語句中使用ALL或DISTINCT選項來顯示表中符合條件的所有行或刪除其中重復的數據行 默認為ALL 使用DISTINCT選項時 對於所有重復的數據行在SELECT返回的結果集合中只保留一行 限制返回的行數使用TOP n [PERCENT]選項限制返回的數據行數 TOP n說明返回n行 而TOP n PERCENT時 說明n是表示一百分數 指定返回的行數等於總行數的百分之幾 例如 SELECT TOP *FROM testtable SELECT TOP PERCENT *FROM testtable(二)FROM子句 FROM子句指定SELECT語句查詢及與查詢相關的表或視圖 在FROM子句中最多可指定 個表或視圖 它們之間用逗號分隔 在FROM子句同時指定多個表或視圖時 如果選擇列表中存在同名列 這時應使用對象名限定這些列所屬的表或視圖 例如在usertable和citytable表中同時存在cityid列 在查詢兩個表中的cityid時應使用下面語句格式加以限定 SELECT username citytable cityidFROM usertable citytableWHERE usertable cityid=citytable cityid在FROM子句中可用以下兩種格式為表或視圖指定別名 表名 as 別名表名 別名例如上面語句可用表的別名格式表示為 SELECT username b cityidFROM usertable a citytable bWHERE a cityid=b cityidSELECT不僅能從表或視圖中檢索數據 它還能夠從其它查詢語句所返回的結果集合中查詢數據 例如 SELECT a au_fname+a au_lnameFROM authors a titleauthor ta(SELECT title_id titleFROM titlesWHERE ytd_sales> ) AS tWHERE a au_id=ta au_idAND ta title_id=t title_id此例中 將SELECT返回的結果集合給予一別名t 然後再從中檢索數據 (三)使用WHERE子句設置查詢條件 WHERE子句設置查詢條件 過濾掉不需要的數據行 例如下面語句查詢年齡大於 的數據 SELECT *FROM usertableWHERE age> WHERE子句可包括各種條件運算符 比較運算符(大小比較) > >= = < <= <> !> !<范圍運算符(表達式值是否在指定的范圍) BEEEN…AND…NOT BEEEN…AND…列表運算符(判斷表達式是否為列表中的指定項) IN (項 項 ……)NOT IN (項 項 ……)模式匹配符(判斷值是否與指定的字元通配格式相符):LIKE NOT LIKE空值判斷符(判斷表達式是否為空) IS NULL NOT IS NULL邏輯運算符(用於多條件的邏輯連接) NOT AND OR 范圍運算符例 age BEEEN AND 相當於age>= AND age<= 列表運算符例 country IN ( Germany China ) 模式匹配符例 常用於模糊查找 它判斷列值是否與指定的字元串格式相匹配 可用於char varchar text ntext datetime和 *** alldatetime等類型查詢 可使用以下通配字元 百分號% 可匹配任意類型和長度的字元 如果是中文 請使用兩個百分號即%% 下劃線_ 匹配單個任意字元 它常用來限製表達式的字元長度 方括弧[] 指定一個字元 字元串或范圍 要求所匹配對象為它們中的任一個 [^] 其取值也[] 相同 但它要求所匹配對象為指定字元以外的任一個字元 例如 限制以Publishing結尾 使用LIKE %Publishing 限制以A開頭 LIKE [A]% 限制以A開頭外 LIKE [^A]% 空值判斷符例WHERE age IS NULL 邏輯運算符 優先順序為NOT AND OR(四)查詢結果排序 使用ORDER BY子句對查詢返回的結果按一列或多列排序 ORDER BY子句的語法格式為 ORDER BY {column_name [ASC|DESC]} [ …n]其中ASC表示升序 為默認值 DESC為降序 ORDER BY不能按ntext text和image數據類型進行排序 例如 SELECT *FROM usertableORDER BY age desc userid ASC另外 可以根據表達式進行排序 二 聯合查詢 UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合並成一個結果集合顯示 即執行聯合查詢 UNION的語法格式為 select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement][…n]其中selectstatement為待聯合的SELECT查詢語句 ALL選項表示將所有行合並到結果集合中 不指定該項時 被聯合查詢結果集合中的重復行將只保留一行 聯合查詢時 查詢結果的列標題為第一個查詢語句的列標題 因此 要定義列標題必須在第一個查詢語句中定義 要對聯合查詢結果排序時 也必須使用第一查詢語句中的列名 列標題或者列序號 在使用UNION 運算符時 應保證每個聯合查詢語句的選擇列表中有相同數量的表達式 並且每個查詢選擇表達式應具有相同的數據類型 或是可以自動將它們轉換為相同的數據類型 在自動轉換時 對於數值類型 系統將低精度的數據類型轉換為高精度的數據類型 在包括多個查詢的UNION語句中 其執行順序是自左至右 使用括弧可以改變這一執行順序 例如 查詢 UNION (查詢 UNION 查詢 )三 連接查詢 通過連接運算符可以實現多個表查詢 連接是關系資料庫模型的主要特點 也是它區別於其它類型資料庫管理系統的一個標志 在關系資料庫管理系統中 表建立時各數據之間的關系不必確定 常把一個實體的所有信息存放在一個表中 當檢索數據時 通過連接操作查詢出存放在多個表中的不同實體的信息 連接操作給用戶帶來很大的靈活性 他們可以在任何時候增加新的數據類型 為不同實體創建新的表 爾後通過連接進行查詢 連接可以在SELECT 語句的FROM子句或WHERE子句中建立 似是而非在FROM子句中指出連接時有助於將連接操作與WHERE子句中的搜索條件區分開來 所以 在Transact SQL中推薦使用這種方法 SQL 標准所定義的FROM子句的連接語法格式為 FROM join_table join_type join_table[ON (join_condition)]其中join_table指出參與連接操作的表名 連接可以對同一個表操作 也可以對多表操作 對同一個表操作的連接又稱做自連接 join_type 指出連接類型 可分為三種 內連接 外連接和交叉連接 內連接(INNER JOIN)使用比較運算符進行表間某(些)列數據的比較操作 並列出這些表中與連接條件相匹配的數據行 根據所使用的比較方式不同 內連接又分為等值連接 自然連接和不等連接三種 外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN) 右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種 與內連接不同的是 外連接不只列出與連接條件相匹配的行 而是列出左表(左外連接時) 右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行 交叉連接(CROSS JOIN)沒有WHERE 子句 它返回連接表中所有數據行的笛卡爾積 其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數 連接操作中的ON (join_condition) 子句指出連接條件 它由被連接表中的列和比較運算符 邏輯運算符等構成 無論哪種連接都不能對text ntext和image數據類型列進行直接連接 但可以對這三種列進行間接連接 例如 SELECT p pub_id p pub_id p pr_infoFROM pub_info AS p INNER JOIN pub_info AS p ON DATALENGTH(p pr_info)=DATALENGTH(p pr_info)(一)內連接內連接查詢操作列出與連接條件匹配的數據行 它使用比較運算符比較被連接列的列值 內連接分三種 等值連接 在連接條件中使用等於號(=)運算符比較被連接列的列值 其查詢結果中列出被連接表中的所有列 包括其中的重復列 不等連接 在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值 這些運算符包括> >= <= < !> ! 和> 自然連接 在連接條件中使用等於(=)運算符比較被連接列 lishixin/Article/program/SQLServer/201311/21994 <!-- /和 -->

『肆』 SQL的基本語法

一、基礎
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice '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:create 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、說明:使用外連接
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:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
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、說明:子查詢(表名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』)
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 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(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、說明:列示type、vender、pcs欄位,以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、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

『伍』 1. SQL的基本操作指令有哪些至少舉出5個

列舉幾個吧
1、顯示當前資料庫伺服器中的資料庫列表:mysql> SHOW DATABASES;
2、建立資料庫:mysql> CREATE DATABASE 庫名;
3、建立數據表:mysql> USE 庫名;mysql> CREATE TABLE 表名 (欄位名 VARCHAR(20), 欄位名 CHAR(1));
4、刪除資料庫:mysql> DROP DATABASE 庫名;
5、刪除數據表:mysql> DROP TABLE 表名;
6、將表中記錄清空:mysql> DELETE FROM 表名;
7、往表中插入記錄:mysql> INSERT INTO 表名 VALUES ("hyq","M");
8、更新表中數據:mysql-> UPDATE 表名 SET 欄位名1='a',欄位名2='b' WHERE 欄位名3='c';
9、用文本方式將數據裝入數據表中:mysql> load data local infile "d:/mysql.txt" into table 表名;
10、導入.sql文件命令:mysql> USE 資料庫名;mysql> source d:/mysql.sql;

『陸』 sql2000資料庫的使用方法

此方法適合操作MSSQL2000

使用此方式的條件
(1)自己電腦安裝MSSQL2000資料庫
(2)您的網站和資料庫在自己電腦調試成功
此方法是將遠程伺服器中的資料庫備份到本地電腦的資料庫或是將本地電腦資料庫還原到遠程伺服器的資料庫
( 以下將重點講解如何把本地資料庫還原到遠程伺服器的資料庫,備份的方式和還原類似不再講解)
1.連接上遠程資料庫伺服器:a:打開自己電腦的MSSQL企業管理器--找到SQL Server 組--點擊右鍵--新建SQL Server 注冊(I)--下一步--在可用的伺服器 下輸入資料庫的IP地址如192.168.0.1 點擊添加和下一步---點擊 系統管理員給我分配的SQL SERVER 登陸信息 和下一步-- 在登陸名內輸入資料庫名,在密碼內輸入資料庫密碼 點擊下一步--繼續點擊下一步直到完成 這樣就和遠程的資料庫建立了連接. 2.把本地資料庫導入到遠程資料庫:打開剛建立的資料庫伺服器如192.168.0.1--點開資料庫--找到自己的資料庫名---右鍵---所有任務里的導入數據---下一步--到了選擇數據源頁---伺服器中默認local 點使用 SQL Server身份驗證,用戶名輸入sa 密碼輸入您電腦資料庫的sa密碼,資料庫選擇你要導入到遠程資料庫的原始資料庫名,然後下一步---到了選擇目的畫面 伺服器 選擇您遠程資料庫的IP 比如192.168.0.1--點使用SQL Server 身份驗證,用戶名中輸入您在我們公司開通的資料庫名,密碼中寫上對應的資料庫密碼,資料庫中選擇您在本站開通的資料庫,然後下一步---點 在SQL Server資料庫之間復制對象和數據,下一步--到了選擇要復制的對象畫面,把使用默認選項前面的勾去掉,然後點擊右邊的 選項 ,把安全措施選項中的 3個選擇前的勾全部去掉,然後確定,下一步--到了 保存、調度和復制包畫面,把立即運行前 保證打上勾(選擇上)--然後默認下一步 直到完成,本地電腦的資料庫將自動復制到遠程資料庫。

『柒』 SQL語言的基本操作方法實驗報告:嵌套查詢、集合查詢,深刻領會視圖的概念、實質和使用方法,SQL的9個動詞

嵌套查詢;一個select-from-where語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的where字句或having短語的條件中的查詢。
集合查詢:標准SQL直接支持的集合操作種類 並操作(UNION),一般商用資料庫支持的集合操作種類 並操作、叫操作、差操作。形式 :<查詢塊> UNION <查詢塊>
視圖概念:視圖時一個定製的虛擬表,它可以時本地的、遠程的或帶參數的。實質:一個虛擬表。使用方法:可以在項目管理器中瀏覽視圖,或用命令。
SQL的9個動詞 :
數據查詢:SELECT (查詢出數據,也可用於變數賦值)

數據定義(表/視圖/查詢/存儲過程/自定義函數/索引/觸發器等):CREATE (創建)、DROP(刪除)、ALTER(修改)

數據操作:INSERT(插入)、UPDATE(更新)、DELETE(刪除)

數據控制:Grant(授權)、revoke(回收許可權)

『捌』 SQL資料庫常用命令及語法舉例

下面是一些常用的SQL語句,雖然很基礎,可是卻很值得收藏,對於初學者非常實用

『玖』 SQL資料庫的操作

SQL包括了所有對資料庫的操作,主要是由4個部分組成:
1.數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
2.數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
下面我們將分別介紹: SQL數據定義功能包括定義資料庫、基本表、索引和視圖。
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^)
1.資料庫的建立與刪除
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為:
CREATE DATABASE <資料庫名> 〔其它參數〕
其中,<資料庫名>在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。
例:要建立項目管理資料庫(xmmanage),其語句應為:
CREATE DATABASE xmmanage
(2)資料庫的刪除:將資料庫及其全部內容從系統中刪除。
其語句格式為:DROP DATABASE <資料庫名>
例:刪除項目管理資料庫(xmmanage),其語句應為: DROP DATABASE xmmanage
2.基本表的定義及變更
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。 SQL是一種查詢功能很強的語言,只要是資料庫存在的數據,總能通過適當的方法將它從資料庫中查找出來。SQL中的查詢語句只有一個:SELECT,它可與其它語句配合完成所有的查詢功能。SELECT語句的完整語法,可以有6個子句。完整的語法如下:SELECT 目標表的列名或列表達式集合FROM 基本表或(和)視圖集合〔WHERE條件表達式〕〔GROUP BY列名集合〔HAVING組條件表達式〕〕〔ORDER BY列名〔集合〕…〕
簡單查詢,使用TOP子句
查詢結果排序order by
帶條件的查詢where,使用算術表達式,使用邏輯表達式,使用between關鍵字,使用in關鍵字,
模糊查詢like
整個語句的語義如下:從FROM子句中列出的表中,選擇滿足WHERE子句中給出的條件表達式的元組,然後按GROUPBY子句(分組子句)中指定列的值分組,再提取滿足HAVING子句中組條件表達式的那些組,按SELECT子句給出的列名或列表達式求值輸出。ORDER子句(排序子句)是對輸出的目標表進行重新排序,並可附加說明ASC(升序)或DESC(降序)排列。在WHERE子句中的條件表達式F中可出現下列操作符和運算函數:算術比較運算符:<,<=,>,>=,=,<>。邏輯運算符:AND,OR,NOT。集合運算符:UNION(並),INTERSECT(交),EXCEPT(差)。集合成員資格運算符:IN,NOT IN謂詞:EXISTS(存在量詞),ALL,SOME,UNIQUE。聚合函數:AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(計數)。F中運算對象還可以是另一個SELECT語句,即SELECT語句可以嵌套。上面只是列出了WHERE子句中可出現的幾種主要操作,由於WHERE子句中的條件表達式可以很復雜,因此SELECT句型能表達的語義遠比其數學原形要復雜得多。下面,我們以上面所建立的三個基本表為例,演示一下SELECT的應用:1.無條件查詢例:找出所有學生的的選課情況SELECT st_no,su_noFROM score例:找出所有學生的情況SELECT*FROM student「*」為通配符,表示查找FROM中所指出關系的所有屬性的值。2.條件查詢條件查詢即帶有WHERE子句的查詢,所要查詢的對象必須滿足WHERE子句給出的條件。例:找出任何一門課成績在70以上的學生情況、課號及分數SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.scoreFROM student,scoreWHERE score.score>=70 AND score.stno=student,st_no這里使用UNIQUE是不從查詢結果集中去掉重復行,如果使用DISTINCT則會去掉重復行。另外邏輯運算符的優先順序為NOT→AND→OR。例:找出課程號為c02的,考試成績不及格的學生SELECT st_noFROM scoreWHERE su_no=『c02』AND score<603.排序查詢排序查詢是指將查詢結果按指定屬性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。例:查找不及格的課程,並將結果按課程號從大到小排列SELECT UNIQUE su_noFROM scoreWHERE score<60ORDER BY su_no DESC4.嵌套查詢嵌套查詢是指WHERE子句中又包含SELECT子句,它用於較復雜的跨多個基本表查詢的情況。例:查找課程編號為c03且課程成績在80分以上的學生的學號、姓名SELECT st_no,st_nameFROM studentWHERE stno IN (SELECT st_noFROM scoreWHERE su_no=『c03』 AND score>80 )這里需要明確的是:當查詢涉及多個基本表時用嵌套查詢逐次求解層次分明,具有結構程序設計特點。在嵌套查詢中,IN是常用到的謂詞。若用戶能確切知道內層查詢返回的是單值,那麼也可用算術比較運算符表示用戶的要求。5.計算查詢計算查詢是指通過系統提供的特定函數(聚合函數)在語句中的直接使用而獲得某些只有經過計算才能得到的結果。常用的函數有:COUNT(*) 計算元組的個數COUNT(列名) 對某一列中的值計算個數SUM(列名) 求某一列值的總和(此列值是數值型)AVG(列名) 求某一列值的平均值(此列值是數值型)MAX(列名) 求某一列值中的最大值MIN(列名) 求某一列值中的最小值例:求男學生的總人數和平均年齡SELECT COUNT(*),AVG(st_age)FROM studentWHERE st_sex=『男』例:統計選修了課程的學生的人數SELECT COUNT(DISTINCT st_no)FROM score注意:這里一定要加入DISTINCT,因為有的學生可能選修了多門課程,但統計時只能按1人統計,所以要使用DISTINCT進行過濾。 由於資料庫管理系統是一個多用戶系統,為了控制用戶對數據的存取權利,保持數據的共享及完全性,SQL語言提供了一系列的數據控制功能。其中,主要包括安全性控制、完整性控制、事務控制和並發控制。1.安全性控制數據的安全性是指保護資料庫,以防非法使用造成數據泄露和破壞。保證數據安全性的主要方法是通過對資料庫存取權力的控制來防止非法使用資料庫中的數據。即限定不同用戶操作不同的數據對象的許可權。存取權控制包括權力的授予、檢查和撤消。權力授予和撤消命令由資料庫管理員或特定應用人員使用。系統在對資料庫操作前,先核實相應用戶是否有權在相應數據上進行所要求的操作。(1)權力授予:權力授有資料庫管理員專用的授權和用戶可用的授權兩種形式。資料庫管理員專用授權命令格式如下:|CONNECT |GRANT|RESOURCE|TO 用戶名〔IDENTIFED BY 口令〕|DBA |其中,CONNECT表示資料庫管理員允許指定的用戶具有連接到資料庫的權力,這種授權是針對新用戶;RESOURCE表示允許用戶建立自己的新關系模式,用戶獲得CONNECT權力後,必須獲得RESOURCE權力才能創建自己的新表;DBA表示資料庫管理員將自己的特權授予指定的用戶。若要同時授予某用戶上述三種授權中的多種權力,則必須通過三個相應的GRANT命令指定。另外,具有CONNECT和RESOURCE授權的用戶可以建立自己的表,並在自己建立的表和視圖上具有查詢、插入、修改和刪除的權力。但通常不能使用其他用戶的關系,除非能獲得其他用戶轉授給他的相應權力。例:若允許用戶SSE連接到資料庫並可以建立他自己的關系,則可通過如下命令授予權力:GRANT CONNECT TO SSE INENTIFIED BY BD1928GRANT RESOURCE TO SSE用戶可用的授權是指用戶將自己擁有的部分或全部權力轉授給其他用戶的命令形式,其命令格式如下:|SELECT ||INSERT ||DELETE |GRANT|UPDATE(列名1[,列名2]…)|ON|表名 |TO|用戶名|〔WITH GRANT OPTION〕|ALTER | |視圖名| |PUBLIC||NDEX ||ALL |若對某一用戶同時授予多種操作權力,則操作命令符號可用「,」相隔。PUBLIC 表示將權力授予資料庫的所有用戶,使用時要注意:任選項WITH GRANT OPTION表示接到授權的用戶,具有將其所得到的同時權力再轉授給其他用戶權力。例:如果將表student的查詢權授予所有用戶,可使用以下命令:GRANT SELECT ON student TO PUBLIC例:若將表subject的插入及修改權力授予用戶SSE並使得他具有將這種權力轉授他人的權力,則可使用以下命令:GRANT INSERT,UPDATE(su_subject) ON subject TO SSE WITH GRANT OPTION這里,UPDATE後面跟su_subject是指出其所能修改的列。(2)權力回收:權力回收是指回收指定用戶原已授予的某些權力。與權力授予命令相匹配,權力回收也有資料庫管理員專用和用戶可用的兩種形式。DBA專用的權力回收命令格式為:|CONNECT |REVOKE|RESOURCE|FROM用戶名|DBA |用戶可用的權力回收命令格式為:|SELECT ||INSERT ||DELETE |REVOKE|UPDATE(列名1〔,列名2〕…) |ON|表名 |FROM |用戶名||ALTER | |視圖名| |PUBLIC||INDEX ||ALL |例:回收用戶SSE的DBA權力:REVOKE DBA FROM SSE2.完整性控制資料庫的完整性是指數據的正確性和相容性,這是資料庫理論中的重要概念。完整性控制的主要目的是防止語義上不正確的數據進入資料庫。關系系統中的完整性約束條件包括實體完整性、參照完整性和用戶定義完整性。而完整性約束條件的定義主要是通過CREATE TABLE語句中的〔CHECK〕子句來完成。另外,還有一些輔助命令可以進行數據完整性保護。如UNIQUE和NOT NULL,前者用於防止重復值進入資料庫,後者用於防止空值。3.事務控制事務是並發控制的基本單位,也是恢復的基本單位。在SQL中支持事務的概念。所謂事務,是用戶定義的一個操作序列(集合),這些操作要麼都做,要麼一個都不做,是一個不可分割的整體。一個事務通常以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結束。SQL提供了事務提交和事務撤消兩種命令:(1)事務提交:事務提交的命令為:COMMIT 〔WORK〕事務提交標志著對資料庫的某種應用操作成功地完成,所有對資料庫的操作都必須作為事務提交給系統時才有效。事務一經提交就不能撤消。(2)事務撤消:事務撤消的命令是:ROLLBACK 〔WORK〕事務撤消標志著相應事務對資料庫操作失敗,因而要撤消對資料庫的改變,即要「回滾」到相應事務開始時的狀態。當系統非正常結束時(如掉電、系統死機),將自動執行ROLLBACK命令

『拾』 SQL的基本操作(1.數據類型)

數據類型 數據類弄是數據的一種屬性 表示數據所表示信息的類型 任何一種計算機語言都定義了自己的數據類型 當然 不同的程序語言都具有不同的特點 所定義的數據類型的各類和名稱都或多或少有些不同 SQL Server 提供了 種數據類型 ·Binary [(n)] ·Varbinary [(n)] ·Char [(n)] ·Varchar[(n)] ·Nchar[(n)] ·Nvarchar[(n)] ·Datetime ·Smalldatetime ·Decimal[(p[ s])] ·Numeric[(p[ s])] ·Float[(n)] ·Real ·Int ·Smallint ·Tinyint ·Money ·Smallmoney ·Bit ·Cursor ·Sysname ·Timestamp ·Uniqueidentifier ·Text ·Image ·Ntext ( )二進制數據類型 二進制數據包括 Binary Varbinary 和 Image Binary 數據類型既可以是固定長度的(Binary) 也可以是變長度的 Binary[(n)] 是 n 位固定的二進制數據 其中 n 的取值范圍是從 到 其存儲窨的大小是 n + 個位元組 Varbinary[(n)] 是 n 位變長度的二進制數弊李據 其中 n 的取值范圍是從 到 其存儲窨的大小是 n + 個位元組 不是 n 個位元組 在 Image 數據類型中存儲的數據是以位字元串存儲的 不是由 SQL Server 解釋的 必須由應用程序來解釋 例如 應用程序可以使用 BMP TIEF GIF 和 JPEG 格式把數據存儲在 Image 數據類型中 ( )字元數據類型 字元數據的類型包括 Char Varchar 和 Text 字元數據是由任何字母 符號和數字任意組合而成的數據 Varchar 是變長字元數據 其長度不超過 KB Char 是定長字元數據 其長度最多為 KB 超過 KB 的ASCII 數據可以使用租槐遲Text 數據類型存儲 例如 因為 Html 文檔全部都是 ASCII 字元 並且在一般情況下長度超過 KB 所以這些文檔可以 Text 數據類型存儲在 SQL Server 中 ( )Unicode 數據類型 Unicode 數據類型包括 Nchar Nvarchar 和Ntext 在 Microsoft SQL Server 中 傳統的非 Unicode 數據類型允許使用由特定字元集定義的字元 在 SQL Server 安裝過程中 允許選擇一種字元集 使用 Unicode 數據類型 列中可以存儲任何由Unicode 標準定義的字元 在 Unicode 標准中 包括了以各種字元集定義的全部字元 使用Unicode 數據類型 所戰勝的窨是使用非 Unicode 數據類型所佔用的窨大小的兩倍 在 SQL Server 中 Unicode 數據以 Nchar Nvarchar 和 Ntext 數據明禪類型存儲 使用這種字元類型存儲的列可以存儲多個字元集中的字元 當列的長度變化時 應該使用 Nvarchar 字元類型 這時最多可以存儲 個字元 當列的長度固定不變時 應該使用 Nchar 字元類型 同樣 這時最多可以存儲 個字元 當使用 Ntext 數據類型時 該列可以存儲多於 個字元 ( )日期和時間數據類型 日期和時間數據類型包括 Datetime 和 Smalldatetime 兩種類型 日期和時間數據類型由有效的日期和時間組成 例如 有效的日期和時間數據包括 / / : : : : PM 和 : : : : AM / / 前一個數據類型是日期在前 時間在後一個數據類型是霎時間在前 日期在後 在 Microsoft SQL Server 中 日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時 所存儲的日期范圍是從 年 月 日開始 到 年 月 日結束(每一個值要求 個存儲位元組) 使用 Smalldatetime 數據類型時 所存儲的日期范圍是 年 月 日 開始 到 年 月 日結束(每一個值要求 個存儲位元組) 日期的格式可以設定 設置日期格式的命令如下 Set DateFormat {format | @format _var| 其中 format | @format_var 是日期的順序 有效的參數包括 MDY DMY YMD YDM MYD 和 DYM 在默認情況下 日期格式為 MDY 例如 當執行 Set DateFormat YMD 之後 日期的格式為年 月 日 形式 當執行 Set DateFormat DMY 之後 日期的格式為 日 月有年 形式 ( )數字數據類型 數字數據只包含數字 數字數據類型包括正數和負數 小數(浮點數)和整數 整數由正整數和負整數組成 例如 和 在 Micrsoft SQL Server 中 整數存儲的數據類型是 Int Smallint 和 Tinyint Int 數據類型存儲數據的范圍大於 Smallint 數據類型存儲數據的范圍 而 Smallint 據類型存儲數據的范圍大於 Tinyint 數據類型存儲數據的范圍 使用 Int 數據狗昔存儲數據的范圍是從 到 (每一個值要求 個位元組存儲空間) 使用 Smallint 數據類型時 存儲數據的范圍從 到 (每一個值要求 個位元組存儲空間) 使用 Tinyint 數據類型時 存儲數據的范圍是從 到 (每一個值要求 個位元組存儲空間) 精確小婁數據在 SQL Server 中的數據類型是 Decimal 和 Numeric 這種數據所佔的存儲空間根據該數據的位數後的位數來確定 在SQL Server 中 近似小數數據的數據類型是 Float 和 Real 例如 三分之一這個分數記作 當使用近似數據類型時能准確表示 因此 從系統中檢索到的數據可能與存儲在該列中數據不完全一樣 ( )貨幣數據表示正的或者負的貨幣數量 在 Microsoft SQL Server 中 貨幣數據的數據類型是Money 和 Smallmoney Money 數據類型要求 個存儲位元組 Smallmoney 數據類型要求 個存儲位元組 ( )特殊數據類型 特殊數據類型包括前面沒有提過的數據類型 特殊的數據類型有 種 即 Timestamp Bit 和 Uniqueidentifier Timestamp 用於表示SQL Server 活動的先後順序 以二進投影的格式表示 Timestamp 數據與插入數據或者日期和時間沒有關系 Bit 由 或者 組成 當表示真或者假 ON 或者 OFF 時 使用 Bit 數據類型 例如 詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中 Uniqueidentifier 由 位元組的十六進制數字組成 表示一個全局唯一的 當表的記錄行要求唯一時 GUID是非常有用 例如 在客戶標識號列使用這種數據類型可以區別不同的客戶 用戶定義的數據類型 用戶定義的數據類型基於在 Microsoft SQL Server 中提供的數據類型 當幾個表中必須存儲同一種數據類型時 並且為保證這些列有相同的數據類型 長度和可空性時 可以使用用戶定義的數據類型 例如 可定義一種稱為 postal_code 的數據類型 它基於 Char 數據類型 當創建用戶定義的數據類型時 必須提供三個數 數據類型的名稱 所基於的系統數據類型和數據類型的可空性 ( )創建用戶定義的數據類型 創建用戶定義的數據類型可以使用 Transact SQL 語句 系統存儲過程 sp_addtype 可以來創建用戶定義的數據類型 其語法形式如下 sp_addtype {type} [ system_data_bype][ null_type ] 其中 type 是用戶定義的數據類型的名稱 system_data_type 是系統提供的數據類型 例如 Decimal Int Char 等等 null_type 表示該數據類型是如何處理空值的 必須使用單引號引起來 例如 NULL NOT NULL 或者 NONULL 例子 Use cust Exec sp_addtype ssn Varchar( ) Not Null 創建一個用戶定義的數據類型 ssn 其基於的系統數據類型是變長為 的字元 不允許空 例子 Use cust Exec sp_addtype birthday datetime Null 創建一個用戶定義的數據類型 birthday 其基於的系統數據類型是 DateTime 允許空 例子 Use master Exec sp_addtype telephone varchar( ) Not Null Eexc sp_addtype fax varchar( ) Null 創建兩個數據類型 即 telephone 和 fax ( )刪除用戶定義的數據類型 當用戶定義的數據類型不需要時 可刪除 刪除用戶定義的數據類型的命令是 sp_droptype { type } 例子 Use master Exec sp_droptype ssn 注意 當表中的列還正在使用用戶定義的數據類型時 或者在其上面還綁定有默認或者規則時 這種用戶定義的數據類型不能刪除 lishixin/Article/program/SQLServer/201311/11231