




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第3章 關(guān)系數(shù)據(jù)庫言語SQL 本章重要概念 1SQL數(shù)據(jù)庫的體系構(gòu)造,SQL的組成。2SQL的數(shù)據(jù)定義:SQL方式、根本表和索引的創(chuàng)建和撤銷。3SQL的數(shù)據(jù)查詢;SELECT語句的句法,SELECT語句的三種方式及各種限定,根本表的聯(lián)接操作。4SQL的數(shù)據(jù)更新:插入、刪除和修正語句。5視圖的創(chuàng)建和撤銷,對視圖更新操作的限制。 本章概述vSQL是關(guān)系數(shù)據(jù)庫的規(guī)范言語,對關(guān)系模型的開展和商用DBMS的研制起著重要的作用。SQL言語是介乎于關(guān)系代數(shù)和元組演算之間的一種言語。本章詳細引見SQL的中心部分內(nèi)容:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)更新和嵌入式SQL。 關(guān)系數(shù)據(jù)庫言語SQLv3.1 SQL的體系構(gòu)造
2、v3.2 SQL的數(shù)據(jù)定義 v3.3 SQL的數(shù)據(jù)查詢v3.4 數(shù)據(jù)更新 v3.5 視圖的定義和對視圖的操作 3.1 SQL的體系構(gòu)造 v3.1.1 SQL的產(chǎn)生與開展 v3.1.2 SQL數(shù)據(jù)庫的體系構(gòu)造 v3.1.3 SQL的組成 v3.1.4 SQL的特點前往SQLSQL的產(chǎn)生與開展的產(chǎn)生與開展1 1v19701970年,美國年,美國IBMIBM研討中心的研討中心的E.F.CoddE.F.Codd延續(xù)發(fā)表多篇論文,延續(xù)發(fā)表多篇論文,提出關(guān)系模型。提出關(guān)系模型。v19721972年,年,IBMIBM公司開場研制實驗型關(guān)系數(shù)據(jù)庫管理系統(tǒng)公司開場研制實驗型關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM RSY
3、STEM R,配制的查詢言語稱為,配制的查詢言語稱為SQUARESQUARE言語。言語。v19741974年,把年,把SQUARESQUARE修正為修正為SEQUELSEQUEL言語。言語。v19781978年,年,SEQUELSEQUEL簡稱為簡稱為SQLSQL,即,即“構(gòu)造式查詢言語。構(gòu)造式查詢言語。vSQLSQL的發(fā)音仍為的發(fā)音仍為“sequelsequel。如今。如今SQLSQL曾經(jīng)成為一個規(guī)范曾經(jīng)成為一個規(guī)范 ,其,其發(fā)音更傾向于發(fā)發(fā)音更傾向于發(fā)“ess-cue-ell ess-cue-ell 。SQLSQL的產(chǎn)生與開展的產(chǎn)生與開展2 2v19861986年年1010月,月,ANSI
4、 SQLANSI SQL規(guī)范規(guī)范v19871987年年6 6月,月,ISO SQLISO SQL規(guī)范規(guī)范v19921992年年8 8月,月,ISO SQLISO SQL規(guī)范規(guī)范SQL2SQL2v20192019年,年,ISO SQLISO SQL規(guī)范規(guī)范SQL3SQL3v在未來很長一段時間里,在未來很長一段時間里,SQLSQL仍將是關(guān)系數(shù)據(jù)仍將是關(guān)系數(shù)據(jù)庫領(lǐng)域的主流言語。在軟件工程、人工智能庫領(lǐng)域的主流言語。在軟件工程、人工智能領(lǐng)域,領(lǐng)域,SQLSQL已顯示出相當大的潛力。已顯示出相當大的潛力。SQL數(shù)據(jù)庫的體系構(gòu)造1 用戶1用戶2用戶3用戶4視圖1視圖1根本表1根本表2根本表3根本表4存儲文
5、件1存儲文件2存儲文件3存儲文件4圖3.1 SQL數(shù)據(jù)庫的體系構(gòu)造SQL用戶ViewBase tableStored fileSQL數(shù)據(jù)庫的體系構(gòu)造2v(1) (1) 一個一個SQLSQL方式方式 ( Schema ) ( Schema )是表和約束的集合。是表和約束的集合。v(2) (2) 一個表由行集構(gòu)成,一行是列的序列一個表由行集構(gòu)成,一行是列的序列 。v(3) (3) 表有三種類型表有三種類型: : 根本表、視圖和導出表。根本表、視圖和導出表。 v(4) (4) 根本表與存儲文件間的聯(lián)絡(luò)是根本表與存儲文件間的聯(lián)絡(luò)是M:NM:N。每個存儲。每個存儲v 文件與外部存儲器上一個物理文件對應。
6、文件與外部存儲器上一個物理文件對應。v(5) (5) 用戶可以用用戶可以用SQLSQL語句對根本表和視圖進展查詢等操作。語句對根本表和視圖進展查詢等操作。在用戶看來,兩者是一樣的,都是表。在用戶看來,兩者是一樣的,都是表。v(6) SQL(6) SQL用戶可以是運用程序,也可以是終端用戶。用戶可以是運用程序,也可以是終端用戶。v雖然雖然SQLSQL是國際公認的關(guān)系數(shù)據(jù)庫規(guī)范,但規(guī)范的是國際公認的關(guān)系數(shù)據(jù)庫規(guī)范,但規(guī)范的SQLSQL文檔中文檔中并沒有運用并沒有運用“關(guān)系和關(guān)系和“數(shù)據(jù)庫這兩個名詞。數(shù)據(jù)庫這兩個名詞。SQL的組成 v中心SQL主要有四個部分:v(1) 數(shù)據(jù)定義言語,即SQL DDL
7、,用于定義SQL方式、根本表、視圖、索引等構(gòu)造。v(2) 數(shù)據(jù)支配言語,即SQL DML。數(shù)據(jù)支配分成數(shù)據(jù)查詢和數(shù)據(jù)更新兩類。其中數(shù)據(jù)更新又分成插入、刪除和修正三種操作。v(3) 嵌入式SQL言語的運用規(guī)定。這一部分內(nèi)容涉及到SQL語句嵌入在宿主言語程序中的規(guī)那么。v(4) 數(shù)據(jù)控制言語,即SQL DCL,這一部分包括對根本表和視圖的授權(quán)、完好性規(guī)那么的描畫、事務(wù)控制等內(nèi)容。 前往3.1.4 SQL3.1.4 SQL的特點的特點1 1SQLSQL具有非常靈敏和強大的查詢功能,其具有非常靈敏和強大的查詢功能,其SELECTSELECT語句能完語句能完成相當復雜的查詢操作。成相當復雜的查詢操作。2
8、 2SQLSQL不是一個運用開發(fā)言語,它只提供對數(shù)據(jù)庫的操作功不是一個運用開發(fā)言語,它只提供對數(shù)據(jù)庫的操作功能,不能完成屏幕控制、菜單管理、報表生成等功能。能,不能完成屏幕控制、菜單管理、報表生成等功能。3 3SQLSQL是國際規(guī)范言語,有利于各種數(shù)據(jù)庫之間交換數(shù)據(jù),是國際規(guī)范言語,有利于各種數(shù)據(jù)庫之間交換數(shù)據(jù),有利于程序的移植,有利于實現(xiàn)高度的數(shù)據(jù)獨立性,有利于有利于程序的移植,有利于實現(xiàn)高度的數(shù)據(jù)獨立性,有利于實現(xiàn)規(guī)范化。實現(xiàn)規(guī)范化。4 4SQLSQL的詞匯不多,完成中心功能只用了的詞匯不多,完成中心功能只用了9 9個英語動詞,它個英語動詞,它的語法構(gòu)造接近英語,因此容易學習和運用。的語法
9、構(gòu)造接近英語,因此容易學習和運用。3.2 SQL的數(shù)據(jù)定義 v3.2.1 SQL方式的創(chuàng)建和撤銷 v3.2.2 根本數(shù)據(jù)類型 v3.2.3 根本表的創(chuàng)建、修正和撤銷 v3.2.4 索引的創(chuàng)建和撤銷 前往SQL方式的創(chuàng)建和撤銷 vSQL方式的創(chuàng)建可用CREATE SCHEMA語句定義,其根本句法如下:v CREATE SCHEMA方式名AUTHORIZATION用戶名 vDROP語句的句法如下:vD R O P S C H E M A 方 式 名 CASCADERESTRICTv其方式有兩種:vCASCADE (級聯(lián)式)方式。vRESTRICT (約束式)方式。 根本數(shù)據(jù)類型 vSQL提供的主要
10、數(shù)據(jù)類型(也稱為“域類型)有:v1數(shù)值型 INTEGER,SMALLINT,REAL,vD O U B L E P R E C I S I O N , F L O AT ( n ) ,NUMERIC(p,d)v2字符串型 CHAR (n),VARCHAR (n)v3位串型 BIT (n), BIT VARYING (n)v4時間型 DATE,TIME前往根本表的創(chuàng)建、修正和撤銷 (1)v 根本表的創(chuàng)建 v例3.1v根本表 TT#,TNAME,TITLE可用以下語句創(chuàng)建:vCREATE TABLE Tv( T# CHAR(4) NOT NULL,v TNAME CHAR(8) NOT NULL,
11、v TITLECHAR(10),v PRIMARYKEY(T#);vCREATE TABLE CCREATE TABLE Cv(C#(C#CHAR(4),CHAR(4),v CNAME CNAMECHAR(10) NOT NULL,CHAR(10) NOT NULL,v T# T#CHAR(4),CHAR(4),v PRIMARY PRIMARY KEY(C#),KEY(C#),v FOREIGNKEY (T#) REFERENCES T(T#) FOREIGNKEY (T#) REFERENCES T(T#);v CREATE TABLE SCREATE TABLE Sv(S#(S#CHAR
12、(4) NOT NULL,CHAR(4) NOT NULL,v SNAME SNAME CHAR(8) NOT NULL,CHAR(8) NOT NULL,v AGE AGESMALLINT,SMALLINT,v SEX SEX CHAR(1),CHAR(1),v PRIMARY PRIMARY KEY(S#);KEY(S#);根本表的創(chuàng)建、修正和撤銷 (2)CREATE TABLE SCCREATE TABLE SC(S# (S# CHAR(4),CHAR(4), C# C# CHAR(4),CHAR(4), SCORE SCORE SMALLINT,SMALLINT, PRIMARY PR
13、IMARYKEY(S#,C#),KEY(S#,C#), FOREIGN KEY(S#) REFERENCES S(S#), FOREIGN KEY(S#) REFERENCES S(S#), FOREIGN KEY(C#) REFERENCES C(C#) FOREIGN KEY(C#) REFERENCES C(C#) )根本表的創(chuàng)建、修正和撤銷(3)v根本表構(gòu)造的修正v添加新的列用“ALTER ADD 語句,其句法如下:vALTER TABLE ADD v刪除原有的列用“ALTER DROP 語句,句法如下:v ALTER TABLE DROP CASCADERESTRICTv 此處CAS
14、CADE方式表示:在根本表中刪除某列時,一切援用到該列的視圖和約束也要一同自動地被刪除。而RESTRICT方式表示在沒有視圖或約束援用該屬性時,才干在根本表中刪除該列,否那么回絕刪除操作。 根本表的創(chuàng)建、修正和撤銷(3)v例3.2 在根本表S中添加一個地址ADDRESS列,可用以下語句:v ALTER TABLE S ADD ADDRESS VARCHAR30;v 應留意,新添加的列不能定義為“NOT NULL。根本表在添加一 列后,原有元組在新添加的列上的值都被定義為空值NULL。 v例3.3 在根本表S中刪除年齡AGE列,并且把援用該列的一切視圖和約束也一同刪除,可用以下語句:v ALTE
15、R TABLE S DROP AGE CASCADE; v例3.4 在根本表S中S# 的長度修正為6,可用以下語句:v ALTER TABLE S MODIFY S# CHAR6; 根本表的創(chuàng)建、修正和撤銷(4)v根本表的撤銷v撤銷語句的句法如下:v DROP TABLE CASCADERESTRICTv 此處的CASCADE、RESTRICT的語義同前面句法中的語義一樣。 前往3.3 SQL的數(shù)據(jù)查詢 v3.3.1 SELECT查詢語句的根本構(gòu)造v3.3.2 SELECT語句完好的構(gòu)造 v3.3.3 數(shù)據(jù)查詢中的限制和規(guī)定v3.3.4 條件表達式中的比較操作v3.3.5 嵌套查詢的改良寫法v
16、3.3.6 根本表的聯(lián)接操作 v3.3.7 SQL3中的遞歸查詢 不要求前往 SELECT查詢語句 (1)vSELECTFROMWHERE句型v在關(guān)系代數(shù)中最常用的式子是以下表達式:v A1,An(F(R1Rm)v 這里R1、Rm為關(guān)系,F(xiàn)是公式,A1、An為屬性。v針對上述表達式,SQL為此設(shè)計了SELECTFROMWHERE句型:vSELECT A1,AnvFROM R1,RmvWHERE Fv 這個句型是從關(guān)系代數(shù)表達式演化來的,但WHERE子句中的條件表達式F要比關(guān)系代數(shù)中公式更靈敏。在在WHEREWHERE子句的條件表達式子句的條件表達式F F中可運用以下運算符:中可運用以下運算符:
17、算術(shù)比較運算符:,算術(shù)比較運算符:,或!?;?!。邏輯運算符:邏輯運算符:ANDAND,OROR,NOTNOT。集合成員資歷運算符:集合成員資歷運算符:ININ,NOT INNOT IN。謂詞:謂詞:EXISTSEXISTS,ALLALL,SOMESOME,UNIQUEUNIQUE。聚合函數(shù):聚合函數(shù):AVGAVG,MINMIN,MAXMAX,SUMSUM,COUNTCOUNT。F F中運算對象還可以是另一個中運算對象還可以是另一個SELECTSELECT語句,即語句,即SELECTSELECT語句可以嵌套。語句可以嵌套。另外,另外,SELECTSELECT語句的查詢結(jié)果之間還可以進展集合語句的
18、查詢結(jié)果之間還可以進展集合的 并 、 交 、 差 操 作 , 其 運 算 符 是 :的 并 、 交 、 差 操 作 , 其 運 算 符 是 : U N I O NU N I O N ,INTERSECTINTERSECT,EXCEPTEXCEPT。SELECTSELECT語句能表達一切的關(guān)系代數(shù)表達式。語句能表達一切的關(guān)系代數(shù)表達式。SELECT查詢語句 (2)vSELECT句型運用實例v例3.8 教學數(shù)據(jù)中有三個根本表關(guān)系:vTT#,TNAME,TITLEvCC#,CNAME,T#vSS#,SNAME,AGE,SEXvSCS#,C#,SCOREv 下面用SELECT查詢語句表達每個查詢。v用
19、戶有一個查詢語句: 檢索學習課程號為C2課程的學生學號與姓名。v這個查詢要從根本表S和SC中檢索數(shù)據(jù),因此可以有下面三種寫法。SELECT查詢語句v第一種寫法銜接查詢:第一種寫法銜接查詢:vSELECT S.S#, SNAMESELECT S.S#, SNAMEvFROM S,SCFROM S,SCvWHERE S.S#=SC.S# AND C#=C2WHERE S.S#=SC.S# AND C#=C2;v第二種寫法嵌套查詢:第二種寫法嵌套查詢:vSELECT S#,SNAMESELECT S#,SNAMEvFROM SFROM SvWHERE S# IN (SELECT S#WHERE S#
20、 IN (SELECT S#v FROM SC FROM SCv WHERE C#= C2 WHERE C#= C2) );不相關(guān)子查詢不相關(guān)子查詢SELECT查詢語句v第二種寫法嵌套查詢不要求:第二種寫法嵌套查詢不要求:vSELECT S#SELECT S#,SNAME FROM S SNAME FROM S vWHERE C2 INWHERE C2 INSELECT C#SELECT C#v FROM SC FROM SCv WHERE S# WHERE S#S.S# )S.S# );v第三種寫法運用存在量詞的嵌套查詢,略第三種寫法運用存在量詞的嵌套查詢,略相關(guān)子查詢相關(guān)子查詢 例3.9
21、對于教學數(shù)據(jù)庫中四個根本表T、C、S、SC,下面用SELECT語句表達第2章中例2.6的各個查詢語句。 檢索學習課程號為C2的學生學號與成果。SELECT S#,SCOREFROM SCWHERE C#=C2; 該語句已在例3.8中引見過。 檢索至少選修檢索至少選修LIULIU教師所授課程中一門課程的學教師所授課程中一門課程的學生學號與姓名。生學號與姓名。SELECT S.S#,SNAMESELECT S.S#,SNAMEFROM S,SC,C,TFROM S,SC,C,TWHERE S.S#=SC.S# AND SC.C#=C.C# WHERE S.S#=SC.S# AND SC.C#=C.
22、C# AND C.T# =T.T# AND TNAME =LIU AND C.T# =T.T# AND TNAME =LIU; ;與一樣,本例也由多種寫法,與一樣,本例也由多種寫法, 例如,嵌套查詢寫法。例如,嵌套查詢寫法。 檢索選修課程號為C2或C4的學生學號。SELECT S# FROM SC WHERE C# = C2 OR C# = C4 檢索至少選修課程號為C2和C4的學生學號。SELECT X.S#FROM SC AS X, SC AS YWHERE X.S# = Y.S# AND X.C# = C2 AND Y.C# = C4檢索不學C2課程的學生姓名與年齡SELECT SNAM
23、E ,AGE FROM SWHERE S# NOT IN (SELECT S# FROM SCWHERE C# = C2)、 不作要求SELECT查詢語句 (4) v聚合函數(shù) vCOUNT* 計算元組的個數(shù)vCOUNT列名 對一列中的值計算個數(shù)vSUM列名 求某一列值的總和此列的值必需是數(shù)值型vAVG列名 求某一列值的平均值此列的值必需是數(shù)值型vMAX列名 求某一列值的最大值vMIN列名 求某一列值的最小值前往聚合函數(shù)舉例v求男學生的總?cè)藬?shù)和平均年齡vSELECT COUNT(*),AVG(AGE)vFROM S WHERE SEX=Mv統(tǒng)計選修了課程的學生人數(shù)vSELECT COUNT (D
24、ISTINCT S#)vFROM SCSELECT語句完好的句法 (1)vSELECT語句完好的句法如下:v SELECT 目的表的列名或列表達式序列v FROM 根本表名和或視圖序列v WHERE 行條件表達式 v GROUP BY 列名序列v HAVING 組條件表達式 v ORDER BY 列名 ASC|DESC , SELECT語句完好的句法(2)v整個語句的執(zhí)行過程如下:v1讀取FROM子句中根本表、視圖的數(shù)據(jù),執(zhí)行笛卡爾積操作。v2選取滿足WHERE子句中給出的條件表達式的元組。v3按GROUP子句中指定列的值分組,同時提取滿足HAVING子句中組條件表達式的那些組。v4按SELE
25、CT子句中給出的列名或列表達式求值輸出。v5ORDER子句對輸出的目的表進展排序,按附加闡明ASC升序陳列,或按DESC降序陳列。SELECT語句完好的句法 (3)v例例3.12 3.12 對教學數(shù)據(jù)庫的根本表對教學數(shù)據(jù)庫的根本表T T、C C、S S、SCSC中數(shù)據(jù)進展查詢和計算。中數(shù)據(jù)進展查詢和計算。v 統(tǒng)計每門課程的學生選修人數(shù),要求統(tǒng)計每門課程的學生選修人數(shù),要求顯示課程號、課程名和學生人數(shù)。顯示課程號、課程名和學生人數(shù)。vSELECT C.C#,CNAME,COUNT(S#)SELECT C.C#,CNAME,COUNT(S#)vFROM C,SCFROM C,SCvWHERE C.
26、C#=SC.C#WHERE C.C#=SC.C#vGROUP BY C.C#,CNAMEGROUP BY C.C#,CNAMESELECT語句完好的句法 (4) 求每一教師每門課程的學生選修人數(shù)超越求每一教師每門課程的學生選修人數(shù)超越5050人,要求顯示教師工號、人,要求顯示教師工號、課程號和學生人數(shù)。顯示時,查詢結(jié)果按人數(shù)升序陳列,人數(shù)一樣按工課程號和學生人數(shù)。顯示時,查詢結(jié)果按人數(shù)升序陳列,人數(shù)一樣按工號升序、課程號降序陳列。號升序、課程號降序陳列。SELECT T#,C.C#,COUNT (S#)SELECT T#,C.C#,COUNT (S#)FROM C,SCFROM C,SCWHE
27、RE C.C#=SC.C#WHERE C.C#=SC.C#GROUP BY T#,C.C#GROUP BY T#,C.C# HAVING COUNT( HAVING COUNT(* *) 50) 50ORDER BY 3,T#,C.C# DESCORDER BY 3,T#,C.C# DESC前往SELECT語句中的限定v 1.SELECT子句中的規(guī)定v SELECT子句描畫查詢輸出的表格構(gòu)造,即輸出值的列名或表達式。其方式如下:vSELECT ALL|DISTINCT | *例3.13v在根本表SC中檢索男同窗選修的課程號vSELECT DISTINCT C#vFROM S,SCvWHERE
28、S.S#=SC.S# AND SEX=Mv檢索每個學生的出生年份vSELECT S#,SNAME,2019-AGE vFROM SSELECT語句中的限定v2 2列和根本表的改名操作列和根本表的改名操作v例例3.14 3.14 在根本表在根本表S S中檢索每個學生的出中檢索每個學生的出生年份,輸出的列名為生年份,輸出的列名為STUDENT_NAMESTUDENT_NAME和和BIRTH_YEARBIRTH_YEAR。vSELECT SNAME AS STUDENT_NAME,SELECT SNAME AS STUDENT_NAME,v 2019-AGE AS BIRTH_YEAR 2019-A
29、GE AS BIRTH_YEARvFROM SFROM S;3.3.集合的并、交、差操作集合的并、交、差操作當兩個子查詢結(jié)果的構(gòu)造完全一當兩個子查詢結(jié)果的構(gòu)造完全一致時,可以讓這兩個子查詢執(zhí)行并、致時,可以讓這兩個子查詢執(zhí)行并、交、差操作。并、交、差的運算符交、差操作。并、交、差的運算符為為UNIONUNION、INTERSECTINTERSECT和和EXCEPTEXCEPT。 注:注:SQL SERVER 2000SQL SERVER 2000中只支持中只支持UNION UNION ,INTERSECTINTERSECT和和EXCEPTEXCEPT只作為只作為函數(shù),不能用于子查詢函數(shù),不能用
30、于子查詢條件表達式中的算術(shù)比較操作 條件表達式中可出現(xiàn)算術(shù)比較運算符,!,也可以用“BETWEEN AND 比較運算符限定一個值的范圍。注:SQL SERVER中普通運用替代!=后者非SQL-92規(guī)范,見聯(lián)機協(xié)助“運算符例3.13v在S中檢索1820歲的學生姓名vSELECT SNAME vFROM SvWHERE AGE=18 AND AGE=20v等價于vSELECT SNAME vFROM SvWHERE AGE BETWEEN 18 AND 20v不在某個范圍內(nèi)可運用“NOT BETWEEN . AND .比較運算符字符串的匹配操作條件表達式中字符串匹配操作符是“LIKE。在表達式中可
31、運用兩個通配符:百分號%:與零個或多個字符組成的字符串匹配。下劃線_:與單個字符匹配。例3.16 在S中檢索以字符D打頭的學生姓名。SELECT SNAMEFROM SWHERE SNAME LIKE D%;空值的比較操作SQL中允許列值為空,空值用保管字NULL表示。例3.17 在根本表S中檢索年齡為空值的學生姓名SELECT SNAME FROM SWHERE AGE IS NULL聚合函數(shù)中遇到空值時,除了COUNT(*)外都跳過空值而去處置非空值集合的比較操作SQL提供SELECT語句的嵌套子查詢機制。子查詢是嵌套在另一個查詢中的SELECT語句。 1集合成員資歷的比較元組 IN集合元
32、組 NOT IN 集合例3.18 在S和SC中檢索至少不學C2和C4兩門課程的學生學號SELECT S# FROM SWHERE S# NOT IN (SELECT S# FROM SCWHERE C# IN (C2,C4)集合成員的算術(shù)比較v元組 SOME集合v表示元組與右邊集合中至少一個元素滿足運算v元組 ALL 集合v表示元組與右邊集合中每一個元素滿足運算v要求元組與集合中的元素構(gòu)造一致v這里應該留意,元組比較操作與字符串比較類似。例如a1,a2b1,b2,其意義與v a1b1ORa1b1ANDa2b2v等價。例3.19(1)檢索學C2課程的學號與姓名SELECT S#,SNAME FR
33、OM SWHERE S# = SOME(SELECT S# FROM SC WHERE C#=C2)IN與=SOME等價,但是NOT IN 不等價于 SOME例3.19(2)檢索至少有一門成果超越學生S4一門成果的學生學號SELECT DISTINCT S#FROM SCWHERE GRADE SOME (SELECT GRADE FROM SC WHERE S#=S4)例3.19(3)檢索不學C2課程的學生姓名與年齡SELECT SNAME,AGEFROM SWHERE S# ALL (SELECT S# FROM SC WHERE C#=C2)NOT IN 等價于 ALL例3.18(4)v
34、檢索平均成果最高的學生學號vSELECT S# vFROM SCvGROUP BY S#vHAVING AVG(GRADE) = ALL (SELECT AVG (GRADE)vFROM SCvGROUP BY S#)v不能對聚合函數(shù)進展復合運算TRANSACT- SQL語法補充vTOP關(guān)鍵字,限制結(jié)果集前往的行數(shù)v在查詢結(jié)果集中參與常量v函數(shù)TOP關(guān)鍵字限制結(jié)果集前往的行數(shù),語法格式 如下: select TOP n PERCENT 列名列表 from 表名 where 選擇條件 闡明:n為一正整數(shù),表示前往查詢結(jié)果的前n行,假設(shè)有PERCENT關(guān)鍵字,那么前往前n%行。 例1:select
35、 top 3 * from S order by sname 例2:select top 40 percent * from sc在查詢結(jié)果集中參與常量當字符列串聯(lián)起來時,為了保證正確的格式和可讀性,需當字符列串聯(lián)起來時,為了保證正確的格式和可讀性,需求在其中包含字符串常量。求在其中包含字符串常量。 例例: select C# + : select C# + _ _ + Cname + Cname AS AS 課程信息課程信息 from Cfrom C函數(shù)v數(shù)學函數(shù)數(shù)學函數(shù), ,可在數(shù)字型表達式上執(zhí)行數(shù)學運算,實現(xiàn)三可在數(shù)字型表達式上執(zhí)行數(shù)學運算,實現(xiàn)三角運算,指數(shù)運算,對數(shù)運算等數(shù)學運算角運
36、算,指數(shù)運算,對數(shù)運算等數(shù)學運算v統(tǒng)計函數(shù)聚合函數(shù)統(tǒng)計函數(shù)聚合函數(shù)v字符串函數(shù)字符串函數(shù), ,用來對字符串輸入值執(zhí)行操作,前往字符用來對字符串輸入值執(zhí)行操作,前往字符串或數(shù)字值??稍诖驍?shù)字值??稍赟ELECTSELECT語句的語句的SELECTSELECT和和WHEREWHERE子句以子句以及表達式中運用字符串函數(shù)及表達式中運用字符串函數(shù)v日期函數(shù)日期函數(shù), ,用來對日期和時間輸入值執(zhí)行操作,并前往用來對日期和時間輸入值執(zhí)行操作,并前往一個字符串,數(shù)字值或日期和時間值一個字符串,數(shù)字值或日期和時間值v系統(tǒng)函數(shù)系統(tǒng)函數(shù), ,用于對用于對SQL ServerSQL Server效力器和數(shù)據(jù)庫對象
37、進展效力器和數(shù)據(jù)庫對象進展操作操作, ,并可前往效力器配置和數(shù)據(jù)庫對象等信息并可前往效力器配置和數(shù)據(jù)庫對象等信息v用戶自定義函數(shù)用戶自定義函數(shù), ,作為一個數(shù)據(jù)庫對象來管理的,可以作為一個數(shù)據(jù)庫對象來管理的,可以運用企業(yè)管理器或運用企業(yè)管理器或T_SQLT_SQL命令來創(chuàng)建,修正和刪除命令來創(chuàng)建,修正和刪除3.3.6 根本表的聯(lián)接操作 可以根據(jù)各個表之間的邏輯關(guān)系從兩個或多個表中檢索數(shù)據(jù)。聯(lián)接表示如何運用一個表中的數(shù)據(jù)來選擇另一個表中的行。聯(lián)接條件可在 FROM 或 WHERE 子句中指定,建議在 FROM 子句中指定聯(lián)接條件。注:以下均為Transact-SQL語法聯(lián)接類型SELECT 列名
38、列表FROM 左表 右表ON 聯(lián)接條件WHERE 選擇條件SELECT 列名列表FROM 左表 CORSS JOIN 右表WHERE 選擇條件聯(lián)接類型v內(nèi)聯(lián)接:INNER JOIN僅顯示兩個聯(lián)接表中的匹配行的聯(lián)接,包括等值聯(lián)接和自然聯(lián)接。 v外聯(lián)接:包括在聯(lián)接表中沒有相關(guān)的行的聯(lián)接,可分為以下3種。vLEFT OUTER JOIN:包括 左表中的一切行,不包括右表中的不匹配行。假設(shè)左表中的某行在右表中沒有匹配行,那么在相關(guān)聯(lián)的結(jié)果 集行中右表的一切選擇列表列均為空值。vRIGHT OUTER JOIN:包括 右表中的一切行,不包括左表中的不匹配行 。假設(shè)右表中的某行在左表中沒有匹配行,那么將為
39、左表前往空值。vFULL OUTER JOIN:包括聯(lián)接表中的一切行,不論它們能否匹配。v交叉聯(lián)接:CROSS JOIN在這類聯(lián)接的結(jié)果集內(nèi),兩個表中每兩個能夠成對行占一行,也稱作笛卡爾積。INNER JOIN例例例1:等值銜接:等值銜接 select * from s inner join sc on s.s# = sc.s# 等價于等價于select * from s , sc where s.s# = sc.s# 例例2: 自然銜接自然銜接 select s.*,c#,Grade from s inner join sc on s.s# = sc.s#例例3: 多表銜接多表銜接SELEC
40、T *FROM (SC INNER JOIN S ON S.S#=SC.S#) INNER JOIN C ON SC.C#=C.C#外聯(lián)接例例例1: select s.1: select s.* *, sc.s#,score, sc.s#,score from s left outer join sc from s left outer join sc on s.s# = sc.s#on s.s# = sc.s#例例2: select sc.s#,score, c.2: select sc.s#,score, c.* * from sc right outer join c from sc r
41、ight outer join c on sc.c# = c.c#on sc.c# = c.c#例例3: select s.3: select s.* *, sc.s#, sc.s# from s full outer join sc from s full outer join sc on s.s# = sc.s#on s.s# = sc.s#CROSS JOIN例例例1:1:SELECT SELECT * *FROM S CROSS JOIN SCFROM S CROSS JOIN SCWHERE SEX=WHERE SEX=F F例例2: 2: SELECT SELECT * *FROM
42、 S CROSS JOIN SCFROM S CROSS JOIN SCWHERE S.S#=SC.S#WHERE S.S#=SC.S#3.4 數(shù)據(jù)更新 v3.4.1 數(shù)據(jù)插入 v3.4.2 數(shù)據(jù)刪除 v3.4.3 數(shù)據(jù)修正 前往數(shù)據(jù)插入 1單元組的插入 INSERT INTO 根本表名 列名表 VALUES元組值2多元組的插入 (SQL SERVER 不支持) INSERT INTO 根本表名 列名表 VALUES 元組值,元組值,元組值3查詢結(jié)果的插入 INSERT INTO 根本表名 (列名表)SELECT查詢語句 這個語句可把一個SELECT語句的查詢結(jié)果插到某個根本表中。4表的插入(
43、SQL SERVER 不支持) INSERT INTO 根本表名1 列名表TABLE 根本表名2 這個語句可把根本表2的值插入到根本表1中。SQL SERVER的INSERT語法v運用運用INSERTValuesINSERTValues插入行插入行v運用運用SELECTINTOSELECTINTO插入行插入行v運用運用INSERTSELECTINSERTSELECT插入行插入行運用運用INSERTValuesINSERTValues插入行插入行v例例3.25 3.25 往根本表往根本表SCSC中插入元組的假設(shè)干例中插入元組的假設(shè)干例子。子。vINSERT INTO SINSERT INTO S
44、S#S#,SNAMESNAME,AGEAGE,SEXSEXvVALUESVALUESS36S36,GUGU,2020,MM;v INSERT INTO SCINSERT INTO SCS#S#,C#C#vVALUESVALUESS5S5,C8C8;v此處成果為空值此處成果為空值v 中的語法中的語法SQL SERVERSQL SERVER不支持不支持運用運用SELECTINTOSELECTINTO插入行插入行SELECTINTOSELECTINTO語句創(chuàng)建一個新表,并用語句創(chuàng)建一個新表,并用SELECTSELECT的結(jié)果集填充該表。新表的構(gòu)造由選擇列表中表達的結(jié)果集填充該表。新表的構(gòu)造由選擇列表
45、中表達式的特性定義。式的特性定義。例:把例:把SCSC表不及格的記錄以及學生姓名存入一張新表表不及格的記錄以及學生姓名存入一張新表SC2SC2 SELECT SNAME,SC. SELECT SNAME,SC.* * INTO SC2 INTO SC2 FROM S INNER JOIN SC ON S.S#=SC.S# FROM S INNER JOIN SC ON S.S#=SC.S# WHERE Grade60 WHERE Grade80HAVING AVG(GRADE)80數(shù)據(jù)刪除 SQL的刪除操作是指從根本表中刪除元組,其句法如下:DELETE FROM 根本表名WHERE 條件表達
46、式其語義是從根本表中刪除滿足條件表達式的元組。刪除語句實踐上是“SELECT * FROM根本表名WHERE條件表達式和DELETE操作的結(jié)合,每找到一個元組,就把它刪去。應該留意,DELETE語句只能從一個根本表中刪除元組。WHERE子句中條件可以嵌套,也可以是來自幾個根本表的復合條件。不帶WHERE的DELETE語句將清空整張表,慎用DELETE語句只從表中刪除行記錄,要從數(shù)據(jù)庫中刪除表,必需運用DROP TABLE語句。例3.26把課程名為MATHS的成果從SC中刪除DELETE FROM SCWHERE C# IN(SELECT C# FROM C WHERE CNAME=MATHS)
47、 把C4課程中小于該課程平均成果的成果元組從SC中刪除DELETE FROM SCWHERE C# = C4AND GRADE (SELECT AVG(GRADE) FROM SC WHERE C = C4)數(shù)據(jù)修正 需求修正根本表中元組的某些列值時,可以用UPDATE語句實現(xiàn),其簡單的Transact-SQL句法如下: UPDATE 根本表名SET 列名=值表達式,列名=值表達式 WHERE 條件表達式 其語義是:修正根本表中滿足條件表達式的那些元組中的列值,需修正的列值在SET子句中指出。例3.27把C5課程的課程名改為DBUPDATE C SET CNAMEDBWHERE C#C5把女同
48、窗成果提高10UPDATE SCSET GRADE = GRADE * 1.1WHERE S# IN (SELECT S#FROM SWHERE SEX=F)例3.27當C4課的成果低于該門課程的平均成果時,提高5UPDATE SCSET GRADE = GRADE *1.05WHERE C#=C4 AND GRADE (SELECT AVG(GRADE)FROM SCWHERE C#=C4)用法T-SQL不支持帶CASE的UPDATE語句select * into s2 from sselect * from s2update s2 set sname=case when sex=f then f_+snamewhen sex=m then m_+snameendselect * from s23.5 視圖的定義和對視圖的操作 v3.5.1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分包買賣合同標準文本
- 供貨增項合同標準文本
- 冷藏勞務(wù)合同范例
- 單次活動合同標準文本
- 倉庫收購合同標準文本
- 機場防火安全教育
- 單位節(jié)能改造合同范例
- 借證件合同范例
- 云倉收購合同范例
- 冷凍物流運輸合同標準文本
- 發(fā)電廠檢修文件包-作業(yè)指導書-鍋爐長桿吹灰器
- 班級共讀《一年級大個子二年級小個子 》班級讀書會(課堂PPT)
- 電力安全工作規(guī)程(營銷部分)題庫(附答案)
- 廣聯(lián)達鋼筋輸入規(guī)則
- 啟閉機房腳手架工程施工專項方案
- 防毒面具使用說明
- 浦東改革開放30周年(課堂PPT)
- 基于ADAMS的懸置剛度仿真指南
- 放線測量復核記錄(自動計算表)
- 電梯配件價格表
- AQL抽樣檢驗標準
評論
0/150
提交評論