時(shí)間:2022-11-08 22:30:01 | 來(lái)源:信息時(shí)代
時(shí)間:2022-11-08 22:30:01 來(lái)源:信息時(shí)代
SQL數(shù)據(jù)語(yǔ)句 : 可能對(duì)SQL數(shù)據(jù)進(jìn)行讀寫(xiě)操作的語(yǔ)句。SQL數(shù)據(jù)是由SQL模式描述的數(shù)據(jù),即SQL環(huán)境中在SQL實(shí)現(xiàn)的控制之下的數(shù)據(jù)。SQL數(shù)據(jù)語(yǔ)句又可進(jìn)一步劃分,其中可能對(duì)SQL數(shù)據(jù)產(chǎn)生持久影響的那些語(yǔ)句,稱為SQL數(shù)據(jù)變化語(yǔ)句,其功能相當(dāng)于一般概念中的數(shù)據(jù)操縱功能;除SQL數(shù)據(jù)變化語(yǔ)句之外的其他語(yǔ)句,SQL標(biāo)準(zhǔn)中沒(méi)有規(guī)定其具體名稱,其功能包括數(shù)據(jù)查詢、游標(biāo)的聲明、打開(kāi)、獲取、關(guān)閉等操作。
SQL數(shù)據(jù)變化語(yǔ)句在早期的SQL標(biāo)準(zhǔn)中包括插入語(yǔ)句、更新語(yǔ)句和刪除語(yǔ)句。在SQL2003中又新增了歸并語(yǔ)句。
插入語(yǔ)句用于向表中插入數(shù)據(jù),根據(jù)插入數(shù)據(jù)源的不同,可以分為三種: 插入一個(gè)或多個(gè)指定元組值; 插入一個(gè)子查詢的返回結(jié)果; 插入該表列的缺省值。如:
INSERT INTO STUDENT VALUES
('20050201','陳東','男','計(jì)算機(jī)',18);
該語(yǔ)句將一個(gè)指定元組(學(xué)號(hào):20050201;姓名:陳東; 性別: 男;所在系: 計(jì)算機(jī),年齡: 18歲)插入到STUDENT表中。
更新語(yǔ)句用于更新表中的行??梢酝ㄟ^(guò)游標(biāo)定位來(lái)更新某一指定行,也可通過(guò)搜索條件來(lái)更新所有滿足條件的行。由于兩種方式的語(yǔ)法差別較大,在SQL標(biāo)準(zhǔn)中更新語(yǔ)句又被分為“更新語(yǔ)句:定位”和“更新語(yǔ)句: 搜索”兩個(gè)語(yǔ)句來(lái)說(shuō)明。如:
UPDATE STUDENT SET SAGE=20
WHERE SNO='20050201';
該語(yǔ)句將表STUDENT中學(xué)號(hào)為20050201的學(xué)生的年齡改為20歲。
刪除語(yǔ)句用于刪除表中的行。同樣也可以通過(guò)游標(biāo)定位來(lái)刪除某一指定行,或者通過(guò)搜索條件來(lái)刪除所有滿足條件的行。在SQL標(biāo)準(zhǔn)中它們被分為“刪除語(yǔ)句: 定位”和“刪除語(yǔ)句: 搜索”兩個(gè)語(yǔ)句。如:
DELETE FROM STUDENT
WHERE SNO='20050201';
該語(yǔ)句刪除表STUDENT中學(xué)號(hào)為20050201的學(xué)生記錄。
歸并語(yǔ)句可根據(jù)一張表或子查詢與另一張表的連接條件對(duì)后者進(jìn)行查詢,連接條件匹配的進(jìn)行更新操作,無(wú)法匹配的執(zhí)行插入操作。例如: 假設(shè)BONUSES表中存放的是有銷售業(yè)績(jī)的員工編號(hào)及其分紅?,F(xiàn)在管理人員決定讓所有員工都得到分紅,方案為: 沒(méi)有銷售業(yè)績(jī)的員工得到工資的1%的分紅,而那些有銷售業(yè)績(jī)的員工得到的分紅為原有分紅加上工資的1%??梢杂孟铝蠱ERGE語(yǔ)句來(lái)完成上述修改:
MERGE INTO BONUSES D
USING(
SELECT EMPLOYEE_ID,SALARY,
DEPARTMENT ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=80)S
ON(D.EMPLOYEE_ID=S. EMPLOYEE_ID)
WHEN MATCHED THEN
UPDATE SET
D.BONUS=D.BONUS+S.SALARY*0.01
WHEN NOT MATCHED THEN
INSERT VALUES
(S.EMPLOYEE_ID,S.SALARY*0.01);
數(shù)據(jù)變化語(yǔ)句可能引起目標(biāo)表上的觸發(fā)器的執(zhí)行。觸發(fā)器是SQL99中為支持主動(dòng)數(shù)據(jù)庫(kù)而新增的一種模式對(duì)象,它指定目標(biāo)表上發(fā)生指定操作時(shí)應(yīng)執(zhí)行的相應(yīng)動(dòng)作。這個(gè)操作可以是插入、刪除或修改操作,相應(yīng)的動(dòng)作則是一條或多條SQL過(guò)程語(yǔ)句。當(dāng)觸發(fā)事件發(fā)生(例如向表中插入數(shù)據(jù))時(shí),目標(biāo)表上如有相應(yīng)的觸發(fā)器,就會(huì)在指定的時(shí)機(jī)被觸發(fā),執(zhí)行相應(yīng)的觸發(fā)動(dòng)作。觸發(fā)器的執(zhí)行被看作是引起它執(zhí)行的語(yǔ)句的一部分,如果語(yǔ)句執(zhí)行失敗,則不僅這條語(yǔ)句對(duì)數(shù)據(jù)庫(kù)產(chǎn)生的影響被撤銷,由該語(yǔ)句引發(fā)的所有觸發(fā)器對(duì)數(shù)據(jù)庫(kù)產(chǎn)生的影響也被撤銷。
數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)系統(tǒng)的核心操作。SQL標(biāo)準(zhǔn)提供多種方式下的數(shù)據(jù)查詢能力,既可作為可獨(dú)立使用的單行選擇語(yǔ)句,也可與游標(biāo)綁定使用,或者作為子查詢嵌套在其他語(yǔ)句中。查詢的基本語(yǔ)法形式為:
SELECT〈選擇清單〉
FROM〈表引用清單〉
[WHERE〈搜索條件〉]
[GROUP BY〈分組元素清單〉]
[HAVING〈條件表達(dá)式〉]
上述語(yǔ)法的含義為,根據(jù)WHERE子句的〈搜索條件〉,從FROM子句的〈表引用清單〉指定的基表或視圖中找出滿足條件的元組,再按SELECT子句中的〈選擇清單〉選出元組中的屬性值形成結(jié)果表。如果指定了GROUP子句,則將結(jié)果按〈分組元素清單〉中指定的屬性列的值進(jìn)行分組,屬性列值相等的值為一組。如果指定了HAVING子句,則只有滿足其〈條件表達(dá)式〉的組才被返回。如:
SELECT SDEPT
FROM STUDENT
WHERE SSEX='男'
GROUP BY SDEPT
HAVING COUNT(*)>100;
該語(yǔ)句查詢男生人數(shù)超過(guò)100人的系。
與數(shù)據(jù)查詢相關(guān)的SQL數(shù)據(jù)語(yǔ)句還包括一系列游標(biāo)操作語(yǔ)句。游標(biāo)是對(duì)SQL數(shù)據(jù)進(jìn)行操作的一種機(jī)制,通過(guò)它可以每次對(duì)表的一行進(jìn)行操作。游標(biāo)的提出是為了解決SQL語(yǔ)言與宿主語(yǔ)言之間的阻抗不匹配問(wèn)題,當(dāng)需要對(duì)包括多行的表進(jìn)行處理,而宿主程序只能一次處理一行數(shù)據(jù)時(shí),就必須使用游標(biāo)來(lái)獲取或更改SQL數(shù)據(jù)。SQL標(biāo)準(zhǔn)中的游標(biāo)又分為靜態(tài)游標(biāo)和動(dòng)態(tài)游標(biāo),與之相關(guān)的內(nèi)容詳見(jiàn)嵌入式SQL和動(dòng)態(tài)SQL。
客戶&案例
營(yíng)銷資訊
關(guān)于我們
客戶&案例
營(yíng)銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。