sql函數語法
SQL2000常用命令,語法使用方法
(1) 數據記錄篩選:
sql="select * from 數據表 where 欄位名=欄位值 order by 欄位名 [desc]"
sql="select * from 數據表 where 欄位名 like '%欄位值%' order by 欄位名 [desc]"
sql="select top 10 * from 數據表 where 欄位名 order by 欄位名 [desc]"
sql="select * from 數據表 where 欄位名 in ('值1','值2','值3')"
sql="select * from 數據表 where 欄位名 between 值1 and 值2"
(2) 更新數據記錄:
sql="update 數據表 set 欄位名=欄位值 where 條件表達式"
sql="update 數據表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n where 條件表達式"
(3) 刪除數據記錄:
sql="delete from 數據表 where 條件表達式"
sql="delete from 數據表" (將數據表所有記錄刪除)
(4) 添加數據記錄:
sql="insert into 數據表 (欄位1,欄位2,欄位3 …) values (值1,值2,值3 …)"
sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)
(5) 數據記錄統計函數:
AVG(欄位名) 得出一個表格欄平均值
COUNT(*|欄位名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把數據欄的值相加
引用以上函數的方法:
sql="select sum(欄位名) as 別名 from 數據表 where 條件表達式"
set rs=conn.execute(sql)
用 rs("別名") 獲取統的計值,其它函數運用同上。
(5) 數據表的建立和刪除:
CREATE TABLE 數據表名稱(欄位1 類型1(長度),欄位2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數據表名稱 (永久性刪除一個數據表)
4. 記錄集對象的方法:
rs.movenext 將記錄指針從當前的位置向下移一行
rs.moveprevious 將記錄指針從當前的位置向上移一行
rs.movefirst 將記錄指針移到數據表第一行
rs.movelast 將記錄指針移到數據表最後一行
rs.absoluteposition=N 將記錄指針移到數據表第N行
rs.absolutepage=N 將記錄指針移到第N頁的第一行
rs.pagesize=N 設置每頁為N條記錄
2、更改表格
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
說明:增加一個欄位(沒有刪除某個欄位的語法。
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
說明:更改表得的定義把某個欄位設為主鍵。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
說明:把主鍵的定義刪除。
3、建立索引
CREATE INDEX index_name ON table_name (column_name)
說明:對某個表格的欄位建立索引以增加查詢時的速度。
4、刪除
DROP table_name
DROP index_name
二、的資料形態 DATATYPEs
smallint
16 位元的整數。
interger
32 位元的整數。
decimal(p,s)
p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數
點後有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。
float
32位元的實數。
double
64位元的實數。
char(n)
n 長度的字串,n不能超過 254。
varchar(n)
長度不固定且其最大長度為 n 的字串,n不能超過 4000。
graphic(n)
和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是為
了支援兩個字元長度的字體,例如中文字。
vargraphic(n)
可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000。
date
包含了 年份、月份、日期。
time
包含了 小時、分鍾、秒。
timestamp
包含了 年、月、日、時、分、秒、千分之一秒。
三、資料操作 DML (Data Manipulation Language)
資料定義好之後接下來的就是資料的操作。資料的操作不外乎增加資料(insert)、查詢資料(query)、更改資料(update) 、刪除資料(delete)四種模式,以下分 別介紹他們的語法:
1、增加資料:
INSERT INTO table_name (column1,column2,...)
valueS ( value1,value2, ...)
說明:
1.若沒有指定column 系統則會按表格內的欄位順序填入資料。
2.欄位的資料形態和所填入的資料必須吻合。
3.table_name 也可以是景觀 view_name。
INSERT INTO table_name (column1,column2,...)
SELECT columnx,columny,... FROM another_table
說明:也可以經過一個子查詢(subquery)把別的表格的資料填入。
2、查詢資料:
基本查詢
SELECT column1,columns2,...
FROM table_name
說明:把table_name 的特定欄位資料全部列出來
SELECT *
FROM table_name
WHERE column1 = xxx
[AND column2 > yyy] [OR column3 <> zzz]
三)交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數
據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等
於6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合並成一個結果集合顯示,即執行聯合查詢。UNION的語法格式為:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement為待聯合的SELECT查詢語句。
ALL選項表示將所有行合並到結果集合中。不指定該項時,被聯合查詢結果集合中的重復行將只保留一
行。
聯合查詢時,查詢結果的列標題為第一個查詢語句的列標題。因此,要定義列標題必須在第一個查詢語
句中定義。要對聯合查詢結果排序時,也必須使用第一查詢語句中的列名、列標題或者列序號。
在使用UNION 運算符時,應保證每個聯合查詢語句的選擇列表中有相同數量的表達式,並且每個查詢選
擇表達式應具有相同的數據類型,或是可以自動將它們轉換為相同的數據類型。在自動轉換時,對於數值類
型,系統將低精度的數據類型轉換為高精度的數據類型。
在包括多個查詢的UNION語句中,其執行順序是自左至右,使用括弧可以改變這一執行順序。例如:
查詢1 UNION (查詢2 UNION 查詢3)
INSERT語句
用戶可以用INSERT語句將一行記錄插入到指定的一個表中。例如,要將雇員John Smith的記錄插入到本例的表中,可以使用如下語句:
INSERT INTO EMPLOYEES valueS
('Smith','John','1980-06-10',
'Los Angles',16,45000);
通過這樣的INSERT語句,系統將試著將這些值填入到相應的列中。這些列按照我們創建表時定義的順序排列。在本例中,第一個值「Smith」將填到第一個列LAST_NAME中;第二個值「John」將填到第二列FIRST_NAME中……以此類推。
我們說過系統會「試著」將值填入,除了執行規則之外它還要進行類型檢查。如果類型不符(如將一個字元串填入到類型為數字的列中),系統將拒絕這一次操作並返回一個錯誤信息。
如果SQL拒絕了你所填入的一列值,語句中其他各列的值也不會填入。這是因為SQL提供對事務的支持。一次事務將資料庫從一種一致性轉移到另一種一致性。如果事務的某一部分失敗,則整個事務都會失敗,系統將會被恢復(或稱之為回退)到此事務之前的狀態。
回到原來的INSERT的例子,請注意所有的整形十進制數都不需要用單引號引起來,而字元串和日期類型的值都要用單引號來區別。為了增加可讀性而在數字間插入逗號將會引起錯誤。記住,在SQL中逗號是元素的分隔符。
同樣要注意輸入文字值時要使用單引號。雙引號用來封裝限界標識符。
對於日期類型,我們必須使用SQL標准日期格式(yyyy-mm-dd)
『貳』 鍦⊿QL涓錛 sum()鍑芥暟鎬庝箞鐢錛
璇鍙ヤ負錛
withtemp1(col1)as
(select1col1
unionall
selectcol1+1col1
from
temp1
wherecol1+1<=20
)
selectexp(sum(log(col1)))
fromtemp1;
鎵╁睍璧勬枡錛
娉ㄦ剰浜嬮」
sql涓娌℃湁涔樻硶鍑芥暟錛屾墍浠ヤ竴鑸鐢錛
logx+logy=logx*y
瀹炵幇鏂瑰紡錛屽厛瀵硅板綍鍙栧規暟log(),鐒跺悗sum鑱氬悎錛屾渶鍚巈xp錛岀粨鏋滃氨鏄璁板綍鐩鎬箻鐨勭粨鏋溿
SUM鍑芥暟鐨勮娉曟槸錛
SELECT SUM(expression )
FROM tables
WHERE predicates;
琛ㄨ揪寮忓彲浠ユ槸涓涓鏁板煎瓧孌墊垨鍏寮忋
渚嬪傦紝鍙鑳芥兂鐭ラ亾鍚堝苟鍏ㄤ綋鍛樺伐鐨勮柂閲戞婚濈編鍏冧互涓婏紝鍏惰柂閰鏄25,000/騫
SELECT SUM(salary) as "Total Salary"
FROM employees
WHERE salary > 25000;
『叄』 sql鏁版嵁鍒嗘瀽鈥斺攃oalesce鍑芥暟
娣卞叆瑙f瀽SQL鏁版嵁鍒嗘瀽涓鐨刢oalesce鍑芥暟錛氭彁鍗囨晥鐜囦笌瀹炵敤鑹烘湳
鍦ㄦ暟鎹澶勭悊鐨勯亾璺涓婏紝coalesce鍑芥暟灝卞儚涓涓涓嶅彲鎴栫己鐨勫姪鎵嬶紝灝界″苟闈炲繀闇錛屼絾瀹冪殑瀛樺湪鏃犵枒鑳戒負浣犵殑鏁版嵁鍒嗘瀽宸ヤ綔甯︽潵鎰忔兂涓嶅埌鐨勬晥鐜囨彁鍗囥傜畝鍗曟潵璇達紝coalesce鍑芥暟鐨勮娉曞備笅錛coalesce(琛ㄨ揪寮1, 琛ㄨ揪寮2, ..., 琛ㄨ揪寮弉)錛岃繖閲岀殑琛ㄨ揪寮忓彲浠ユ槸1涓鎴栧氫釜錛屽寘鎷瀛楃︿覆銆佸瓧孌電瓑銆傚敖綆″湪鍙鏈変竴涓琛ㄨ揪寮忔椂錛屽畠涓嶈兘鎺ュ彈null錛屼絾鍙浠ユ帴鍙楃┖瀛楃︿覆錛屽俢oalesce('')銆
鍩烘湰紺轟緥婕旂ず
璁╂垜浠閫氳繃瀹炰緥鏉ョ洿瑙傛劅鍙楀畠鐨勫▉鍔涖傚綋琛ㄨ揪寮1涓虹┖鏃訛紝coalesce浼氫緷嬈℃鏌ュ悗緇琛ㄨ揪寮忥紝鐩村埌鎵懼埌闈炵┖鍊箋傜湅榪欎簺渚嬪瓙錛
- 紺轟緥1錛 SELECT COALESCE(NULL, '榪斿洖絎浜屼釜', '榪斿洖絎涓変釜'); 緇撴灉錛氳繑鍥炵浜屼釜
- 紺轟緥2錛 SELECT COALESCE(NULL, NULL, '榪斿洖絎涓変釜'); 緇撴灉錛氳繑鍥炵涓変釜
- 紺轟緥3錛 SELECT COALESCE('', NULL, '榪斿洖絎涓変釜'); 緇撴灉錛氭棤錛堝洜涓虹┖瀛楃︿覆涔熺畻絀哄礆級
- 紺轟緥4錛 SELECT COALESCE(NULL, 0); 緇撴灉錛0錛堢洿鎺ヨ繑鍥炴暟鍊0錛屾棤闇鎷呭績null鐨勫勭悊錛
瀹為檯搴旂敤瀹炰緥
鍦ㄥ疄闄呯殑鏁版嵁澶勭悊涓錛宑oalesce鍑芥暟鑳界畝鍖栧緢澶氶昏緫銆備緥濡傦紝鍋囪炬垜浠鏈夎繖鏍蜂竴緇勬暟鎹錛
- 瀹炰緥1錛 褰撶敤鎴穒d錛坲serid錛変負絀烘椂錛屾垜浠鐢╥d2鏇誇唬錛孲ELECT COALESCE(userid, id2, id3) AS newid; 緇撴灉灝嗗睍紺篿d2鐨勫箋
- 瀹炰緥2錛 媯鏌userid鍜宨d2鏄鍚﹁嚦灝戞湁涓涓闈炵┖錛屾煡璇㈣︾粏淇℃伅錛歋ELECT * FROM table WHERE COALESCE(userid, id2) IS NOT NULL; 榪欐牱姣旈愪竴鍐檌s not null鏉′歡瑕佺畝媧侀珮鏁堛
鎬葷粨鏉ヨ達紝coalesce鍑芥暟鐨勫閥濡欒繍鐢ㄤ笉浠呰兘綆鍖栦唬鐮侊紝榪樿兘鎻愰珮鏁版嵁澶勭悊鐨勬晥鐜囥傛帉鎻″畠錛岃╂暟鎹鍒嗘瀽宸ヤ綔鏇村姞寰楀績搴旀墜錛屼簨鍗婂姛鍊嶃