?? orcale技術筆記.txt
字號:
說明:
1.Where 的 conditions 可以是另外一個的 query。
2.EXISTS 在此是指存在與否。
Select *
FROM table_name1
Where column1 IN (
Select column1
FROM table_name2
Where conditions )
說明:
1. IN 後面接的是一個集合,表示column1 存在集合里面。
2. Select 出來的資料形態必須符合 column1。
其他查詢
Select *
FROM table_name1
Where column1 LIKE ’x%’
說明:LIKE 必須和後面的’x%’ 相呼應表示以 x為開頭的字串。
Select *
FROM table_name1
Where column1 IN (’xxx’,’yyy’,..)
說明:IN 後面接的是一個集合,表示column1 存在集合里面。
Select *
FROM table_name1
Where column1 BETWEEN xx AND yy
說明:BETWEEN 表示 column1 的值介於 xx 和 yy 之間。
3、更改資料:
Update table_name
SET column1=’xxx’
Where conditoins
說明:
1.更改某個欄位設定其值為’xxx’。
2.conditions 是所要符合的條件、若沒有 Where 則整個 table 的那個欄位都會全部被
更改。
4、刪除資料:
Delete FROM table_name
Where conditions
說明:刪除符合條件的資料。
說明:關于Where條件后面如果包含有日期的比較,不同數據庫有不同的表達式。具體如
下:
(1)如果是ACCESS數據庫,則為:Where mydate>#2000-01-01#
(2)如果是ORACLE數據庫,則為:Where mydate>cast(’2000-01-01’ as date)
或:Where mydate>to_date(’2000-01-01’,’yyyy-mm-dd’)
在Delphi中寫成:
thedate=’2000-01-01’;
query1.SQL.add(’select * from abc where mydate>cast(’+’’’’+thedate+’’
’’+’ as date)’);
如果比較日期時間型,則為:
Where mydatetime>to_date(’2000-01-01 10:00:01’,’yyyy-mm-dd hh24:mi:ss’)
Recordset對象一些有用的屬性"/> 引用來自 增加一個 :Recordset對象一些有用的屬
性
rs.CursorType=
rs.CursorLocation=
rs.LockType =
rs.CacheSize=
rs.Pagesize=
rs.Pagecount=
rs.RecordCount=
''---- CursorType Values ----
Const adOpenForwardOnly = 0 僅向前
Const adOpenKeyset = 1 鍵集游標
Const adOpenDynamic = 2 動態游標
Const adOpenStatic = 3 靜態游標
''---- LockType Values ----
Const adLockReadOnly = 1 默認值,只讀
Const adLockPessimistic = 2 保守式記錄鎖定
Const adLockOptimistic = 3 開放式記錄鎖定,只在調用Update方法時鎖定記錄
Const adLockBatchOptimistic = 4 開放式批更新
''---- CursorLocation Values ----
Const adUseServer = 2
Const adUseClient = 3
Set rs=Server.CreateObject("ADODB.Rrecordset")
rs.Open.sqlst,conn,1,1 '讀取
rs.Open sqlst,conn,1,2 '新增,修改,或刪除)
SQL SERVER的數據類型
1.SQL SERVER的數據類型
數據類弄是數據的一種屬性,表示數據所表示信息的類型。任何一種計算機語言都
定義了自己的數據類型。當然,不同的程序語言都具有不同的特點,所定義的數據類型
的各類和名稱都或多或少有些不同。SQLServer 提供了 25 種數據類型:
·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
(1)二進制數據類型
二進制數據包括 Binary、Varbinary 和 Image
Binary 數據類型既可以是固定長度的(Binary),也可以是變長度的。
Binary[(n)] 是 n 位固定的二進制數據。其中,n 的取值范圍是從 1 到 8000。其
存儲窨的大小是 n + 4 個字節。
Varbinary[(n)] 是 n 位變長度的二進制數據。其中,n 的取值范圍是從 1 到
8000。其存儲窨的大小是 n + 4個字節,不是n 個字節。
在 Image 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 解釋的
,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數
據存儲在 Image 數據類型中。
(2)字符數據類型
字符數據的類型包括 Char,Varchar 和 Text
字符數據是由任何字母、符號和數字任意組合而成的數據。
Varchar 是變長字符數據,其長度不超過 8KB。Char 是定長字符數據,其長度最多
為 8KB。超過 8KB 的ASCII 數據可以使用Text數據類型存儲。例如,因為 Html 文檔全
部都是 ASCII 字符,并且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類
型存儲在SQL Server 中。
(3)Unicode 數據類型
Unicode 數據類型包括 Nchar,Nvarchar 和Ntext
在 Microsoft SQL Server 中,傳統的非 Unicode 數據類型允許使用由特定字符集
定義的字符。在 SQL Server安裝過程中,允許選擇一種字符集。使用 Unicode 數據類
型,列中可以存儲任何由Unicode 標準定義的字符。在 Unicode 標準中,包括了以各種
字符集定義的全部字符。使用Unicode數據類型,所戰勝的窨是使用非 Unicode 數據類
型所占用的窨大小的兩倍。
在 SQL Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext 數據類型存儲。
使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使
用Nvarchar 字符類型,這時最多可以存儲 4000 個字符。當列的長度固定不變時,應該
使用 Nchar 字符類型,同樣,這時最多可以存儲4000 個字符。當使用 Ntext 數據類型
時,該列可以存儲多于 4000 個字符。
(4)日期和時間數據類型
日期和時間數據類型包括 Datetime 和 Smalldatetime兩種類型
日期和時間數據類型由有效的日期和時間組成。例如,有效的日期和時間數據包括
“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個數據類型是
日期在前,時間在后一個數據類型是霎時間在前,日期在后。在 Microsoft SQL Server
中,日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時,所存儲的日期
范圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存
儲字節)。使用 Smalldatetime 數據類型時,所存儲的日期范圍是 1900年 1 月 1日 開
始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲字節)。
日期的格式可以設定。設置日期格式的命令如下:
Set DateFormat {format | @format _var|
其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、
YDM、MYD 和 DYM。在默認情況下,日期格式為MDY。
例如,當執行 Set DateFormat YMD 之后,日期的格式為年 月 日 形式;當執行
Set DateFormat DMY 之后,日期的格式為日 月有年 形式
(5)數字數據類型
數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數
整數由正整數和負整數組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL
Server 中,整數存儲的數據類型是 Int,Smallint和 Tinyint。Int 數據類型存
儲數據的范圍大于 Smallint 數據類型存儲數據的范圍,而 Smallint 據類型存儲數據
的范圍大于Tinyint 數據類型存儲數據的范圍。使用 Int 數據狗昔存儲數據的范圍是從
-2 147 483 648 到 2 147 483 647(每一個值要求4個字節存儲空間)。使用 Smallint
數據類型時,存儲數據的范圍從 -32 768 到 32 767(每一個值要求2個字節存儲空間)
。使用Tinyint 數據類型時,存儲數據的范圍是從0 到255(每一個值要求1個字節存儲
空間)。
精確小婁數據在 SQL Server 中的數據類型是 Decimal 和 Numeric。這種數據所占
的存儲空間根據該數據的位數后的位數來確定。
在SQL Server 中,近似小數數據的數據類型是 Float 和 Real。例如,三分之一這
個分數記作。3333333,當使用近似數據類型時能準確表示。因此,從系統中檢索到的數
據可能與存儲在該列中數據不完全一樣。
(6)貨幣數據表示正的或者負的貨幣數量 。
在 Microsoft SQL Server 中,貨幣數據的數據類型是Money 和 Smallmoney
Money數據類型要求 8 個存儲字節,Smallmoney 數據類型要求 4 個存儲字節。
(7)特殊數據類型
特殊數據類型包括前面沒有提過的數據類型。特殊的數據類型有3種,即
Timestamp、Bit 和 Uniqueidentifier。
Timestamp 用于表示SQL Server 活動的先后順序,以二進投影的格式表示。
Timestamp 數據與插入數據或者日期和時間沒有關系。
Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit 數據類型。
例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。
Uniqueidentifier 由 16 字節的十六進制數字組成,表示一個全局唯一的。當表的
記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區
別不同的客戶。
2.用戶定義的數據類型
用戶定義的數據類型基于在 Microsoft SQL Server 中提供的數據類型。當幾個表
中必須存儲同一種數據類型時,并且為保證這些列有相同的數據類型、長度和可空性時
,可以使用用戶定義的數據類型。例如,可定義一種稱為 postal_code 的數據類型
,它基于 Char 數據類型。
當創建用戶定義的數據類型時,必須提供三個數:數據類型的名稱、所基于的系統
數據類型和數據類型的可空性。
(1)創建用戶定義的數據類型
創建用戶定義的數據類型可以使用 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(11)',"Not Null'
創建一個用戶定義的數據類型 ssn,其基于的系統數據類型是變長為11 的字符,不
允許空。
例子:
Use cust
Exec sp_addtype birthday,datetime,'Null'
創建一個用戶定義的數據類型 birthday,其基于的系統數據類型是 DateTime,允
許空。
例子:
Use master
Exec sp_addtype telephone,'varchar(24),'Not Null'
Eexc sp_addtype fax,'varchar(24)','Null'
創建兩個數據類型,即 telephone 和 fax
(2)刪除用戶定義的數據類型
當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是
sp_droptype {'type'}。
例子:
Use master
Exec sp_droptype 'ssn'
注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認
或者規則時,這種用戶定義的數據類型不能刪除。
以下為SQL SERVER7.0以上版本的字段類型說明。SQL SERVER6.5的字段類型說明請
參考SQL SERVER提供的說明。
字段類型 描述
bit 0或1的整型數字
int 從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字
smallint 從-2^15(-32,768)到2^15(32,767)的整型數字
tinyint 從0到255的整型數字
decimal 從-10^38到10^38-1的定精度與有效位數的數字
numeric decimal的同義詞
money 從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的
貨幣數據,最小貨幣單位千分之十
smallmoney 從-214,748.3648到214,748.3647的貨幣數據,最小貨幣單位千分之十
float 從-1.79E+308到1.79E+308可變精度的數字
real 從-3.04E+38到3.04E+38可變精度的數字
datetime 從1753年1月1日到9999年12日31的日期和時間數據,最小時間單位為百分之三
秒或3.33毫秒
smalldatetime 從1900年1月1日到2079年6月6日的日期和時間數據,最小時間單位為分
鐘
timestamp 時間戳,一個數據庫寬度的唯一數字
uniqueidentifier 全球唯一標識符GUID
char 定長非Unicode的字符型數據,最大長度為8000
varchar 變長非Unicode的字符型數據,最大長度為8000
text 變長非Unicode的字符型數據,最大長度為2^31-1(2G)
nchar 定長Unicode的字符型數據,最大長度為8000
nvarchar 變長Unicode的字符型數據,最大長度為8000
ntext 變長Unicode的字符型數據,最大長度為2^31-1(2G)
binary 定長二進制數據,最大長度為8000
varbinary 變長二進制數據,最大長度為8000
image 變長二進制數據,最大長度為2^31-1(2G)
《SQL語句的基本語法》
一.Select語句的完整語法為:
Select[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}
FROM tableexpression[,…][IN externaldatabase]
[Where…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
[WITH OWNERACCESS OPTION]
說明:
用中括號([])括起來的部分表示是可選的,用大括號({})括起來的部分是表示必須從中
選擇其中的一個。
1 FROM子句
FROM子句指定了Select語句中字段的來源。FROM子句后面是包含一個或多個的表達式(由
逗號分開),其中的表達式可為單一表名稱、已保存的查詢或由 INNER JOIN、LEFT JOIN
或 RIGHT JOIN 得到的復合結果。如果表或查詢存儲在外部數據庫,在IN 子句之后指明
其完整路徑。
例:下列SQL語句返回所有有定單的客戶:
Select orderID,Customer.customerID
FROM orders Customers
Where orders.CustomerID=Customers.CustomeersID
2 ALL、DISTINCT、DISTINCTROW、TOP謂詞
(1) ALL 返回滿足SQL語句條件的所有記錄。如果沒有指明這個謂詞,默認為ALL。
例:Select ALL FirstName,LastName
FROM Employees
(2) DISTINCT 如果有多個記錄的選擇字段的數據相同,只返回一個。
(3) DISTINCTROW 如果有重復的記錄,只返回一個
(4) TOP顯示查詢頭尾若干記錄。也可返回記錄的百分比,這是要用 TOP N PERCENT子句
(其中N 表示百分比)
例:返回5%定貨額最大的定單
Select TOP 5 PERCENT*
FROM [ order Details]
orDER BY UnitPrice*Quantity*(1-Discount) DESC
3 用 AS 子句為字段取別名
如果想為返回的列取一個新的標題,或者,經過對字段的計算或總結之后,產生了一個
新的值,希望把它放到一個新的列里顯示,則用AS保留。
例:返回FirstName字段取別名為NickName
Select FirstName AS NickName ,LastName ,City
FROM Employees
例:返回新的一列顯示庫存價值
Select ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS
valueInStock
FROM Products
二 .Where 子句指定查詢條件
1 比較運算符
比較運算符 含義
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
!> 不大于
!< 不小于
例:返回96年1月的定單
Select orderID, CustomerID, orderDate
FROM orders
Where orderDate>#1/1/96# AND orderDate<#1/30/96#
注意:
Mcirosoft JET SQL 中,日期用‘#’定界。日期也可以用Datevalue()函數來代替。在
比較字符型的數據時,要加上單引號’’,尾空格在比較中被忽略。
例:
Where orderDate>#96-1-1#
也可以表示為:
Where orderDate>Datevalue(‘1/1/96’)
使用 NOT 表達式求反。
例:查看96年1月1日以后的定單
Where Not orderDate<=#1/1/96#
2 范圍(BETWEEN 和 NOT BETWEEN)
BETWEEN …AND…運算符指定了要搜索的一個閉區間。
例:返回96年1月到96年2月的定單。
Where orderDate Between #1/1/96# And #2/1/96#
3 列表(IN ,NOT IN)
IN 運算符用來匹配列表中的任何一個值。IN子句可以代替用OR子句連接的一連串的條件
。
例:要找出住在 London、Paris或Berlin的所有客戶
Select CustomerID, CompanyName, ContactName, City
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -