




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)庫(kù)語(yǔ)言3 數(shù)據(jù)庫(kù)語(yǔ)言數(shù)據(jù)庫(kù)語(yǔ)言SQLElelen Enmi膠原蛋白口服液買四贈(zèng)一膠原蛋白口服液買四贈(zèng)一 品牌正品情侶裝品牌正品情侶裝 親子裝全場(chǎng)包郵親子裝全場(chǎng)包郵 淘寶:淘寶: 或者拍拍:或者拍拍:數(shù)據(jù)庫(kù)語(yǔ)言本章目標(biāo)本章目標(biāo) 本章主要介紹本章主要介紹SQL語(yǔ)言的基本語(yǔ)法和語(yǔ)言的基本語(yǔ)法和使用方式,要求熟練掌握使用方式,要求熟練掌握SQL語(yǔ)言的使用語(yǔ)言的使用規(guī)則,能夠根據(jù)實(shí)際需求寫出能夠準(zhǔn)確完規(guī)則,能夠根據(jù)實(shí)際需求寫出能夠準(zhǔn)確完成操作的成操作的SQL語(yǔ)句。語(yǔ)句。數(shù)據(jù)庫(kù)語(yǔ)言3.1 概述概述 SQL的發(fā)展的發(fā)展 1974年,由年,由Boyce和和Chamberlin提出提出 19751979,I
2、BM San Jose Research Lab的關(guān)系數(shù)據(jù)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)原型庫(kù)管理系統(tǒng)原型System R實(shí)施了這種語(yǔ)言實(shí)施了這種語(yǔ)言 SQL-86是第一個(gè)是第一個(gè)SQL標(biāo)準(zhǔn)標(biāo)準(zhǔn) SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 現(xiàn)狀現(xiàn)狀 大部分大部分DBMS產(chǎn)品都支持產(chǎn)品都支持SQL,成為操作數(shù)據(jù)庫(kù)的標(biāo),成為操作數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言準(zhǔn)語(yǔ)言 有特殊性,支持程度不同有特殊性,支持程度不同數(shù)據(jù)庫(kù)語(yǔ)言q 數(shù)據(jù)定義(數(shù)據(jù)定義(DDL) 定義、刪除、修改關(guān)系模式(基本表)定義、刪除、修改關(guān)系模式(基本表) 定義、刪除視圖(定義、刪除視圖(View) 定義、刪除索引(定義、刪除索引(In
3、dex)q 數(shù)據(jù)操縱(數(shù)據(jù)操縱(DML) 數(shù)據(jù)查詢數(shù)據(jù)查詢 數(shù)據(jù)增、刪、改數(shù)據(jù)增、刪、改q 數(shù)據(jù)控制(數(shù)據(jù)控制(DCL) 用戶訪問權(quán)限的授予、收回用戶訪問權(quán)限的授予、收回3.1.1 SQL的功能的功能數(shù)據(jù)庫(kù)語(yǔ)言q 交互式交互式SQL 一般一般DBMS都提供聯(lián)機(jī)交互工具都提供聯(lián)機(jī)交互工具 用戶可直接鍵入用戶可直接鍵入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作 由由DBMS來(lái)進(jìn)行解釋來(lái)進(jìn)行解釋q 嵌入式嵌入式SQL 能將能將SQL語(yǔ)句嵌入到高級(jí)語(yǔ)言(宿主語(yǔ)言)語(yǔ)句嵌入到高級(jí)語(yǔ)言(宿主語(yǔ)言) 使應(yīng)用程序充分利用使應(yīng)用程序充分利用SQL訪問數(shù)據(jù)庫(kù)的能力、訪問數(shù)據(jù)庫(kù)的能力、宿主語(yǔ)言的過(guò)程處理能力宿主
4、語(yǔ)言的過(guò)程處理能力 一般需要預(yù)編譯,將嵌入的一般需要預(yù)編譯,將嵌入的SQL語(yǔ)句轉(zhuǎn)化為宿語(yǔ)句轉(zhuǎn)化為宿主語(yǔ)言編譯器能處理的語(yǔ)句主語(yǔ)言編譯器能處理的語(yǔ)句3.1.2 SQL的形式的形式數(shù)據(jù)庫(kù)語(yǔ)言q數(shù)據(jù)定義數(shù)據(jù)定義Create、Drop、Alterq數(shù)據(jù)操縱數(shù)據(jù)操縱數(shù)據(jù)查詢:數(shù)據(jù)查詢:Select數(shù)據(jù)修改:數(shù)據(jù)修改:Insert、Update、Deleteq數(shù)據(jù)控制數(shù)據(jù)控制Grant、Revoke3.1.3 SQL的動(dòng)詞的動(dòng)詞數(shù)據(jù)庫(kù)語(yǔ)言數(shù)據(jù)查詢數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)應(yīng)用的核心功能。是數(shù)據(jù)庫(kù)應(yīng)用的核心功能。v 基本結(jié)構(gòu):基本結(jié)構(gòu):Select A1, A2, ., AnFrom r1, r2, ., rmWhe
5、re P3.2 數(shù)據(jù)查詢數(shù)據(jù)查詢SelectWhereFromA1, A2, ., An( p(r1r1.rm)數(shù)據(jù)庫(kù)語(yǔ)言3.2.1 Select語(yǔ)句的含義語(yǔ)句的含義 對(duì)對(duì) From 子句中的各關(guān)系,作笛卡兒積(子句中的各關(guān)系,作笛卡兒積() 對(duì)對(duì) Where 子句中的邏輯表達(dá)式進(jìn)行選擇(子句中的邏輯表達(dá)式進(jìn)行選擇()運(yùn)算,找出符合條件的元組。運(yùn)算,找出符合條件的元組。 根據(jù)根據(jù) Select 子句中的屬性列表,對(duì)上述結(jié)果作子句中的屬性列表,對(duì)上述結(jié)果作投影(投影( )操作。)操作。 查詢操作的對(duì)象是關(guān)系,結(jié)果還是一個(gè)關(guān)系,查詢操作的對(duì)象是關(guān)系,結(jié)果還是一個(gè)關(guān)系,是一個(gè)結(jié)果集,是一個(gè)動(dòng)態(tài)數(shù)據(jù)集
6、。是一個(gè)結(jié)果集,是一個(gè)動(dòng)態(tài)數(shù)據(jù)集。3.2.2 Select子句子句 對(duì)應(yīng)于關(guān)系代數(shù)的投影(對(duì)應(yīng)于關(guān)系代數(shù)的投影()運(yùn)算,用以)運(yùn)算,用以列出查詢結(jié)果集中的期望屬性。列出查詢結(jié)果集中的期望屬性。數(shù)據(jù)庫(kù)語(yǔ)言q 重復(fù)元組重復(fù)元組 SQL 具有包的特性具有包的特性Select子句的缺省情況是保留重復(fù)元組子句的缺省情況是保留重復(fù)元組(ALL),可用可用 Distinct去除重復(fù)元組去除重復(fù)元組Select Distinct sdept From StudentSelect All sdept From Student去除重復(fù)元組去除重復(fù)元組:費(fèi)時(shí)費(fèi)時(shí)需要臨時(shí)表的支持需要臨時(shí)表的支持?jǐn)?shù)據(jù)庫(kù)語(yǔ)言q *與屬性
7、列表與屬性列表v 星號(hào)星號(hào) * * 表示所有屬性表示所有屬性 星號(hào)星號(hào) * * :按關(guān)系模式中屬性的順序排列,按關(guān)系模式中屬性的順序排列,并具有一定的邏輯數(shù)據(jù)獨(dú)立性并具有一定的邏輯數(shù)據(jù)獨(dú)立性 顯式列出屬性名:顯式列出屬性名:按用戶順序排列按用戶順序排列Select * From StudentSelect Student.*,cno,grade From Student,SC Where Student.sno = SC.sno數(shù)據(jù)庫(kù)語(yǔ)言q 更名更名 為結(jié)果集中的某個(gè)屬性改名為結(jié)果集中的某個(gè)屬性改名 使結(jié)果集更具可讀性使結(jié)果集更具可讀性Select sno as stu_no,cno as c
8、ourse_no, grade From SCSelect sno,sname,2001 - sage as birthday From Student數(shù)據(jù)庫(kù)語(yǔ)言3.2.3 where子句子句 where子句對(duì)應(yīng)與關(guān)系代數(shù)中的選擇子句對(duì)應(yīng)與關(guān)系代數(shù)中的選擇()。 查詢滿足指定條件的元組可以通過(guò)查詢滿足指定條件的元組可以通過(guò)Where子句來(lái)實(shí)現(xiàn)。子句來(lái)實(shí)現(xiàn)。 使使where子句中的邏輯表達(dá)式返回子句中的邏輯表達(dá)式返回True值值的元組,是符合要求的元組,將被選擇的元組,是符合要求的元組,將被選擇出來(lái)。出來(lái)。數(shù)據(jù)庫(kù)語(yǔ)言q 運(yùn)算符運(yùn)算符 比較:比較: 、= 、=、= =、not + not + 確定
9、范圍:確定范圍:Between A and B、Not Between A and B 確定集合:確定集合:IN、NOT IN 字符匹配:字符匹配:LIKE,NOT LIKE 空值:空值:IS NULL、IS NOT NULL 多重條件:多重條件:AND、OR、NOT 數(shù)據(jù)庫(kù)語(yǔ)言q like字符匹配:字符匹配:Like、Not Like通配符:通配符:% 匹配任意字符串匹配任意字符串_ 匹配任意一個(gè)字符匹配任意一個(gè)字符大小寫敏感大小寫敏感數(shù)據(jù)庫(kù)語(yǔ)言 列出姓張的學(xué)生的學(xué)號(hào)、姓名。列出姓張的學(xué)生的學(xué)號(hào)、姓名。Select sno,sname From Student Where sname LIK
10、E 張張% 列出張姓且單名的學(xué)生的學(xué)號(hào)、姓名。列出張姓且單名的學(xué)生的學(xué)號(hào)、姓名。Select sno,sname From Student Where sname LIKE 張張_ _數(shù)據(jù)庫(kù)語(yǔ)言q 轉(zhuǎn)義符轉(zhuǎn)義符 escape例:例:列出課程名稱中帶有列出課程名稱中帶有_的課號(hào)及課的課號(hào)及課名。名。Select cno,cnameFrom CourseWhere cname LIKE %_% escape 數(shù)據(jù)庫(kù)語(yǔ)言3.2.4 from子句子句 From子句對(duì)應(yīng)與關(guān)系代數(shù)中的笛卡兒積(子句對(duì)應(yīng)與關(guān)系代數(shù)中的笛卡兒積() 列出將被掃描的關(guān)系(表)列出將被掃描的關(guān)系(表)例:例:列出所有學(xué)生的學(xué)號(hào)、
11、姓名、課號(hào)、成績(jī)。列出所有學(xué)生的學(xué)號(hào)、姓名、課號(hào)、成績(jī)。 Select Sudent.sno,sname,SC.cno,grade From Student,SC Where Student.sno = SC.sno數(shù)據(jù)庫(kù)語(yǔ)言q 元組變量元組變量 為為 From 子句中的關(guān)系定義元組變量子句中的關(guān)系定義元組變量 方便關(guān)系名的引用方便關(guān)系名的引用 在同一關(guān)系的笛卡兒積中進(jìn)行辨別在同一關(guān)系的笛卡兒積中進(jìn)行辨別例:例:列出與列出與95001同歲的同學(xué)的學(xué)號(hào),姓名,年齡。同歲的同學(xué)的學(xué)號(hào),姓名,年齡。 SelectT.sno,T.sname,T.sage FromStudent as T,Studen
12、t as S WhereS.sno = 95001 ANDT.sage = S.sage數(shù)據(jù)庫(kù)語(yǔ)言3.2.5 Order By子句子句 指定結(jié)果集中元組的排列次序指定結(jié)果集中元組的排列次序 耗時(shí)耗時(shí) ASC(缺?。?、(缺?。?、DESC、未選中的屬性、未選中的屬性例:例:列出列出CS系中的男生的學(xué)號(hào)、姓名、年齡,系中的男生的學(xué)號(hào)、姓名、年齡,并按年齡進(jìn)行排列(升序)。并按年齡進(jìn)行排列(升序)。Select sno,sname, sage From Student Where sdept = CS Order By sage ASC 數(shù)據(jù)庫(kù)語(yǔ)言3.3 數(shù)據(jù)定義語(yǔ)言數(shù)據(jù)定義語(yǔ)言 數(shù)據(jù)定義語(yǔ)言(數(shù)據(jù)定
13、義語(yǔ)言(Data Definition Language) Create、Drop、Alter 定義一組關(guān)系(基本表)、說(shuō)明各關(guān)系的信息定義一組關(guān)系(基本表)、說(shuō)明各關(guān)系的信息 各關(guān)系的模式各關(guān)系的模式 各屬性的值域各屬性的值域 完整性約束完整性約束 索引索引 安全性和權(quán)限安全性和權(quán)限 數(shù)據(jù)庫(kù)語(yǔ)言3.3.1 SQL中的域類型中的域類型q 字符型字符型 char(n) 、varchar(n)q 數(shù)值型數(shù)值型 integer、smallint numeric(p,d) real、double、float(n)q 日期日期/時(shí)間型時(shí)間型 date time數(shù)據(jù)庫(kù)語(yǔ)言3.3.2 SQL中的域定義中的域
14、定義q 域定義語(yǔ)句(域定義語(yǔ)句(SQL-92支持)支持) 需重復(fù)使用的需重復(fù)使用的 Create Domain stu_name varchar(20) Create Domain zip_code char(6) q 域的刪除域的刪除 Drop Domain datelog 各各DBMS的方法是不同的的方法是不同的Restrict/Cascade 使用該域的屬性的處理使用該域的屬性的處理 數(shù)據(jù)庫(kù)語(yǔ)言3.3.3 SQL中的模式定義中的模式定義 Create Table r (A1D1, A2D2, AnDn, , )其中:其中:r 關(guān)系名(表名)、關(guān)系名(表名)、 Ai 關(guān)系關(guān)系 r 的一個(gè)屬
15、性名的一個(gè)屬性名Dn 屬性屬性Ai域值的域類型域值的域類型主鍵聲明:主鍵聲明:primary key (Aj1 ,Aj2 ,Ajvm )數(shù)據(jù)庫(kù)語(yǔ)言Create Domain stu_name varchar(20)Create Table Student (sno char(10) primary key(sno) ,sname stu_name ,sage smallint,ssex char(1),sdept char(2)數(shù)據(jù)庫(kù)語(yǔ)言Create Table Course (cno char(10) primary key (cno) ,cname varchar(20) ,credit
16、smallint )Create Table SC (sno char(10) not null ,cno char(10) not null ,grade smallint,primary key (sno, cno)Elelen Enmi膠原蛋白口服液買四贈(zèng)一膠原蛋白口服液買四贈(zèng)一 品牌正品情侶品牌正品情侶裝裝 親子裝全場(chǎng)包郵親子裝全場(chǎng)包郵 淘寶:淘寶: 或者拍拍:或者拍拍:數(shù)據(jù)庫(kù)語(yǔ)言3.3.4 刪除表結(jié)構(gòu)刪除表結(jié)構(gòu) 用用SQL刪除關(guān)系(表)刪除關(guān)系(表) 將整個(gè)關(guān)系模式(表結(jié)構(gòu))徹底刪除將整個(gè)關(guān)系模式(表結(jié)構(gòu))徹底刪除 表中的數(shù)據(jù)也將被刪除表中的數(shù)據(jù)也將被刪除Drop Table rDr
17、op Table student數(shù)據(jù)庫(kù)語(yǔ)言3.3.5 修改表結(jié)構(gòu)修改表結(jié)構(gòu)q 刪除表中的某屬性刪除表中的某屬性 去除屬性及相應(yīng)的數(shù)據(jù)去除屬性及相應(yīng)的數(shù)據(jù)Alter Table r Drop A q 增加表中的屬性增加表中的屬性 向已經(jīng)存在的表中添加屬性向已經(jīng)存在的表中添加屬性 allow null 已有的元組中該屬性的值被置為已有的元組中該屬性的值被置為NullAlter Table r Add A DAlter Table student phone char(16)數(shù)據(jù)庫(kù)語(yǔ)言3.3.6 Default Value 屬性的默認(rèn)值屬性的默認(rèn)值 用戶不提供某屬性的值時(shí),默認(rèn)值被使用用戶不提供某屬
18、性的值時(shí),默認(rèn)值被使用 初始值初始值 DDL中:中:ModifyDate char(30) Default TimeStampAlter Table student Add ID integer Default 1001數(shù)據(jù)庫(kù)語(yǔ)言3.3.7 索引索引Index 索引是一種數(shù)據(jù)結(jié)構(gòu),是對(duì)照表、指針表索引是一種數(shù)據(jù)結(jié)構(gòu),是對(duì)照表、指針表 索引是為了加速對(duì)表中元組的檢索而創(chuàng)建索引是為了加速對(duì)表中元組的檢索而創(chuàng)建的一種分散存儲(chǔ)結(jié)構(gòu)(的一種分散存儲(chǔ)結(jié)構(gòu)(B樹)樹) 索引是對(duì)表而建立的,由除存放表的數(shù)據(jù)索引是對(duì)表而建立的,由除存放表的數(shù)據(jù)頁(yè)面以外的索引頁(yè)面組成頁(yè)面以外的索引頁(yè)面組成 索引是把雙刃劍,減慢更
19、新的速度索引是把雙刃劍,減慢更新的速度 索引不是索引不是SQL標(biāo)準(zhǔn)的要求標(biāo)準(zhǔn)的要求q 索引的種類索引的種類 聚簇索引(聚簇索引(Clustered Index) 非聚簇索引(非聚簇索引(Non-Clustered Index) 數(shù)據(jù)庫(kù)語(yǔ)言q 聚簇索引(聚簇索引(Clustered Index) 表中的元組按聚簇索引的順序物理地存放表中的元組按聚簇索引的順序物理地存放 根級(jí)頁(yè)面根級(jí)頁(yè)面-中間層頁(yè)面中間層頁(yè)面-葉級(jí)頁(yè)面(數(shù)據(jù)頁(yè)面)葉級(jí)頁(yè)面(數(shù)據(jù)頁(yè)面) 一個(gè)表中只能有一個(gè)聚簇索引一個(gè)表中只能有一個(gè)聚簇索引 更新的復(fù)雜性,需要大量的臨時(shí)空間更新的復(fù)雜性,需要大量的臨時(shí)空間q 非聚簇索引(非聚簇索引(N
20、on-Clustered Index) 表中的元組按聚簇索引的順序物理地存放表中的元組按聚簇索引的順序物理地存放 根級(jí)頁(yè)面根級(jí)頁(yè)面-中間層頁(yè)面中間層頁(yè)面-葉級(jí)頁(yè)面(數(shù)據(jù)頁(yè)面)葉級(jí)頁(yè)面(數(shù)據(jù)頁(yè)面) 一個(gè)表中只能有一個(gè)聚簇索引一個(gè)表中只能有一個(gè)聚簇索引 更新的復(fù)雜性,需要大量的臨時(shí)空間更新的復(fù)雜性,需要大量的臨時(shí)空間數(shù)據(jù)庫(kù)語(yǔ)言CREATE UNIQUE CLUSTERED | NONCLUSTEREDINDEX index-name On TableName(Column,Column,)Create Index YearIndex On Movie(year)Create Clustered I
21、ndex SnoIndex On student(sno) Drop Index YearIndex數(shù)據(jù)庫(kù)語(yǔ)言3.4 數(shù)據(jù)添加數(shù)據(jù)添加v 用用SQL的插入語(yǔ)句,向數(shù)據(jù)庫(kù)表中添加數(shù)據(jù)的插入語(yǔ)句,向數(shù)據(jù)庫(kù)表中添加數(shù)據(jù) 按關(guān)系模式的屬性順序按關(guān)系模式的屬性順序Insert Into Student Values ( 0095001, 張三張三,27, M, CS ) 按指定的屬性順序,也可以只添加部分屬性(非按指定的屬性順序,也可以只添加部分屬性(非Null屬性為必需)屬性為必需)Insert Into Student ( sno, sname, sage) Values ( 0095002, 李四
22、李四, 26 ) 數(shù)據(jù)庫(kù)語(yǔ)言3.5 聚合函數(shù)聚合函數(shù) 把一列中的值進(jìn)行聚合運(yùn)算,返回單值的函數(shù)。把一列中的值進(jìn)行聚合運(yùn)算,返回單值的函數(shù)。v五個(gè)預(yù)定義的聚合函數(shù)五個(gè)預(yù)定義的聚合函數(shù): 平均值:平均值:Avg 總和:總和: Sum 最小值:最小值:Min 最大值:最大值:Max 計(jì)數(shù):計(jì)數(shù):CountCount(*)、Count(Distinct) 數(shù)值數(shù)值數(shù)據(jù)庫(kù)語(yǔ)言3.5.1 Group By 將查詢結(jié)果集按某一列或多列的值分組,值相將查詢結(jié)果集按某一列或多列的值分組,值相等的為一組,一個(gè)分組以一個(gè)元組的形式出現(xiàn)。等的為一組,一個(gè)分組以一個(gè)元組的形式出現(xiàn)。 只有出現(xiàn)在只有出現(xiàn)在Group By
23、子句中的屬性,才可出現(xiàn)子句中的屬性,才可出現(xiàn)在在Select子句中。子句中。例:例:統(tǒng)計(jì)各系學(xué)生的人數(shù)。統(tǒng)計(jì)各系學(xué)生的人數(shù)。 Select sdept,count(*) as stu_count From Student Group By sdept 數(shù)據(jù)庫(kù)語(yǔ)言3.5.2 Having 針對(duì)聚合函數(shù)的結(jié)果值進(jìn)行篩選(選擇),針對(duì)聚合函數(shù)的結(jié)果值進(jìn)行篩選(選擇),它作用于分組計(jì)算結(jié)果集。它作用于分組計(jì)算結(jié)果集。 跟在跟在Group By子句的后面,沒有子句的后面,沒有Group By則則針對(duì)全表。針對(duì)全表。例:例:列出具有兩門(含)以上不及格的學(xué)生列出具有兩門(含)以上不及格的學(xué)生的學(xué)號(hào)、不及格
24、的課目數(shù)。的學(xué)號(hào)、不及格的課目數(shù)。 Select sno,count(sno) From SC Where grade = 2 數(shù)據(jù)庫(kù)語(yǔ)言3.5.3 Having與與Where的區(qū)別的區(qū)別 Where 決定哪些元組被選擇參加運(yùn)算,決定哪些元組被選擇參加運(yùn)算,作用于關(guān)系中的元組。作用于關(guān)系中的元組。 Having 決定哪些分組符合要求,作用決定哪些分組符合要求,作用于分組。于分組。 聚合函數(shù)的條件關(guān)系必須用聚合函數(shù)的條件關(guān)系必須用Having,Where中不應(yīng)出現(xiàn)聚合函數(shù)。中不應(yīng)出現(xiàn)聚合函數(shù)。數(shù)據(jù)庫(kù)語(yǔ)言3.5.4 聚合函數(shù)忽略聚合函數(shù)忽略Null Count:不計(jì)不計(jì) Sum:不將其計(jì)入不將其計(jì)
25、入 Avg:具有具有 Null 的元組不參與的元組不參與 Max / Min:不參與不參與例:例:Select count(sdept) From Student Select Avg(sage) From Student 數(shù)據(jù)庫(kù)語(yǔ)言3.6 子查詢子查詢 子查詢是嵌套在另一查詢中的子查詢是嵌套在另一查詢中的 Select-From-Where 表達(dá)式(表達(dá)式(Where/Having)。)。 SQL允許多層嵌套,由內(nèi)而外地進(jìn)行分析,允許多層嵌套,由內(nèi)而外地進(jìn)行分析,子查詢的結(jié)果作為父查詢的查找條件。子查詢的結(jié)果作為父查詢的查找條件。 可以用多個(gè)簡(jiǎn)單查詢來(lái)構(gòu)成復(fù)雜查詢,以增可以用多個(gè)簡(jiǎn)單查詢來(lái)構(gòu)
26、成復(fù)雜查詢,以增強(qiáng)強(qiáng)SQL的查詢能力。的查詢能力。 子查詢中不使用子查詢中不使用 Order By 子句,子句,Order By子句只能對(duì)最終查詢結(jié)果進(jìn)行排序。子句只能對(duì)最終查詢結(jié)果進(jìn)行排序。數(shù)據(jù)庫(kù)語(yǔ)言3.6.1 單值比較單值比較 返回單值的子查詢,只返回一行一列返回單值的子查詢,只返回一行一列 父查詢與單值子查詢之間用比較運(yùn)算符進(jìn)行連接父查詢與單值子查詢之間用比較運(yùn)算符進(jìn)行連接 運(yùn)算符:運(yùn)算符:、=、=、=、 例:例:找出與找出與95001同齡的學(xué)生同齡的學(xué)生 Select * From Student Where sage = ( Select sage From Student Wher
27、e sno = 95001 )數(shù)據(jù)庫(kù)語(yǔ)言3.6.2 多值多值 子查詢返回多行一列子查詢返回多行一列 運(yùn)算符:運(yùn)算符:In、All、Some(Any)、Exists 數(shù)據(jù)庫(kù)語(yǔ)言q in 標(biāo)量值與子查詢返回集中的某一個(gè)相等,標(biāo)量值與子查詢返回集中的某一個(gè)相等,true in 被用來(lái)測(cè)試多值中的成員。被用來(lái)測(cè)試多值中的成員。例:例:查詢選修查詢選修C01課程的學(xué)生的學(xué)號(hào)、姓名。課程的學(xué)生的學(xué)號(hào)、姓名。 Select sno,sname From Student Where sno IN (Select sno From SC Where cno = C01 )子查詢子查詢多行一列多行一列數(shù)據(jù)庫(kù)語(yǔ)言例
28、:例:查詢選修了查詢選修了 數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)的學(xué)生的學(xué)號(hào)和姓名的學(xué)生的學(xué)號(hào)和姓名 Select sno,sname From Student Where sno IN ( Select sno From SC Where cno IN ( Select cno From Course Where cname = 數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù))數(shù)據(jù)庫(kù)語(yǔ)言q all 多值比較:多值比較:多行一列多行一列 父查詢與多值子查詢之間的比較需用父查詢與多值子查詢之間的比較需用All來(lái)連接來(lái)連接 標(biāo)量值標(biāo)量值s比子查詢返回集比子查詢返回集R中的每個(gè)都大時(shí),中的每個(gè)都大時(shí),sAll R 為為 True All 表示所有表示所有
29、all、 all、=all、 all all 等價(jià)于等價(jià)于 not in 例:例:找出年齡最小的學(xué)生找出年齡最小的學(xué)生 Select * From Student Where sage Some R為為True 或或 s Any R為為True Some(早期用早期用Any)表示某一個(gè),只要有一個(gè)即返回真表示某一個(gè),只要有一個(gè)即返回真 some、 some、=some、 some = some 等價(jià)于等價(jià)于 in、 some 不等價(jià)于不等價(jià)于 not in 數(shù)據(jù)庫(kù)語(yǔ)言例:例:找出不是最小年齡的學(xué)生找出不是最小年齡的學(xué)生 Select * From student Where sage some
30、 ( Select sage From Student )例:例:找出具有最高平均成績(jī)的學(xué)號(hào)及平均成績(jī)找出具有最高平均成績(jī)的學(xué)號(hào)及平均成績(jī) Select sno ,avg(grade) From SC Group By sno Having avg(grade) = all ( Select avg(grade) From SC Group By sno )數(shù)據(jù)庫(kù)語(yǔ)言q exists Exists + 子查詢用來(lái)判斷該子查詢是否返回元組子查詢用來(lái)判斷該子查詢是否返回元組 當(dāng)子查詢的結(jié)果集非空時(shí),當(dāng)子查詢的結(jié)果集非空時(shí),Exists為為True 當(dāng)子查詢的結(jié)果集為空時(shí),當(dāng)子查詢的結(jié)果集為空時(shí),E
31、xists為為False 不關(guān)心子查詢的具體內(nèi)容,因此用不關(guān)心子查詢的具體內(nèi)容,因此用 Select * 數(shù)據(jù)庫(kù)語(yǔ)言例:例:列出選修了列出選修了C01課程的學(xué)生的學(xué)號(hào)、姓名課程的學(xué)生的學(xué)號(hào)、姓名 Select sno,sname From Student Where Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01)數(shù)據(jù)庫(kù)語(yǔ)言例:例:列出得過(guò)列出得過(guò)100分的學(xué)生的學(xué)號(hào)、姓名分的學(xué)生的學(xué)號(hào)、姓名 Select sno,sname From Student Where Exists ( Select * From
32、 SC Where SC.sno = Student.sno And grade = 100 )數(shù)據(jù)庫(kù)語(yǔ)言例:例:查詢選修了查詢選修了C01課程的學(xué)生的系主任課程的學(xué)生的系主任 Select manager From department Where Exists ( Select * From student Where sdept = department.depid And Exists ( Select * From SC Where SC.sno = student.sno And cno = C01)數(shù)據(jù)庫(kù)語(yǔ)言例:例:列出沒有選列出沒有選C01課程的學(xué)生的學(xué)號(hào)、姓名課程的學(xué)生的學(xué)號(hào)
33、、姓名 Select sno,sname From Student Where Not Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01)Elelen Enmi膠原蛋白口服液買四贈(zèng)一膠原蛋白口服液買四贈(zèng)一 品牌正品情侶裝品牌正品情侶裝 親子裝全場(chǎng)包郵親子裝全場(chǎng)包郵 淘寶:淘寶:m/ 或者拍拍:或者拍拍:數(shù)據(jù)庫(kù)語(yǔ)言例:例:查詢選修了所有課程的學(xué)生的姓名查詢選修了所有課程的學(xué)生的姓名( ForAll ) Select sname From Student Where Not Exists ( Select * Fr
34、om Course Where Not Exists ( Select * From SC Where Student.sno = SC.sno And SC.cno = Co)這門課他沒選這門課他沒選這樣的課是不存在的這樣的課是不存在的數(shù)據(jù)庫(kù)語(yǔ)言 SQL-92支持多列的成員資格測(cè)試(支持多列的成員資格測(cè)試(ASA7.0不支持)不支持)例:例:找出同系、同年齡、同性別的學(xué)生找出同系、同年齡、同性別的學(xué)生 Select * from Student as T Where(T.sdept,T.sage,T.ssex) IN ( Select sdept,sage,ssex From student
35、 as S Where S.sno T.sno ) 3.6.3 多列元組的比較多列元組的比較數(shù)據(jù)庫(kù)語(yǔ)言3.6.4 派生關(guān)系派生關(guān)系 SQL-92允許在允許在 From中使用查詢表達(dá)式中使用查詢表達(dá)式 必須為其取名必須為其取名例:例:查詢平均成績(jī)大于查詢平均成績(jī)大于75分的學(xué)號(hào)、姓名、平均成績(jī)分的學(xué)號(hào)、姓名、平均成績(jī) Select stu_no,sname,avg_grade From Student, (Select sno,avg(grade) From SC Group By sno ) as S (stu_no,avg_grade) Where Student.sno = S.stu_n
36、o And avg_grade 75數(shù)據(jù)庫(kù)語(yǔ)言3.7 空值與連接空值與連接3.7.1 NULL 表示數(shù)據(jù)的缺失表示數(shù)據(jù)的缺失 一個(gè)確實(shí)存在,但我們不知道的值一個(gè)確實(shí)存在,但我們不知道的值 對(duì)本實(shí)體此數(shù)值無(wú)意義,可能是設(shè)計(jì)上的失誤對(duì)本實(shí)體此數(shù)值無(wú)意義,可能是設(shè)計(jì)上的失誤 是是SQL的關(guān)鍵字,用于任何類型描述缺失的值的關(guān)鍵字,用于任何類型描述缺失的值 數(shù)據(jù)庫(kù)語(yǔ)言3.7.3 NULL的運(yùn)算法則的運(yùn)算法則 對(duì)對(duì)NULL值和其他任何值作算術(shù)運(yùn)算時(shí),值和其他任何值作算術(shù)運(yùn)算時(shí),結(jié)果為結(jié)果為NULL 對(duì)對(duì)NULL值和其他任何值作比較時(shí),結(jié)值和其他任何值作比較時(shí),結(jié)果為果為UNKOWN Is Null / I
37、s Not Null數(shù)據(jù)庫(kù)語(yǔ)言3.7.4 Unkown的運(yùn)算規(guī)則的運(yùn)算規(guī)則 視視True為為1,F(xiàn)alse為為0,Unkown為為1/2 AND:取小:取小 OR:取大:取大 NOT:?。喝?的補(bǔ)的補(bǔ) 真值表不必死記硬背真值表不必死記硬背數(shù)據(jù)庫(kù)語(yǔ)言3.8 數(shù)據(jù)庫(kù)的修改數(shù)據(jù)庫(kù)的修改 v數(shù)據(jù)庫(kù)修改包括插入數(shù)據(jù)、修改數(shù)據(jù)庫(kù)修改包括插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)。數(shù)據(jù)、刪除數(shù)據(jù)。數(shù)據(jù)庫(kù)語(yǔ)言3.8.1 數(shù)據(jù)刪除數(shù)據(jù)刪除 只能對(duì)整個(gè)元組操作,不能只刪除某些屬性上只能對(duì)整個(gè)元組操作,不能只刪除某些屬性上的值。的值。 只能對(duì)一個(gè)關(guān)系起作用,若要從多個(gè)關(guān)系中刪只能對(duì)一個(gè)關(guān)系起作用,若要從多個(gè)關(guān)系中刪除元組,則必須
38、對(duì)每個(gè)關(guān)系分別執(zhí)行刪除命令。除元組,則必須對(duì)每個(gè)關(guān)系分別執(zhí)行刪除命令。 Delete From r Where P 從關(guān)系從關(guān)系 r 中刪除滿足中刪除滿足P的元組,只是刪除數(shù)據(jù),的元組,只是刪除數(shù)據(jù),而不是定義。而不是定義。數(shù)據(jù)庫(kù)語(yǔ)言 刪除單個(gè)元組刪除單個(gè)元組例:例:刪除學(xué)號(hào)為刪除學(xué)號(hào)為95001的學(xué)生的選課信息的學(xué)生的選課信息 Delete From SCWhere sno = 95001 刪除多個(gè)元組刪除多個(gè)元組例:例:刪除選課而未參加考試的學(xué)生的選課信息刪除選課而未參加考試的學(xué)生的選課信息 Delete From SCWhere grade is null 刪除整個(gè)關(guān)系中的所有數(shù)據(jù)刪除整
39、個(gè)關(guān)系中的所有數(shù)據(jù)例:例:刪除所有學(xué)生的選課信息刪除所有學(xué)生的選課信息 Delete From SC數(shù)據(jù)庫(kù)語(yǔ)言3.8.2 數(shù)據(jù)插入數(shù)據(jù)插入q 單行插入:一次只插入一個(gè)元組單行插入:一次只插入一個(gè)元組例:例:新增一個(gè)學(xué)生信息新增一個(gè)學(xué)生信息 Insert Into Student Values ( 98001, Gloria,25, F, CS)數(shù)據(jù)庫(kù)語(yǔ)言q 多行插入:插入一個(gè)集合多行插入:插入一個(gè)集合例:例:給給CS系的學(xué)生開設(shè)必修課系的學(xué)生開設(shè)必修課C05,建立選課信息,建立選課信息 Insert Into SC Select sno,cno,null From Student,Course
40、 Where sdept = CS and cno = C05數(shù)據(jù)庫(kù)語(yǔ)言3.8.3 數(shù)據(jù)更新數(shù)據(jù)更新 改變符合條件的某個(gè)(某些)元組的屬性值改變符合條件的某個(gè)(某些)元組的屬性值例:例:將將95001學(xué)生轉(zhuǎn)入學(xué)生轉(zhuǎn)入MA系系 Update Student Set sdept = MA Where sno = 95001 例:例:所有學(xué)生年齡加所有學(xué)生年齡加1 Update Student Set sage = sage + 1 數(shù)據(jù)庫(kù)語(yǔ)言例:例:將選修將選修C05課程的學(xué)生的成績(jī)改為該課的平均成績(jī)課程的學(xué)生的成績(jī)改為該課的平均成績(jī) Update SC Set grade = ( Select
41、avg(grade ) From SC Where cno = C05) Where cno = C05先計(jì)算先計(jì)算avg,再做,再做Update數(shù)據(jù)庫(kù)語(yǔ)言3.9 視圖視圖 是從一個(gè)或幾個(gè)基本表(或視圖)中導(dǎo)出的虛表是從一個(gè)或幾個(gè)基本表(或視圖)中導(dǎo)出的虛表 數(shù)據(jù)庫(kù)中只保存它的定義數(shù)據(jù)庫(kù)中只保存它的定義 是是RDBMS提供給用戶以多種角度觀察數(shù)據(jù)庫(kù)中提供給用戶以多種角度觀察數(shù)據(jù)庫(kù)中數(shù)據(jù)的重要機(jī)制數(shù)據(jù)的重要機(jī)制 創(chuàng)建視圖、刪除創(chuàng)建視圖、刪除 Create View v as Drop View v 數(shù)據(jù)庫(kù)語(yǔ)言例:例:計(jì)算機(jī)系的花名冊(cè)計(jì)算機(jī)系的花名冊(cè) Create View CS_Stu as S
42、elect sno, sname, ssex From Student Where sdept = CS數(shù)據(jù)庫(kù)語(yǔ)言3.9.1 視圖(視圖(View) 視圖名可以出現(xiàn)在任何關(guān)系名可以出現(xiàn)的地方視圖名可以出現(xiàn)在任何關(guān)系名可以出現(xiàn)的地方例:例:列出計(jì)算機(jī)系的男生列出計(jì)算機(jī)系的男生 Select sno,sname From CS_Stu Where ssex = M 數(shù)據(jù)庫(kù)語(yǔ)言例:例:建立學(xué)生平均成績(jī)視圖建立學(xué)生平均成績(jī)視圖 Create View avg_grade(sno,avg) as Select sno,avg(grade) From SC Group By sno例:例:找出平均成績(jī)大于
43、等找出平均成績(jī)大于等75的學(xué)生的學(xué)生 Select * From avg_grade Where avg = 75 注意:注意:此例的使用方法是非標(biāo)準(zhǔn)的。此例的使用方法是非標(biāo)準(zhǔn)的。 數(shù)據(jù)庫(kù)語(yǔ)言avg不是不是原始屬性原始屬性 視圖的更新:?jiǎn)伪?、原始屬性?gòu)成的視圖的更新:?jiǎn)伪?、原始屬性?gòu)成的視圖可以更新(像基本表那樣更新)視圖可以更新(像基本表那樣更新) 由多表構(gòu)成的視圖由很大的限制由多表構(gòu)成的視圖由很大的限制 視圖中的非原始屬性也不能更新視圖中的非原始屬性也不能更新例:例:Update avg_grade Set avg = 100 Where sno = 95001 數(shù)據(jù)庫(kù)語(yǔ)言3.9.2 視圖
44、的作用視圖的作用 簡(jiǎn)化用戶的操作簡(jiǎn)化用戶的操作 不同的用戶可從不同的角度看待同一數(shù)據(jù)不同的用戶可從不同的角度看待同一數(shù)據(jù) 支持一定的邏輯數(shù)據(jù)獨(dú)立性支持一定的邏輯數(shù)據(jù)獨(dú)立性 數(shù)據(jù)的安全性數(shù)據(jù)的安全性數(shù)據(jù)庫(kù)語(yǔ)言3.9.3 綜合示例綜合示例Create Domain stu_name varchar(20)Create Table Student (sno char(10) not null, sname stu_name , sage smallint, ssex char(1), sdept char(2), primary key (sno), check(ssex in (M, F)數(shù)據(jù)庫(kù)語(yǔ)
45、言Create Table Course ( cno char(10) not null , cname varchar(20) , credit smallint, primary key (cno)Create Table SC ( sno char(10) not null , cno char(10) not null , grade smallint, primary key (sno, cno), check(grade =0 and grade =100)數(shù)據(jù)庫(kù)語(yǔ)言3.10 嵌入式嵌入式SQL 前面所介紹的前面所介紹的SQL語(yǔ)言作為一種獨(dú)語(yǔ)言作為一種獨(dú)立的自含式語(yǔ)言,是聯(lián)機(jī)終端用
46、戶在交立的自含式語(yǔ)言,是聯(lián)機(jī)終端用戶在交互環(huán)境下使用的,稱為交互式互環(huán)境下使用的,稱為交互式SQL(INTERACTIVE SQL),簡(jiǎn)稱),簡(jiǎn)稱ISQL。數(shù)據(jù)庫(kù)語(yǔ)言v在實(shí)際應(yīng)用當(dāng)中,常常還需要解決這樣在實(shí)際應(yīng)用當(dāng)中,常常還需要解決這樣兩個(gè)問題:兩個(gè)問題: 有許多應(yīng)用是過(guò)程化的,要求根據(jù)不同的有許多應(yīng)用是過(guò)程化的,要求根據(jù)不同的條件來(lái)完成不同的任務(wù);條件來(lái)完成不同的任務(wù); 有許多應(yīng)用不僅需要讀出數(shù)據(jù),還必須讀有許多應(yīng)用不僅需要讀出數(shù)據(jù),還必須讀查詢得到的數(shù)據(jù)進(jìn)行處理。查詢得到的數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)庫(kù)語(yǔ)言 對(duì)于上述問題,單獨(dú)使用對(duì)于上述問題,單獨(dú)使用SQL語(yǔ)言是很難滿語(yǔ)言是很難滿足實(shí)際需求的。為了
47、解決這些問題,足實(shí)際需求的。為了解決這些問題,SQL還提出還提出了另外一種使用方式,即可以作為一種數(shù)據(jù)子語(yǔ)了另外一種使用方式,即可以作為一種數(shù)據(jù)子語(yǔ)言嵌入某些主語(yǔ)言中,利用高級(jí)語(yǔ)言的過(guò)程性結(jié)言嵌入某些主語(yǔ)言中,利用高級(jí)語(yǔ)言的過(guò)程性結(jié)構(gòu)來(lái)彌補(bǔ)構(gòu)來(lái)彌補(bǔ)SQL語(yǔ)言實(shí)現(xiàn)復(fù)雜應(yīng)用方面的不足。這語(yǔ)言實(shí)現(xiàn)復(fù)雜應(yīng)用方面的不足。這種將種將SQL嵌入嵌入COBOL, C, C+, FORTRAN,中使中使用,稱為嵌入式用,稱為嵌入式SQL(EMBEDDED SQL),簡(jiǎn)稱,簡(jiǎn)稱ESQL;而接受;而接受SQL嵌入的高級(jí)語(yǔ)言,稱為主語(yǔ)嵌入的高級(jí)語(yǔ)言,稱為主語(yǔ)言或者宿主語(yǔ)言。言或者宿主語(yǔ)言。數(shù)據(jù)庫(kù)語(yǔ)言v對(duì)于宿主語(yǔ)言中的
48、嵌入式對(duì)于宿主語(yǔ)言中的嵌入式SQl,DBMS通常采用兩種方法處理。通常采用兩種方法處理。 一是預(yù)編譯方法;一是預(yù)編譯方法; 一是修改和擴(kuò)充主語(yǔ)言方法,使之能夠一是修改和擴(kuò)充主語(yǔ)言方法,使之能夠處理處理SQL。 當(dāng)前主要采用第一種方法。其過(guò)程當(dāng)前主要采用第一種方法。其過(guò)程是,有是,有DBMS的預(yù)處理程序?qū)υ闯绦蜻M(jìn)的預(yù)處理程序?qū)υ闯绦蜻M(jìn)行掃描,識(shí)別出行掃描,識(shí)別出SQL語(yǔ)句,然后將它們語(yǔ)句,然后將它們轉(zhuǎn)換為主語(yǔ)言調(diào)用語(yǔ)句,從而使得主語(yǔ)轉(zhuǎn)換為主語(yǔ)言調(diào)用語(yǔ)句,從而使得主語(yǔ)言能過(guò)識(shí)別它們,最后由主語(yǔ)言的編譯言能過(guò)識(shí)別它們,最后由主語(yǔ)言的編譯程序?qū)⒄麄€(gè)源程序編譯成目標(biāo)代碼。程序?qū)⒄麄€(gè)源程序編譯成目標(biāo)代碼。
49、數(shù)據(jù)庫(kù)語(yǔ)言v 所有在終端交互方式下使用的所有在終端交互方式下使用的SQL均能在嵌入方均能在嵌入方式下使用。由于使用方式的差異,存在著具體操式下使用。由于使用方式的差異,存在著具體操作方式上的不同。但無(wú)論是怎樣的使用方式,都作方式上的不同。但無(wú)論是怎樣的使用方式,都需要解決下面三個(gè)主要問題:需要解決下面三個(gè)主要問題: 應(yīng)用程序中主語(yǔ)言的語(yǔ)句和應(yīng)用程序中主語(yǔ)言的語(yǔ)句和SQL的語(yǔ)句,這兩種的語(yǔ)句,這兩種語(yǔ)句;語(yǔ)句; 應(yīng)用程序中既有主語(yǔ)言變量又有應(yīng)用程序中既有主語(yǔ)言變量又有SQL列變量,如列變量,如何區(qū)分這兩種變量;何區(qū)分這兩種變量; 主語(yǔ)言變量一般均為標(biāo)量,而主語(yǔ)言變量一般均為標(biāo)量,而SQL中的列變
50、量一中的列變量一般均為集合量般均為集合量,如何建立由集合量到標(biāo)量的轉(zhuǎn)換。如何建立由集合量到標(biāo)量的轉(zhuǎn)換。數(shù)據(jù)庫(kù)語(yǔ)言3.10.1 主語(yǔ)言語(yǔ)句和主語(yǔ)言語(yǔ)句和SQL語(yǔ)句的區(qū)分語(yǔ)句的區(qū)分 在嵌入方式下,所有在嵌入方式下,所有SQL語(yǔ)句在嵌入主語(yǔ)句的程語(yǔ)句在嵌入主語(yǔ)句的程序時(shí)幾乎都必須在其前綴加序時(shí)幾乎都必須在其前綴加EXEC SQL,而結(jié)束,而結(jié)束標(biāo)志可以因主語(yǔ)言不同而不同,一般是在語(yǔ)句結(jié)標(biāo)志可以因主語(yǔ)言不同而不同,一般是在語(yǔ)句結(jié)束處用束處用END-EXEC 或用分號(hào)或用分號(hào)“;”。 在程序中所使用的在程序中所使用的SQL中的表,包括基表和視圖中的表,包括基表和視圖都要用都要用EXEC SQL DECL
51、EAR語(yǔ)句加以說(shuō)明。語(yǔ)句加以說(shuō)明。 SQL語(yǔ)句執(zhí)行后,系統(tǒng)要反饋給程序以信息,這語(yǔ)句執(zhí)行后,系統(tǒng)要反饋給程序以信息,這些信息均送入些信息均送入SQL通訊區(qū)(通訊區(qū)(SQL Communication Area)SQLCA。 SQLCA是一個(gè)數(shù)據(jù)結(jié)構(gòu),在應(yīng)用程序中用是一個(gè)數(shù)據(jù)結(jié)構(gòu),在應(yīng)用程序中用EXEC SQL INCLUDE SQLCA 語(yǔ)句加以定義。語(yǔ)句加以定義。數(shù)據(jù)庫(kù)語(yǔ)言 SQLCA中有一個(gè)存放每次執(zhí)行中有一個(gè)存放每次執(zhí)行SQL語(yǔ)句后返回語(yǔ)句后返回代碼的變量代碼的變量SQLCODE,這是一個(gè)整型變量,這是一個(gè)整型變量,反映反映SQL語(yǔ)句執(zhí)行后的結(jié)果狀態(tài)。語(yǔ)句執(zhí)行后的結(jié)果狀態(tài)。 應(yīng)用程序每執(zhí)
52、行一條應(yīng)用程序每執(zhí)行一條SQl語(yǔ)句之后都應(yīng)測(cè)試一次語(yǔ)句之后都應(yīng)測(cè)試一次SQLCODE的值。的值。 當(dāng)它為當(dāng)它為0時(shí)表示正常結(jié)束,即時(shí)表示正常結(jié)束,即SQL語(yǔ)句成功;語(yǔ)句成功; 非非0時(shí)為非正常結(jié)束,時(shí)為非正常結(jié)束,SQL語(yǔ)句不成功。語(yǔ)句不成功。 即使說(shuō),即使說(shuō),SQLCODE的基本功用是的基本功用是DBMS向宿向宿主程序報(bào)告執(zhí)行主程序報(bào)告執(zhí)行SQL語(yǔ)句的情況。語(yǔ)句的情況。Elelen Enmi膠原蛋白口服液買四贈(zèng)一膠原蛋白口服液買四贈(zèng)一 品牌正品情侶裝品牌正品情侶裝 親子裝全場(chǎng)包郵親子裝全場(chǎng)包郵 淘寶:淘寶: 或者拍拍:或者拍拍:數(shù)據(jù)庫(kù)語(yǔ)言例:例:在一些高級(jí)語(yǔ)言中使用嵌入式在一些高級(jí)語(yǔ)言中使用
53、嵌入式SQL語(yǔ)語(yǔ)言的格式與刪除言的格式與刪除S的情況。的情況。v在在C中使用中使用SQL語(yǔ)言使以語(yǔ)言使以EXEC SQL開始,開始,以分號(hào)以分號(hào)“;”結(jié)束,其格式為:結(jié)束,其格式為:EXEC SQL; 刪除關(guān)系刪除關(guān)系S的命令為:的命令為:EXEC SQL DROP TABLE S;數(shù)據(jù)庫(kù)語(yǔ)言v在在COBLE 中以中以EXEC SQL開始,以開始,以END_EXEC結(jié)束,格式為:結(jié)束,格式為: EXEC SQLEND_EXEC 刪除刪除S的語(yǔ)句為:的語(yǔ)句為: EXEC SQL DROP TABLE S END_EXECv在在Power Builder中使用中使用SQL與通常與通常SQL沒沒有任
54、何區(qū)別,語(yǔ)句前不需要加任何有任何區(qū)別,語(yǔ)句前不需要加任何EXEC SQL,只需用分號(hào)作為語(yǔ)句結(jié)束標(biāo)記,即,只需用分號(hào)作為語(yǔ)句結(jié)束標(biāo)記,即刪除刪除S的語(yǔ)句為:的語(yǔ)句為: DROP TABLE S數(shù)據(jù)庫(kù)語(yǔ)言 嵌入式嵌入式SQL語(yǔ)句根據(jù)其作用的不同,可以語(yǔ)句根據(jù)其作用的不同,可以分為可執(zhí)行語(yǔ)句和說(shuō)明性語(yǔ)句兩類。可執(zhí)行語(yǔ)分為可執(zhí)行語(yǔ)句和說(shuō)明性語(yǔ)句兩類??蓤?zhí)行語(yǔ)句又分為數(shù)據(jù)定義、數(shù)據(jù)控制和數(shù)據(jù)操作三種。句又分為數(shù)據(jù)定義、數(shù)據(jù)控制和數(shù)據(jù)操作三種。在宿主語(yǔ)言編寫的程序(宿主程序)中任何允在宿主語(yǔ)言編寫的程序(宿主程序)中任何允許出現(xiàn)執(zhí)行高級(jí)語(yǔ)言語(yǔ)句的地方,都可以嵌入許出現(xiàn)執(zhí)行高級(jí)語(yǔ)言語(yǔ)句的地方,都可以嵌入可
55、執(zhí)行可執(zhí)行SQL語(yǔ)句語(yǔ)句;任何允許出現(xiàn)說(shuō)明性高級(jí)語(yǔ)句任何允許出現(xiàn)說(shuō)明性高級(jí)語(yǔ)句的地方,都可以寫說(shuō)明性的地方,都可以寫說(shuō)明性SQL語(yǔ)句。語(yǔ)句。數(shù)據(jù)庫(kù)語(yǔ)言3.10.2 主語(yǔ)言變量與主語(yǔ)言變量與SQL變量的區(qū)別變量的區(qū)別主變量與指示變量主變量與指示變量v主變量主變量 在嵌入方式下,程序中的在嵌入方式下,程序中的SQL語(yǔ)句語(yǔ)句段內(nèi)可使用主語(yǔ)言的程序變量來(lái)輸入和段內(nèi)可使用主語(yǔ)言的程序變量來(lái)輸入和輸出數(shù)據(jù)。輸出數(shù)據(jù)。SQL中使用主語(yǔ)言程序定義中使用主語(yǔ)言程序定義的變量稱為主變量。的變量稱為主變量。數(shù)據(jù)庫(kù)語(yǔ)言 主變量根據(jù)其作用的不同,分為輸入主主變量根據(jù)其作用的不同,分為輸入主變量和輸出主變量。變量和輸出主
56、變量。 輸入主變量由應(yīng)用程序?qū)ζ滟x值,輸入主變量由應(yīng)用程序?qū)ζ滟x值,SQL加以引用;加以引用; 輸出主變量由輸出主變量由SQL語(yǔ)句對(duì)其賦值或設(shè)置語(yǔ)句對(duì)其賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序。狀態(tài)信息,返回給應(yīng)用程序。 一個(gè)主變量可以既是輸入主變量,又是一個(gè)主變量可以既是輸入主變量,又是輸出主變量。輸出主變量。數(shù)據(jù)庫(kù)語(yǔ)言v利用輸入主變量,我們可以完成以下功能:利用輸入主變量,我們可以完成以下功能: 指定向數(shù)據(jù)庫(kù)中插入的數(shù)據(jù);指定向數(shù)據(jù)庫(kù)中插入的數(shù)據(jù); 把數(shù)據(jù)庫(kù)中的數(shù)據(jù)修改為指定值;把數(shù)據(jù)庫(kù)中的數(shù)據(jù)修改為指定值; 指定指定WHERE子句或子句或HAVING子句中的條件。子句中的條件。 利用輸出主變量
57、,我們可以得到利用輸出主變量,我們可以得到SQL語(yǔ)句的語(yǔ)句的執(zhí)行結(jié)果和狀態(tài)信息。執(zhí)行結(jié)果和狀態(tài)信息。數(shù)據(jù)庫(kù)語(yǔ)言v 指示變量指示變量 一個(gè)主變量可以附帶一個(gè)任選的指示變量一個(gè)主變量可以附帶一個(gè)任選的指示變量(indicator variable)。)。 指示變量是一個(gè)整型變量,用來(lái)指示變量是一個(gè)整型變量,用來(lái)“指示指示”所述主變量的值或者條件。所述主變量的值或者條件。 指示變量可以指示輸入主變量是否為空值,指示變量可以指示輸入主變量是否為空值,可以檢測(cè)輸出主變量是否為空值,值是否可以檢測(cè)輸出主變量是否為空值,值是否被截?cái)嗟?。被截?cái)嗟?。?shù)據(jù)庫(kù)語(yǔ)言主變量與指示變量的說(shuō)明主變量與指示變量的說(shuō)明 所有所
58、有SQL語(yǔ)句中用到的主變量和指語(yǔ)句中用到的主變量和指示變量都必須加以說(shuō)明。示變量都必須加以說(shuō)明。v說(shuō)明的開頭行與結(jié)尾行分別為說(shuō)明的開頭行與結(jié)尾行分別為:EXEC SQL BEGIN DECLEAR SECTIONEXEC SQL END DECLEAR SECTION。說(shuō)明了之后的主變量和指示變量,可以在說(shuō)明了之后的主變量和指示變量,可以在SQL語(yǔ)句中任何一個(gè)能夠使用表達(dá)式的地語(yǔ)句中任何一個(gè)能夠使用表達(dá)式的地方調(diào)用。方調(diào)用。數(shù)據(jù)庫(kù)語(yǔ)言 SQL語(yǔ)句中的主變量名稱前必須添加冒號(hào)語(yǔ)句中的主變量名稱前必須添加冒號(hào)( )作為標(biāo)志,這是為了與數(shù)據(jù)庫(kù)中的)作為標(biāo)志,這是為了與數(shù)據(jù)庫(kù)中的對(duì)象名(表名,視圖名,屬性名等)向區(qū)對(duì)象名(表名,視圖名,屬性名等)向區(qū)別。同樣,別。同樣,SQL語(yǔ)句中的指示變量之前也語(yǔ)句中的指示變量之前也必須加有冒號(hào),同時(shí)緊跟在所指的主變量必須加有冒號(hào),同時(shí)緊跟在所指的主變量之后。之后。 在在SQL語(yǔ)句之外的其它地方,說(shuō)明之后的語(yǔ)句之外的其它地方,說(shuō)明之后的主變量和指示變量可以直接引用,不必添主變量和指示變量可以直接引用,不必添加冒號(hào)。加冒號(hào)。 在主程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年玉米高筋粉項(xiàng)目可行性研究報(bào)告
- 項(xiàng)目計(jì)劃范文(30篇)
- 入學(xué)教育心得體會(huì)(31篇)
- 2021-2026年中國(guó)電力設(shè)備開關(guān)行業(yè)投資分析及發(fā)展戰(zhàn)略研究咨詢報(bào)告
- 2025年中國(guó)多功能食品加工機(jī)行業(yè)市場(chǎng)全景調(diào)研及投資規(guī)劃建議報(bào)告
- 2025年度個(gè)人小額貸款合同簽訂流程解析
- 2021-2026年中國(guó)鐵路客運(yùn)市場(chǎng)供需格局及投資規(guī)劃研究報(bào)告
- 2025年焊夾具行業(yè)深度研究分析報(bào)告
- 2025年液壓支架項(xiàng)目可行性研究報(bào)告
- 2025年度國(guó)際貸款業(yè)務(wù)合作協(xié)議
- 醫(yī)院智能化系統(tǒng)內(nèi)網(wǎng)、外網(wǎng)及設(shè)備網(wǎng)系統(tǒng)拓?fù)鋱D-可編輯課件
- 【信息技術(shù)】信息技術(shù)及其應(yīng)用教學(xué)課件 2023-2024學(xué)年人教-中圖版(2019)高中信息技術(shù)必修二
- (正式版)JTT 1502-2024 直升機(jī)救生員搜救作業(yè)手勢(shì)信號(hào)要求
- 2024年社區(qū)工作者考試必背1000題題庫(kù)附答案(滿分必刷)
- 2024年鞍山職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)(500題)含答案解析
- 政企業(yè)務(wù)部門培訓(xùn)
- 2024年高考?xì)v史:全3冊(cè)核心知識(shí)梳理和大事年表
- 蘇教版三年級(jí)下冊(cè)數(shù)學(xué)全冊(cè)作業(yè)設(shè)計(jì)
- 4.《昆蟲備忘錄》 課件
- 非標(biāo)設(shè)備方案
- 教師如何進(jìn)行跨學(xué)科教學(xué)
評(píng)論
0/150
提交評(píng)論