常用經典SQL語句大全完整版--詳解+實例 (存)


常用經典SQL語句大全完整版--詳解+實例

轉 傻豆兒的博客

http://blog.sina.com.cn/s/blog_8439a4e50101mlc3.html

標簽: 

查詢語句

 

sql

 

access

 

vb

 

李世東

 
分類: VB sql教程

 

下列語句部分是Mssql語句,不可以在access中使用。
  SQL分類:
  DDL—數據定義語言(CREATE,ALTER,DROP,DECLARE)
  DML—數據操縱語言(SELECT,DELETE,UPDATE,INSERT)
  DCL—數據控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)
  首先,簡要介紹基礎語句:
  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],..)
  根據已有的表創建新表:
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對象,代表一個錯誤信息。
SQL語句大全精要
2006/10/26 13:46
DELETE語句
DELETE語句:用於創建一個刪除查詢,可從列在 FROM 子句之中的一個或多個表中刪除記錄,且該子句滿足 WHERE 子句中的條件,可以使用DELETE刪除多個記錄。
語法:DELETE [table.*] FROM table WHERE criteria
語法:DELETE * FROM table WHERE criteria=’查詢的字’
說明:table參數用於指定從其中刪除記錄的表的名稱。
criteria參數為一個表達式,用於指定哪些記錄應該被刪除的表達式。
可以使用 Execute 方法與一個 DROP 語句從數據庫中放棄整個表。不過,若用這種方法刪除表,將會失去表的結構。不同的是當使用 DELETE,只有數據會被刪除;表的結構以及表的所有屬性仍然保留,例如字段屬性及索引。
UPDATE
有關UPDATE,急!!!!!!!!!!!
在ORACLE數據庫中
表 A ( ID ,FIRSTNAME,LASTNAME )
表 B( ID,LASTNAME)
表 A 中原來ID,FIRSTNAME兩個字段的數據是完整的
表 B中原來ID,LASTNAME兩個字段的數據是完整的
現在要把表 B中的LASTNAME字段的相應的數據填入到A表中LASTNAME相應的位置。兩個表中的ID字段是相互關聯的。
先謝謝了!!!!
update a set a.lastname=(select b.lastname from b where a.id=b.id)
  掌握SQL四條最基本的數據操作語句:Insert,Select,Update和Delete。
  練掌握SQL是數據庫用戶的寶貴財富。在本文中,我們將引導你掌握四條最基本的數據操作語句—SQL的核心功能—來依次介紹比較操作符、選擇斷言以及三值邏輯。當你完成這些學習后,顯然你已經開始算是精通SQL了。
  在我們開始之前,先使用CREATE TABLE語句來創建一個表(如圖1所示)。DDL語句對數據庫對象如表、列和視進行定義。它們並不對表中的行進行處理,這是因為DDL語句並不處理數據庫中實際的數據。這些工作由另一類SQL語句—數據操作語言(DML)語句進行處理。
  SQL中有四種基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由於這是大多數SQL用戶經常用到的,我們有必要在此對它們進行一一說明。在圖1中我們給出了一個名為EMPLOYEES的表。其中的每一行對應一個特定的雇員記錄。請熟悉這張表,我們在后面的例子中將要用到它。

 

 

The Execute method executes a specified query, SQL statement, stored procedure, or provider-specific text.
Execute的作用是:執行一個查詢語句、陳述語句、程序或技術提供對象[provider]的詳細文本。

The results are stored in a new Recordset object if it is a row-returning query. A closed Recordset object will be returned if it is not a row-returning query.
如果返回行[row-returning]查詢語句,那么結果將被存儲在一個新的記錄對象中;如果它不是一個返回行[row-returning]查詢語句,那么它將返回一個關閉的記錄對象。

Note: The returned Recordset is always a read-only, forward-only Recordset!
注意:返回的Recordset是一個只讀的、只向前兼容的Recordset。

Tip: To create a Recordset with more functionality, first create a Recordset object. Set the desired properties, and then use the Recordset object's Open method to execute the query.
提示:在第一次創建Recordset對象時,需要將它創建為一個更具功能性的Recordset對象。設置一個我們所希望的屬性,使用Recordset對象的Open方法去執行查詢語句。

Syntax for row-returning
row-returning[返回行]語法

Set objrs=objconn.Execute(commandtext,ra,options)

Syntax for non-row-returning
non-row-returning[非返回行]語法

objconn.Execute commandtext,ra,options

 

Parameter參數

Description描述

commandtext

Required. The SQL statement, stored procedure, or provider-specific text to execute
必要參數。指定需要執行的SQL語句,現存的程序或技術提供對象[provider]的詳細文本

ra

Optional. The number of records affected by the query
可選參數。返回查詢語句執行的記錄數

options

Optional. Sets how the provider should evaluate the commandtext parameter. Can be one or more CommandTypeEnum or ExecuteOptionEnum values. Default is adCmdUnspecified
可選參數。設置技術提供對象[provider]應該如何評估CommandText屬性的功能。它可以是一個或多個CommandTypeEnum 或 ExecuteOptionEnum的值。默認值是adCmdUnspecified

Example
案例

<%

sql="SELECT companyname FROM Customers"

Set rs=conn.Execute(sql)

%>

 




CommandTypeEnum Values

Constant常量

Value值

Description描述

adCmdUnspecified

-1

Does not specify the command type argument.
不指定指令類型自變量

adCmdText

1

Evaluates CommandText as a textual definition of a command or stored procedure call.
指示提供者應該將Source作為命令的文本定義來計算。

adCmdTable

2

Evaluates CommandText as a table name whose columns are all returned by an internally generated SQL query.
指示ADO生成SQL查詢以便從在Source中命名的表中返回所有行

adCmdStoredProc

4

Evaluates CommandText as a stored procedure name.
將CommandText作為一個已存的程序名稱

adCmdUnknown

8

Indicates that the type of command in the CommandText property is not known.
默認值。指定未知的CommandText屬性命令

adCmdFile

256

Evaluates CommandText as the file name of a persistently stored Recordset. Used with Recordset.Open or Requery only.
指示應從在Source中命名的文件中恢復保留(保存的)Recordset。它僅能與Recordset.Open 或 Requery 指令一起使用

adCmdTableDirect

512

Evaluates CommandText as a table name whose columns are all returned. Used with Recordset.Open or Requery only. To use the Seek method, the Recordset must be opened with adCmdTableDirect. This value cannot be combined with the ExecuteOptionEnum value adAsyncExecute.
指示提供者更改從在 Source 中命名的表中返回所有行/
將CommandText作為一個表的名稱(該表的列全部是通過內部的SQL查詢語句返回的)。它僅適用Recordset.Open 或 Requery 指令;如果需要使用查找方式,那么Recordset必須以adCmdTableDirect打開。這個值不能與ExecuteOptionEnum值 adAsyncExecute一起使用

 




ExecuteOptionEnum Values

Constant常量

Value值

Description描述

adOptionUnspecified

-1

Indicates that the command is unspecified.
指明為指定的指令

adAsyncExecute

 

Indicates that the command should execute asynchronously. This value cannot be combined with the CommandTypeEnum value adCmdTableDirect.
指明指令是否需要異步執行。這個值不能與CommandTypeEnum 之中的adCmdTableDirect一起使用

adAsyncFetch

 

Indicates that the remaining rows after the initial quantity specified in the CacheSize property should be retrieved asynchronously.
指明在CacheSize屬性中指定了初始量以后,是否應該異步獲取保留行[remaining rows]

adAsyncFetchNonBlocking

 

Indicates that the main thread never blocks while retrieving. If the requested row has not been retrieved, the current row automatically moves to the end of the file. If you open a Recordset from a Stream containing a persistently stored Recordset, adAsyncFetchNonBlocking will not have an effect; the operation will be synchronous and blocking. adAsynchFetchNonBlocking has no effect when the adCmdTableDirect option is used to open the Recordset.
指示主要線程在提取期間從未堵塞。如果所請求的行尚未提取,那么當前行將自動移到文件末尾。如果打開的記錄流中的記錄固定地包含一個記錄,那么adAsyncFetchNonBlocking將不會產生作用;才作程序將同時運行以及阻塞該常量。當adCmdTableDirect選項用於打開記錄時,adAsynchFetchNonBlocking將不會產生任何作用

adExecuteNoRecords

 

Indicates that the command text is a command or stored procedure that does not return rows (for example, a command that only inserts data). If any rows are retrieved, they are discarded and not returned. adExecuteNoRecords can only be passed as an optional parameter to the Command or Connection Execute method.
它僅指明了指令文本僅是一條不返回任何行的指令或現存程序(如:一條只執行數據插入的指令)。如果沒有任何行被提取,那么他們將放棄執行並不返回任何值。
adExecuteNoRecords僅可以作為一個可選參數傳遞到指令中或連接執行方法[Connection Execute method]中

adExecuteStream

 

Indicates that the results of a command execution should be returned as a stream. adExecuteStream can only be passed as an optional parameter to the Command Execute method.
指明需要以結果流的形式返回命令執行的結果。adExecuteStream僅可以作為一個可選參數傳遞到指令中或連接執行方法[Connection Execute method]中

adExecuteRecord

 

Indicates that the CommandText is a command or stored procedure that returns a single row which should be returned as a Record object.
指明CommandText僅是返回一個單獨行(該單獨行作為一條記錄對象返回)的一條指令或現存程序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM