第10章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL_第1頁
第10章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL_第2頁
第10章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL_第3頁
第10章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL_第4頁
第10章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第10章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL教學(xué)目標(biāo)掌握SQL修改表結(jié)構(gòu)的規(guī)則與方法

;掌握SQL修改數(shù)據(jù)的規(guī)則與方法

;掌握SQL數(shù)據(jù)查詢功能的語句規(guī)則和特點(diǎn)。重點(diǎn)與難點(diǎn):表定義中數(shù)據(jù)完整性規(guī)則的設(shè)定、多表連接查詢的方法與使用規(guī)則、在分組查詢中使用函數(shù)的規(guī)則和方法、使用嵌套子查詢的方法和規(guī)則、綜合應(yīng)用SQL數(shù)據(jù)查詢功能完成實(shí)際問題的能力。

10.1

SQL概述

SQL是StructuredQueryLanguage的縮寫,即結(jié)構(gòu)化查詢語言,是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。主要特點(diǎn):⑴SQL是一種功能齊全的一體化語言。⑵SQL是一種高度非過程化的語言。⑶SQL語言簡潔,易學(xué)易用。⑷語言共享。SQL語言可以分成以下幾組:數(shù)據(jù)定義語言DDL(DataDefinitionLanguage):包括定義、修改與刪除基本表及建立與刪除索引等。數(shù)據(jù)操縱語言DML(DataManipulationLanguage):包括插入、修改與刪除數(shù)據(jù)等。數(shù)據(jù)查詢語言DQL(DataQueryLanguage):包括單表查詢、連接查詢、嵌套查詢等各種查詢功能。數(shù)據(jù)控制語言DCL(DataControlLanguage):包括數(shù)據(jù)的安全性控制、數(shù)據(jù)的完整性控制、數(shù)據(jù)庫的恢復(fù)及并發(fā)控制等功能。Access支持?jǐn)?shù)據(jù)定義、數(shù)據(jù)查詢和數(shù)據(jù)操作功能。

SQL功能命令動(dòng)詞數(shù)據(jù)定義

CREAT、ALTER、DROP數(shù)據(jù)操作

INSERT、DELETE、UPDATE數(shù)據(jù)查詢

SELECT

10.2數(shù)據(jù)定義一.創(chuàng)建表格式:

CREATETABLE<表名>(<字段名1><類型名>[(長度)][PRIMARYKEY][NOTNULL][,<字段名2><類型名>[(長度)][NOTNULL]]…)功能:創(chuàng)建一個(gè)數(shù)據(jù)表的結(jié)構(gòu)。說明:

<表名>:要?jiǎng)?chuàng)建的數(shù)據(jù)表的名字。

<字段名><類型名>:要?jiǎng)?chuàng)建的數(shù)據(jù)表的字段名和字段類型。字段長度僅限于文本及二進(jìn)制字段。

PRIMARYKEY:表示將該字段定義為主鍵。

NOTNULL:不允許字段值為空,而NULL允許字段值為空。例10.1

在職工管理數(shù)據(jù)庫中建立一個(gè)數(shù)據(jù)表“職工”,表結(jié)構(gòu)由職工號(hào)、姓名、性別、職稱、部門、出生日期、婚否等字段組成。并設(shè)置“職工號(hào)”為主鍵。

操作步驟如下:①創(chuàng)建“職工管理”數(shù)據(jù)庫。②在“職工管理”數(shù)據(jù)庫窗口中選擇“查詢”對(duì)象。③雙擊“在設(shè)計(jì)視圖中創(chuàng)建查詢”,關(guān)閉彈出的“顯示表”對(duì)話框,打開查詢?cè)O(shè)計(jì)視圖窗口。④選擇“查詢”菜單中“SQL特定查詢”下的“數(shù)據(jù)定義”命令項(xiàng),打開“數(shù)據(jù)定義查詢”窗口。⑤在“數(shù)據(jù)定義查詢”窗口中輸入SQL語句,每個(gè)數(shù)據(jù)定義查詢只能包含一條數(shù)據(jù)定義語句。

CREATEDATABASE

職工管理

CREATETABLE

職工(職工號(hào)TEXT(5)

PRIMARYKEY,姓名

TEXT(4),性別TEXT(1),職稱TEXT(4),部門TEXT(8),出生日期DATE,婚否LOGICAL)⑥保存查詢?yōu)椤皵?shù)據(jù)表定義查詢(職工)”,查詢建立完畢。⑦運(yùn)行查詢。在設(shè)計(jì)視圖中,單擊工具欄上的“運(yùn)行”按鈕,執(zhí)行SQL語句,完成創(chuàng)建表的操作。⑧在數(shù)據(jù)庫窗口中單擊“表”對(duì)象,可以看到在“表”列表框中多了一個(gè)“職工”表,這就是用SQL的定義查詢創(chuàng)建的表。例10.2在職工管理數(shù)據(jù)庫中建立一個(gè)數(shù)據(jù)表“工資”,并通過“職工號(hào)”字段建立與“職工”表的關(guān)系。

CREATETABLE

工資(職工號(hào)TEXT(5)PRIMARYKEY

REFERENCES

職工,

工資Single,津貼Single,所得稅Single,公積金Single,

水電費(fèi)Single,應(yīng)扣Single,實(shí)發(fā)Single)

其中的“REFERENCES

職工”表示與“職工”表建立關(guān)系。格式:DROPTABLE

<表名>功能:刪除指定的數(shù)據(jù)表文件說明:一定要慎用DROPTABLE語句,一旦使用以后就無法恢復(fù)表或其中的數(shù)據(jù),此表上建立的索引也將自動(dòng)刪除,并且無法恢復(fù)。二.刪除表例10.3

刪除例10.2建立的工資表操作步驟如下:①打開“數(shù)據(jù)定義查詢”窗口。②輸入刪除表的SQL語句:

DROPTABLE

工資③單擊工具欄上的“運(yùn)行”按鈕,完成刪除表的操作,“工資”表將從“職工管理”數(shù)據(jù)庫窗口消失。三、修改表的結(jié)構(gòu)格式一:

ALTERTABLE<表名>[ADD<新字段名1><類型名>[(長度)][,<新字段名2><類型名>[(長度)]…]][DROP<字段名1>[,<字段名2>…][ALTER<字段名1><類型名>[(長度)][,<字段名2><類型名>[(長度)]…]]

功能:修改指定的數(shù)據(jù)表的結(jié)構(gòu)。說明:

<表名>:要修改的數(shù)據(jù)表的名字。

ADD子句用于增加新的字段。

DROP子句用于刪除指定的字段。

ALTER子句用于修改原有字段的定義,包括字段名、數(shù)據(jù)類型和字段的長度。應(yīng)注意ADD子句、DROP子句和ALTER子句不能同時(shí)使用。例10.4

為職工表增加一個(gè)電話號(hào)碼字段操作步驟如下:①在“職工管理”數(shù)據(jù)庫窗口中選擇“查詢”對(duì)象。②雙擊“在設(shè)計(jì)視圖中創(chuàng)建查詢”,關(guān)閉彈出的“顯示表”對(duì)話框,打開查詢?cè)O(shè)計(jì)視圖窗口。③選擇“查詢”菜單中“SQL特定查詢”下的“數(shù)據(jù)定義”命令項(xiàng),打開“數(shù)據(jù)定義查詢”窗口。④在“數(shù)據(jù)定義查詢”窗口中,輸入修改表結(jié)構(gòu)的SQL語句:

ALTERTABLE

職工ADD

電話號(hào)碼Text(8)⑤單擊工具欄上的“運(yùn)行”按鈕,完成修改表結(jié)構(gòu)的操作。例10.5

將職工表的姓名字段的寬度由原來的6改為8,SQL語句如下:

ALTERTABLE

職工ALTER

姓名Text(8)例10.6

刪除職工表“電話號(hào)碼”字段,SQL語句如下:

ALTERTABLE

職工DROP

電話號(hào)碼

10.3數(shù)據(jù)操作一.插入記錄格式:

INSERTINTO

<表名>[(<字段名清單>)]VALUES

(<表達(dá)式清單>)功能:在指定的數(shù)據(jù)表的尾部添加一條新記錄。說明:

<表名>:要插入數(shù)據(jù)的表的名字。

<字段名清單>為數(shù)據(jù)表要插入新值的字段。

VALUES(表達(dá)式清單)為數(shù)據(jù)表要插入新值的各字段的數(shù)據(jù)值。

<字段名清單>和VALUES子句中(表達(dá)式清單)的個(gè)數(shù)和數(shù)據(jù)類型要完全一致。若省略<字段名清單>,則數(shù)據(jù)表中的所有字段必須在VALUES子句中都有相應(yīng)的值。例10.7

在職工表尾部添加一條新記錄。操作步驟如下:①在“職工管理”數(shù)據(jù)庫窗口中,打開“數(shù)據(jù)定義查詢”窗口。②輸入SQL語句:INSERTINTO

職工(職工號(hào),姓名,性別,職稱,部門,出生日期,婚否)VALUES("01001","陳周","男","教授","計(jì)算機(jī)",#1958-03-05#,yes)③單擊工具欄上的“運(yùn)行”按鈕,完成插入數(shù)據(jù)的操作。例10.8

在職工表尾部插入第二條記錄,SQL語句如下:INSERTINTO

職工VALUES("03021","劉楊","女","副教授","管理",#1962-06-18#,no)格式:UPDATE

<表名>

SET

<字段名1>=表達(dá)式1

[,<字段名2>=表達(dá)式2…][WHERE<條件>]

功能:根據(jù)WHERE子句指定的條件,對(duì)指定記錄的字段值進(jìn)行更新說明:

<表名>:要更新數(shù)據(jù)的表的名字。

<字段名>=<表達(dá)式>是指用<表達(dá)式>的值替代<字段名>的值,一次可更新多個(gè)字段的值。若省略WHERE子句,則更新全部記錄。一次只能在單一的表中更新記錄。二.更新數(shù)據(jù)例10.9

計(jì)算工資表中的應(yīng)扣和實(shí)發(fā)數(shù)。①在“職工管理”數(shù)據(jù)庫窗口中,打開“數(shù)據(jù)定義查詢”窗口②輸入SQL語句:

UPDATE

工資SET

應(yīng)扣=所得稅+公積金+水電費(fèi),實(shí)發(fā)=工資+補(bǔ)貼-應(yīng)扣③單擊工具欄上的“運(yùn)行”按鈕,完成更新數(shù)據(jù)的操作。格式:

DELETEFROM

<表名>[WHERE<條件>]

功能:根據(jù)WHERE子句指定的條件,刪除表中指定的記錄。說明:<表名>:要?jiǎng)h除數(shù)據(jù)的表的名字。若省略WHERE子句,則刪除表中全部記錄。DELETE語句刪除的只是表中的數(shù)據(jù),而不是表的結(jié)構(gòu)。三.刪除數(shù)據(jù)例10.10

將職工表中職工號(hào)為“03021”的記錄刪除。①在“職工管理”數(shù)據(jù)庫窗口中,打開“數(shù)據(jù)定義查詢”窗口。②輸入SQL語句:

DELETEFROM

職工

WHERE

職工號(hào)="03021"③單擊工具欄上的“運(yùn)行”按鈕,完成刪除數(shù)據(jù)的操作。

10.4數(shù)據(jù)查詢一.SELECT查詢命令格式:SELECT[ALL|DISTINCT|TOPn[PERCENT]]<字段名>|<字段表達(dá)式>|<函數(shù)>[,…]FROM<數(shù)據(jù)源表或查詢>[WHERE<篩選條件>][GROUPBY<分組字段表>[HAVING<過濾條件>][ORDERBY<排序關(guān)鍵字1>[ASC|DESC][,<排序關(guān)鍵字2>[ASC|DESC]…]]

功能:

從FROM子句列出的表或查詢中,選擇滿足WHERE子句中給出的條件的記錄,然后按GROUPBY子句(分組子句)中指定字段的值分組,再提取滿足HAVING

子句中過濾條件的那些組,按SELECT子句給出的字段名或字段表達(dá)式求值輸出。ORDERBY子句(排序子句)是對(duì)輸出的目標(biāo)表進(jìn)行重新排序,并可附加說明ASC(升序)或DESC(降序)排列。

說明:ALL:查詢的結(jié)果中包含數(shù)據(jù)源中的所有記錄。DISTINCT:查詢的結(jié)果中不包含數(shù)據(jù)源中重復(fù)行的記錄。<字段名表>:指定查詢結(jié)果輸出的字段,如果要包含數(shù)據(jù)源中的所有字段,可以使用通配符“*”。AS<列名稱>:如果在輸出時(shí)不希望使用原來的字段名,可以用列名稱重新設(shè)置。FROM<數(shù)據(jù)源表或查詢>:指出查詢的數(shù)據(jù)來源。WHERE<篩選條件>:說明查詢條件,即選擇記錄的條件。二.簡單查詢格式:SELECT[ALL|DISTINCT]<字段名1>[AS<列名稱>][,<字段名2>[AS<列名稱>]…]

FROM<數(shù)據(jù)源表或查詢>[WHERE<篩選條件>]1.基本查詢例10.11

查詢學(xué)生表的全部字段。操作步驟如下:①在“學(xué)生成績管理”數(shù)據(jù)庫窗口中選擇“查詢”對(duì)象。②雙擊“在設(shè)計(jì)視圖中創(chuàng)建查詢”,關(guān)閉彈出的“顯示表”對(duì)話框,打開查詢?cè)O(shè)計(jì)視圖窗口。③選擇“視圖”菜單的“SQL視圖”命令項(xiàng),打開“選擇查詢”窗口。④輸入SQL語句:

SELECT*FROM學(xué)生⑤保存查詢,查詢建立完畢。⑥運(yùn)行查詢。例10.12查詢學(xué)生表中所有學(xué)生的姓名和截至統(tǒng)計(jì)時(shí)的年齡,去掉重名。SQL語句如下:

SELECTDISTINCT

姓名,YEAR(DATE())-YEAR(出生日期)AS

年齡FROM

學(xué)生例10.13查詢學(xué)生表中所有已通過四級(jí)的男生記錄。SQL語句如下:

SELECT*FROM

學(xué)生WHERE

性別="男"AND

四級(jí)通過=yes2.帶特殊運(yùn)算符的條件查詢SELECT語句可以使用的特殊運(yùn)算符有:(1)BETWEEN…AND運(yùn)算符格式:<字段名>[NOT]BETWEEN<初值>AND<終值>BETWEEN運(yùn)算符用于檢測字段的值是否介于指定的范圍內(nèi)。(2)IN運(yùn)算符格式:<字段名>[NOT]IN(<表達(dá)式1>[,<表達(dá)式2>…])IN運(yùn)算符用于檢測字段的值是否屬于表達(dá)式集合或子查詢。(3)LIKE運(yùn)算符格式:<字段名>LIKE<字符表達(dá)式>LIKE運(yùn)算符用于檢測字段的值是否與樣式字符串匹配。例10.14:查詢學(xué)生表中入學(xué)成績?cè)?50~570之間的學(xué)號(hào)、姓名、入學(xué)成績。SQL語句如下:

SELECT

學(xué)號(hào),姓名,入學(xué)成績

FROM

學(xué)生

WHERE

入學(xué)成績BETWEEN550AND570上述語句的功能相當(dāng)于:

SELECT學(xué)號(hào),姓名,入學(xué)成績

FROM

學(xué)生

WHERE

入學(xué)成績>=550AND

入學(xué)成績<=570例10.15:查詢學(xué)生表中學(xué)號(hào)為070102和070401的記錄。SQL語句如下:SELECT*FROM

學(xué)生WHERE

學(xué)號(hào)IN("070102","070401")上述語句的功能相當(dāng)于:SELECT*FROM

學(xué)生WHERE

學(xué)號(hào)="070102"OR

學(xué)號(hào)="070401"例10.16:查詢學(xué)生表中姓“王”的學(xué)生的記錄。SQL語句如下:

SELECT*FROM學(xué)生

WHERE

姓名LIKE"王*"通配符“*”表示零個(gè)或多個(gè)字符“?”表示一個(gè)字符

3.計(jì)算查詢函數(shù)

功能COUNT(<字段名>)對(duì)指定字段的值計(jì)算個(gè)數(shù)COUNT(*)計(jì)算記錄個(gè)數(shù)SUM(<字段名>)計(jì)算指定的數(shù)值列的和AVG(<字段名>)計(jì)算指定的數(shù)值列的平均值MAX(<字段名>)計(jì)算指定的字符、日期或數(shù)值列中的最大值MIN(<字段名>)計(jì)算指定的字符、日期或數(shù)值列中的最小值說明:(字段名)可以是字段名,也可以是SQL表達(dá)式。上述聚合函數(shù)可以用在SELECT短語中對(duì)查詢結(jié)果進(jìn)行計(jì)算,也可以在HAVING子句中構(gòu)造分組篩選條件。例10.17:在學(xué)生表中統(tǒng)計(jì)學(xué)生人數(shù)。SQL語句如下:SELECTCOUNT(*)AS

學(xué)生人數(shù)

FROM

學(xué)生例10.18:查詢學(xué)生表中男生入學(xué)成績字段的平均值、最大值和最小值。SQL語句如下:SELECT“男”AS

性別,AVG(入學(xué)成績)AS

入學(xué)平均分

MAX(入學(xué)成績)AS

入學(xué)最高分,MIN(入學(xué)成績)AS

入學(xué)最低分

FROM

學(xué)生

WHERE

性別="男"4.分組與計(jì)算查詢格式:GROUPBY<分組關(guān)鍵字1>[,<分組關(guān)鍵字2>…][HAVING<篩選條件>]說明:①分組關(guān)鍵字是分組的依據(jù),可以是字段名,也可以是SQL函數(shù)表達(dá)式,還可以是字段序號(hào)(從1開始)。②HAVING是對(duì)分組進(jìn)行篩選的條件。HAVING只能與GROUPBY一起出現(xiàn),不能單獨(dú)使用。例10.19:分別統(tǒng)計(jì)男、女學(xué)生人數(shù)和入學(xué)成績的最高分和平均分。SELECT

性別,COUNT(性別)AS

人數(shù),MAX(入學(xué)成績)AS

入學(xué)最高分,AVG(入學(xué)成績)AS

入學(xué)平均分

FROM

學(xué)生GROUPBY

性別例10.20:在成績表中統(tǒng)計(jì)有6個(gè)以上學(xué)生選修的課程。SQL語句如下:SELECT

課程號(hào),COUNT(*)AS

選課人數(shù)

FROM

成績

GROUPBY

課程號(hào)HAVINGCOUNT(*)>=6例10.21:對(duì)1992年以后出生的學(xué)生分別按專業(yè)統(tǒng)計(jì)入學(xué)成績,并輸出入學(xué)平均成績?cè)?60分以上的組。SELECT

專業(yè),AVG(入學(xué)成績)AS

入學(xué)平均分

FROM

學(xué)生

WHERE

出生日期>=#1988-01-01#GROUPBY

專業(yè)HAVINGAVG(入學(xué)成績)>=560說明:

HAVING與WHERE的區(qū)別在于:WHERE是對(duì)表中所有記錄進(jìn)行篩選,HAVING是對(duì)分組結(jié)果進(jìn)行篩選。在分組查詢中如果既選用了WHERE,又選用了HAVING,執(zhí)行的順序是先用WHERE限定記錄,然后對(duì)篩選后的記錄按GROUPBY指定的分組關(guān)鍵字分組,最后用HAVING子句限定分組。5.排序格式:ORDERBY<排序關(guān)鍵字1>[ASC|DESC][,<排序關(guān)鍵字2>[ASC|DESC]…][TOP<數(shù)值表達(dá)式>[PERCENT]]說明:①ASC表示對(duì)查詢結(jié)果按指定字段升序排序。②DESC表示對(duì)查詢結(jié)果按指定字段降序排序;ASC|DESC缺省時(shí)默認(rèn)值是升序。③TOP必須與ORDERBY短語同時(shí)使用,表示從第一條記錄開始,顯示滿足條件的前N個(gè)記錄。選擇PERCENT短語時(shí),數(shù)值表達(dá)式表示百分比。

例10.22:在學(xué)生表中查詢?nèi)雽W(xué)成績?cè)谇?名的學(xué)生信息。SQL語句如下:

SELECTTOP3*

FROM學(xué)生

ORDERBY

入學(xué)成績DESC例10.23:顯示年齡最小的30%的學(xué)生的信息。SQL語句如下:

SELECTTOP20PERCENT*

FROM

學(xué)生

ORDERBY

出生日期DESC

SELECT命令支持多表之間的連接查詢,并提供了專門的JOIN子句。格式:SELECT<字段名表>

FROM<表名1>[INNER

JOIN<表名2>ON

<連接接條件>][WHERE<篩選條件>]其中:INNERJOIN用來連接左右兩個(gè)<表名>指定的表,ON用來指定連接條件。三.連接查詢例10.24:在職工管理數(shù)據(jù)庫中查詢高級(jí)職稱(教授或副教授)教師的姓名、基本工資、津貼和所得稅。SQL語句如下:

SELECT

姓名,工資,津貼,所得稅

FROM

職工INNERJOIN

工資ON職工.職工號(hào)=工資.職工號(hào)

WHERE

職稱

IN(“教授”,“副教授”)或者:

SELECT

姓名,工資,津貼,所得稅

FROM

職工,工資

WHERE

職工.職工號(hào)=工資.職工號(hào)AND職稱IN(“教授”,“副教授”)“職工號(hào)”是職工表和工資表的公共字段,“職工.職工號(hào)=工資.職工號(hào)”是連接條件。INNERJOIN

子句還可以嵌套,即在一個(gè)INNERJOIN

之中,可以嵌套多個(gè)INNERON

子句。例10.25:輸出所有學(xué)生每門課程的綜合成績單,要求給出學(xué)號(hào)、姓名、課程名和綜合成績信息。SQL語句如下:

SELECT

學(xué)生.學(xué)號(hào),姓名,平時(shí)*0.1+期中*0.2+期末*0.7AS

綜合成績

FROM

學(xué)生INNERJOIN(成績INNERJOIN

課程

ON

成績.課程號(hào)=課程.課程號(hào))ON

學(xué)生.學(xué)號(hào)=成績.學(xué)號(hào)或者:

SELECT學(xué)生.學(xué)號(hào),姓名,課程名,平時(shí)*0.1+期中*0.2+期末*0.7AS綜合成績

FROM

學(xué)生,成績,課程

WHERE

學(xué)生.學(xué)號(hào)=成績.學(xué)號(hào)AND

成績.課程號(hào)=課程.課程號(hào)說明:由于學(xué)號(hào)字段在兩個(gè)表中都出現(xiàn),為了防止二義性,在其列名前加上表名作為前綴,以示區(qū)別。如果列名是唯一的,則不必加前綴。例10.26:按各門課程期末平均成績的降序輸出每位學(xué)生的學(xué)號(hào)和期末平均成績(保留小數(shù)1位)。SQL語句如下:

SELECT

成績.學(xué)號(hào),ROUND(Avg(成績.期末),1)AS

期末平均成績

FROM

學(xué)生INNERJOIN

成績ON

學(xué)生.學(xué)號(hào)=成績.學(xué)號(hào)

GROUPBY

成績.學(xué)號(hào)

ORDERBY2DESC在SQL語言中,當(dāng)一個(gè)查詢是另一個(gè)查詢的條件時(shí),即在一個(gè)SELECT語句的WHERE子句中出現(xiàn)另一個(gè)SELECT語句,這種查詢稱為嵌套查詢。通常把內(nèi)層的查詢語句稱為子查詢,調(diào)用子查詢的查詢語句稱為父查詢。SQL語言允許多層嵌套查詢,即一個(gè)子查詢中還可以嵌套其他子查詢。子查詢的SELECT語句中不能使用ORDERBY子句,ORDERBY子句只能對(duì)最終查詢結(jié)果排序。四.嵌套查詢1.帶有比較運(yùn)算符的子查詢帶有比較運(yùn)算符的子查詢是指父查詢與子查詢之間用比較運(yùn)算符(>、<、=、>=、<=、<>)進(jìn)行連接。例10.27:查詢所有參加“計(jì)算機(jī)”課程考試的學(xué)生的學(xué)號(hào)。SELECT學(xué)號(hào)FROM

成績WHERE

課程號(hào)=(SELECT

課程號(hào)FROM

課程

WHERE課程名="計(jì)算機(jī)")例10.28:檢索所有入學(xué)成績高于于海濤的學(xué)生的學(xué)號(hào)、姓名、性別和入學(xué)成績。

SELECT

姓名,性別,入學(xué)成績FROM

學(xué)生

WHERE

入學(xué)成績>(SELECT

入學(xué)成績

FROM

學(xué)生

WHERE

姓名="于海濤")

例10.29:顯示入學(xué)成績高于男生平均入學(xué)成績的女生的學(xué)號(hào)、姓名和平均成績。

SELECT

學(xué)號(hào),姓名,入學(xué)成績

FROM

學(xué)生

WHERE

性別=“女”AND入學(xué)成績>=(SELECTAVG(入學(xué)成績)FROM

學(xué)生

WHERE

性別=“男”)2.帶有IN謂詞的子查詢格式:<字段名>[NOT]IN(<子查詢>)IN是屬于的意思,<字段名>指定的字段內(nèi)容屬于子查詢中任何一個(gè)值,運(yùn)算結(jié)果都為真。

例10.30:查詢所有參加“計(jì)算機(jī)”課程考試的學(xué)生的學(xué)號(hào)、姓名和性別。

SELECT

學(xué)號(hào),姓名,性別FROM學(xué)生

WHERE

學(xué)號(hào)IN(SELECT學(xué)號(hào)FROM

成績

WHERE

課程號(hào)=(SELECT

課程號(hào)FROM

課程

WHERE課程名="計(jì)算機(jī)")3.帶有ANY或ALL謂詞的子查詢格式:<字段名><比較運(yùn)算符>[ANY|ALL](<子查詢>)注意:使用ANY或ALL謂詞時(shí)必須同時(shí)使用比較運(yùn)算符。例10.31:查詢?nèi)雽W(xué)成績高于女生最低入學(xué)成績的男生的學(xué)號(hào)、姓名和入學(xué)成績,SQL語句如下:

SELECT學(xué)號(hào),姓名,性別,入學(xué)成績FROM學(xué)生

WHERE

性別=“男”AND

入學(xué)成績>ANY(SELECT

入學(xué)成績FROM學(xué)生

WHERE

性別=“女”)用聚合函數(shù)來實(shí)現(xiàn):SELECT

學(xué)號(hào),姓名,性別,入學(xué)成績FROM

學(xué)生WHERE

性別=“男”AND

入學(xué)成績>=(SELECTMIN(入學(xué)成績)FROM

學(xué)生

WHERE性別=“女”)用聚合函數(shù)實(shí)現(xiàn)子查詢通常比直接用ANY或ALL查詢效率要高。4.帶有EXISTS謂詞的子查詢格式:[NOT]EXISTS(<子查詢>)帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值(true)或邏輯假值(false),即是否存在相應(yīng)的記錄。例10.32:查詢參加了A02課程考試的學(xué)生學(xué)號(hào)和姓名。SQL語句如下:SELECT學(xué)號(hào),姓名FROM學(xué)生WHEREEXISTS(SELECT*FROM成績

WHERE

成績.學(xué)號(hào)=學(xué)生.學(xué)號(hào)AND成績.課程號(hào)="A02");帶EXISTS的子查詢只返回真值或假值,其輸出項(xiàng)通常都用*例10.33:查詢參加了全部課程考試的學(xué)生學(xué)號(hào)和姓名。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論