




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、序序 想象一只剛被母鷹孵化出來的雛鷹,抖動(dòng)粘想象一只剛被母鷹孵化出來的雛鷹,抖動(dòng)粘濕的翅膀,想要飛上青天的模樣。濕的翅膀,想要飛上青天的模樣。 那是一個(gè)多么壯觀的場面呀!從一只不會(huì)飛那是一個(gè)多么壯觀的場面呀!從一只不會(huì)飛行的雛鷹,到翱翔藍(lán)天的巨鷹,這個(gè)過程要經(jīng)過行的雛鷹,到翱翔藍(lán)天的巨鷹,這個(gè)過程要經(jīng)過多少磨煉呀!多少磨煉呀!序序 雛鷹在窩里嗷嗷待哺的等待母親。雛鷹在窩里嗷嗷待哺的等待母親。 雛鷹揮舞弱軟的臂膀。雛鷹揮舞弱軟的臂膀。 母鷹帶領(lǐng)小鷹曬太陽。母鷹帶領(lǐng)小鷹曬太陽。 一只小鷹不小心從樹窩跌落因而折翼一只小鷹不小心從樹窩跌落因而折翼 小鷹在母鷹背上享受凌風(fēng)的速度。小鷹在母鷹背上享受凌風(fēng)的
2、速度。 小鷹開始飛行。小鷹開始飛行。 長成巨鷹。長成巨鷹。 學(xué)習(xí)的過程需要有耐心的培養(yǎng)、愛心的呵護(hù)學(xué)習(xí)的過程需要有耐心的培養(yǎng)、愛心的呵護(hù)雄心的感染、關(guān)心的啟發(fā),以及信心的鼓舞。雄心的感染、關(guān)心的啟發(fā),以及信心的鼓舞。第第4章章 數(shù)據(jù)表操作數(shù)據(jù)表操作 所謂查詢,就是對已經(jīng)存在于數(shù)據(jù)庫中的數(shù)據(jù)所謂查詢,就是對已經(jīng)存在于數(shù)據(jù)庫中的數(shù)據(jù)按特定的組合、條件或次序進(jìn)行檢索。即用按特定的組合、條件或次序進(jìn)行檢索。即用SELECT SELECT 語句從語句從SQL Server 2008SQL Server 2008中檢索數(shù)據(jù),然后以一個(gè)中檢索數(shù)據(jù),然后以一個(gè)或多個(gè)結(jié)果集的形式將其返加給用戶。結(jié)果集是對或多個(gè)
3、結(jié)果集的形式將其返加給用戶。結(jié)果集是對來自來自SELECTSELECT語句的數(shù)據(jù)的表格排列,由行和列組成。語句的數(shù)據(jù)的表格排列,由行和列組成。 查詢功能是數(shù)據(jù)庫最基本也是最重要的功能,希望認(rèn)真學(xué)習(xí)并熟練掌握。1熟練掌握基本的查詢語句的使用方法。 2熟練掌握條件查詢的基本操作。3熟練掌握統(tǒng)計(jì)查詢、分組查詢和排序查詢的正確用法。4掌握簡單的聯(lián)接查詢和嵌套查詢。 4.1任務(wù)一任務(wù)一 使用圖形方式創(chuàng)建表使用圖形方式創(chuàng)建表 使用簡單查詢使用簡單查詢 任務(wù)名稱:任務(wù)名稱:使用簡單查詢 任務(wù)描述:任務(wù)描述:查詢,顧名思義就是從已知的數(shù)據(jù)庫表中查詢我們所需要的數(shù)據(jù)內(nèi)容。學(xué)習(xí)依據(jù)漸進(jìn)性原則,我們以oasyste
4、m實(shí)例數(shù)據(jù)庫為例,先進(jìn)行簡單的數(shù)據(jù)查詢。 本任務(wù)介紹怎么返回用戶的基本數(shù)據(jù),一些基本查詢語法介紹。1.1.簡要分析簡要分析 SQL中的查詢命令是非常重要的,命令單詞為select。通常select和from搭配使用,也可在不同位置增加一些短語,以實(shí)現(xiàn)功能更強(qiáng)的查詢。這里,先不涉及其它的短語,介紹最簡單的查詢語句SELECT使用。2.2.實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟(1)返回表中所有數(shù)據(jù)(2)TOP N 返回表中前幾條數(shù)據(jù)(3)返回表中的某一列(4)給列起名 步驟步驟0101:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。輸入查詢命令,然后執(zhí)行,查看結(jié)果,即得到部門表中的記錄信息。如
5、圖5-1所示。 圖5-1 查詢部門表的所有信息查詢結(jié)果查詢命令步驟步驟0202:在輸入查詢命令時(shí),在*前面加top2,然后執(zhí)行,查詢結(jié)果,則得到部門表中前兩條記錄信息。如圖5-2所示。圖5-2 查詢部門表中前兩條記錄信息 步驟步驟0303:在輸入查詢命令時(shí),只想看一下部門名稱,則輸入select Name from Department 結(jié)果如圖5-3所示。圖5-3 查詢部門名稱列查詢命令查詢結(jié)果步驟步驟0404:在輸入查詢命令時(shí),給列起個(gè)名字,使查詢結(jié)果更直觀。在步驟2基礎(chǔ)上增加 a s 部 門 名 稱 , 結(jié)果如圖5-4所示。圖5-4 給查詢的部門名稱起列名查詢命令查詢結(jié)果 在SQLSer
6、ver 中,對數(shù)據(jù)的查詢使用 SELECT 語句。SELECT語句功能強(qiáng)大,使用靈活,可以對數(shù)據(jù)庫進(jìn)行各類查詢。查詢語句的語法結(jié)構(gòu)如下:SELECT FROM WHERE ORDER BY ASC|DESCGROUP BY HAVING 有關(guān)說明(1)SELECT語句用于指定查詢的輸出列,即字段列表。(2)WHERE子句用于指定記錄有條件的查詢;(3)FROM子句指定從哪里查;(4)ORDER BY短語是指將查詢的結(jié)果進(jìn)行排序;(5)GROUP BY短語是指要將查詢的結(jié)果進(jìn)行分組匯總。1.1.簡單查詢簡單查詢Select distinct from 表名功能:從指定的表中查詢記錄信息。說明:(
7、1)如果查詢所有的列,則列名列表由*代替。(2)如果指明查詢指定的某一列或某幾列,則列名之間用“,”號隔開(3)Distinct 表示去掉重復(fù)的記錄2.TOP N 2.TOP N 語句基本語法語句基本語法前面介紹的方法可以分別獲得表的全部信息或單獨(dú)獲取某個(gè)列,使用select 還可以指表中返回的行數(shù),使用方法如下所示: 前面介紹的方法可以分別獲得表的全部信息或單獨(dú)獲取某個(gè)列,使用select 還可以指表中返回的行數(shù),使用方法如下所示:Select TOP N from 表名TOP N用于指定查詢結(jié)果返回的行數(shù)。3.3.給列起別名給列起別名 如果查詢的列不是來自于源庫表字段,而是表達(dá)式或函數(shù)時(shí),
8、SQL默認(rèn)無列名,為了讓列名更加清晰,常給列起別名。Select 列名 as 新名 from表名4.4.操作舉例操作舉例【操作實(shí)例操作實(shí)例5-15-1】查詢檔案表File中記錄的所有信息,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select * from File -查詢所用的列如圖5-5 實(shí)例5-1運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-25-2】查詢檔案表File中記錄的姓名、性別和職稱列,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select Name,Sex,Duty from File -查詢指定的列如圖5-
9、6 實(shí)例5-2運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-35-3】查詢檔案表File中職稱有幾種,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select distinct Dutyfrom File -查詢職稱如圖5-7 實(shí)例5-3運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-45-4】查詢檔案表File中前三條記錄的姓名信息,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select top 3 Name from File -查詢前三條記錄如圖5-8 實(shí)例5-4運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-55-5】查詢檔案表File中職工姓名,性別、和
10、職稱,并分別取適當(dāng)?shù)拿?。新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select Name as 姓名,Sex as 性別,Duty as 職稱from File -將查詢的列起名如圖5-9 實(shí)例5-5運(yùn)行結(jié)果 友情提醒:在select 查詢語句中,不區(qū)分大小寫。但是在書寫上一定要注意規(guī)范,且所有的標(biāo)點(diǎn)符號必須是英文符號。 5.2任務(wù)二任務(wù)二 使用條件查詢使用條件查詢?nèi)蝿?wù)名稱:任務(wù)名稱:使用條件查詢?nèi)蝿?wù)描述:任務(wù)描述:在oasystem數(shù)據(jù)庫中,有時(shí)需要查詢滿足各項(xiàng)條件的記錄。即條件查詢。條件怎么寫,怎么用,現(xiàn)以oasystem實(shí)例數(shù)據(jù)庫為例進(jìn)行條件查
11、詢,體會(huì)條件查詢的基本用法。1簡單分析簡單分析 Where 子句確定了查詢的條件??梢栽赟elect 查詢中加入Where ,可以實(shí)現(xiàn)各項(xiàng)滿足條件的查詢結(jié)果。2實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟查詢條件表達(dá)式的運(yùn)算符多種多樣,下面介紹常用的幾種類型:(1)比較運(yùn)算符(2)范圍運(yùn)算符(3)列表運(yùn)算符(4)模糊匹配運(yùn)算符步驟步驟0101:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-10所示。圖5-10查詢李曉玉的職稱增加了where條件,條件里有比較運(yùn)算符滿足條件后的結(jié)果步驟步驟0202:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)
12、據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-11所示。圖5-10 查詢工作年限為7-11年之間的職工姓名,性別,職稱,工作年限Betweenand,表范圍。相當(dāng)于years=7andyears=11滿足條件后的結(jié)果步驟步驟0202:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-7所示。圖5-11 查詢工作年限為6和7年的職工姓名,職稱,工作年限In短語,表值列表。相當(dāng)于years=6oryears=7滿足條件后的結(jié)果步驟步驟0404:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫
13、設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-12所示。圖5-12 查詢姓張的職工姓名,職稱 Like短語表模式匹配,含義為姓張的滿足條件后的結(jié)果1 1WhereWhere子句概述子句概述 Where子句被用于選取需要檢索的數(shù)據(jù)行,靈活地使用Where子句能夠指定許多不同的查詢條件,以實(shí)現(xiàn)更精確的查詢,如精確查詢數(shù)據(jù)庫中某條語句的某項(xiàng)數(shù)據(jù)值則需在WHERE子句中使用表達(dá)式。 在SELECT 查詢語句中使用WHERE子句時(shí)的一般語法結(jié)構(gòu)為: Select from where 說明: 此格式功能是查詢結(jié)果條件值為true的所有行,而對于條件值為false或者未知的行,則
14、不返回。Where子句使用靈活,條件有多種使用方式,表6-1列出了where子句中可以使用的條件。表5-1 WHERE子句中使用的比較條件運(yùn)算符分類運(yùn) 算 符說 明比較運(yùn)算符、=、=、=、!=、!、!、! 、=、= =、 、=、!=!=、!、!分別表示大于、大于等于、等于、小于、小于分別表示大于、大于等于、等于、小于、小于等于、不等于、不大于、不小于,使用它們對查詢條件進(jìn)行限等于、不等于、不大于、不小于,使用它們對查詢條件進(jìn)行限制。制。 友情提醒:在條件使用時(shí),通常以字段變量與指定的值進(jìn)行比 較。值要與字段變量類型匹配,否則出錯(cuò)。即字符型數(shù)據(jù)要用單引號引起,數(shù)值型數(shù)據(jù)則不用。2 2使用范圍運(yùn)算
15、符使用范圍運(yùn)算符 在WHERE子句中使用BETWEEN條件,可以為用戶查詢限定范圍,其中between 表示返回在某一范圍內(nèi)的數(shù)據(jù),而NOT BETWEEN表示返回不在某一范圍內(nèi)的數(shù)據(jù)。Betweenand表示在和之間,包括兩個(gè)端點(diǎn)的值。3 3使用列表運(yùn)算符使用列表運(yùn)算符 查詢時(shí)會(huì)遇到需要查詢某表達(dá)式的取值屬于某一列表之一的數(shù)據(jù),雖然可以結(jié)合使用比較運(yùn)算符來實(shí)現(xiàn),但是這樣編寫的SELECT語句會(huì)使SELECT語句的直觀性下降。使用IN或NOT IN關(guān)鍵字來限定查詢條件。更能直觀地查詢表達(dá)式是否在列表值中。也可作為查詢特殊信息集合的方法。在in(值列表)中,也要注意值與條件中字段的類型要匹配。4
16、 4使用模糊匹配符使用模糊匹配符 查詢時(shí),可能無法確定某條記錄中具體的信息,如果要查找該記錄時(shí)則需要使用模糊查詢。Where 子句中使用LIKE或NOT LIKE 與通配符搭配使用,可以實(shí)現(xiàn)模糊查詢。SQL 中常用的通配符有%和_2個(gè),二者含義不同,注意區(qū)別使用。(1)%表示任意的任意個(gè)字符;(2)_表示任意的一個(gè)字符。5 5使用邏輯運(yùn)算符使用邏輯運(yùn)算符(1)WHERE子句中可用的邏輯運(yùn)算符包括AND、OR、NOT??梢杂靡粋€(gè),也可以用多個(gè)。(2)And (邏輯與)連接兩個(gè)條件,若兩個(gè)條件都成立,則組合起來后的條件成立。(3)Or(邏輯或)連接兩個(gè)條件,若兩個(gè)條件中任意一個(gè)成立,則組合起來后的
17、條件成立。(4)Not(邏輯非) 對給定的條件結(jié)果取反。6 6使用空值判斷符使用空值判斷符 NULL表示未知,不可用或?qū)⒃谝院筇砑拥臄?shù)據(jù)。在WHERE子句中可使用IS NULL或IS NOT NULL條件可以查詢某一數(shù)據(jù)值是否為NULL的信息?!静僮鲗?shí)例操作實(shí)例5-65-6】查詢檔案表File中中級職稱的人員姓名,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select Name from File where Duty=中級 -查詢滿足條件的列如圖5-13 實(shí)例5-6運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-75-7】查詢檔案表File中中級職稱的男性職工姓名,新
18、建查詢編輯器,輸入如下代碼: use oasystem -打開oasystem數(shù)據(jù)庫select Name from File where Duty=中級 and Sex=男 -查詢滿足條件的列如圖5-14 實(shí)例5-7運(yùn)行結(jié)果 友情提醒:通常一個(gè)條件查詢,可以有多種查詢條件的寫法,在學(xué)習(xí)中要善于歸納總結(jié),才能做到要什么,就能查什么,查什么,就能得什么。才能靈活運(yùn)用。運(yùn)算符的優(yōu)先級由高到低分別為NOT、AND、OR。NULL值與零、零長度的字符串、或空白(空字符)的含義是不同的?!静僮鲗?shí)例操作實(shí)例5-8】查詢檔案表File中非男性的職工姓名,新建查詢編輯器,輸入如下代碼: use oasyste
19、m -打開oasystem數(shù)據(jù)庫select Name from File where not Sex=男 -查詢滿足條件的列如圖5-15 實(shí)例5-8運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-95-9】在上述操作中查詢檔案表File中非男性的職工姓名,也可以這樣操作,同樣會(huì)得到相同的結(jié)果。 use oasystem -打開oasystem數(shù)據(jù)庫select Name from File where Sex=女 -查詢滿足條件的列 列名 in(值1,值2) 相當(dāng)于 列名=值1 or列名=值2。列名 between and 可以用邏輯表達(dá)式改寫,not betweenand也是如此 。 5.3任務(wù)三任務(wù)三 使
20、用統(tǒng)計(jì)查詢使用統(tǒng)計(jì)查詢 任務(wù)名稱:任務(wù)名稱:使用統(tǒng)計(jì)查詢 任務(wù)描述:任務(wù)描述:在oasystem數(shù)據(jù)庫中,有時(shí)需要對相關(guān)數(shù)據(jù)進(jìn)行統(tǒng)計(jì),如統(tǒng)計(jì)有多少用戶在辦公系統(tǒng)上注冊,統(tǒng)計(jì)員工平均工作年限等。本任務(wù)將學(xué)習(xí)一些查詢中常用到的一些聚合函數(shù),來實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)。 1.1.簡要分析簡要分析 聚合函數(shù),常用于SELECT語句中,位于列的位置,實(shí)現(xiàn)對指定的字段求和、求平均值、求最大最小值、計(jì)數(shù)等操作。2 2實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟(1)COUNT實(shí)現(xiàn)計(jì)數(shù);(2)SUM實(shí)現(xiàn)求和;(3)AVG實(shí)現(xiàn)求平均值;(4)MAX ,MIN求最大值、最小值。步驟步驟0101:點(diǎn)擊新建點(diǎn)擊新建查詢進(jìn)入查詢分析查詢進(jìn)入查詢分析器,并將器
21、,并將OASytemOASytem數(shù)據(jù)庫設(shè)置為當(dāng)前數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編默認(rèn)庫。在查詢編輯器中輸入圖中查輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖結(jié)果如圖5-165-16所示。所示。圖5-16 統(tǒng)計(jì)用戶表記錄的個(gè)數(shù)Select后面使用了count(*)意為統(tǒng)計(jì)記錄個(gè)數(shù)統(tǒng)計(jì)的結(jié)果圖5-17 統(tǒng)計(jì)員工的平均工作年限步驟步驟0202:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-17所示。Avg(years)表示將工作年限列求平均值統(tǒng)計(jì)的結(jié)果圖5-18 統(tǒng)計(jì)員工的最長工作年限及最短工作年限步驟步
22、驟0303:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-18。求years列的最大值,最小值。統(tǒng)計(jì)的結(jié)果步驟步驟0404:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-19。圖5-19 統(tǒng)計(jì)員工的工作年限總和求years列的值的和。統(tǒng)計(jì)的結(jié)果1.1.函數(shù)查詢函數(shù)查詢 在select from命令中,在select后面,可以接非表中字段的列??梢允潜磉_(dá)式,也可以為函數(shù)(包括一般函數(shù)和聚合函數(shù))。此時(shí)通常用到 as 新列名,即給查詢的列起名,
23、以達(dá)到查詢的結(jié)果更直觀。2.2.表達(dá)式構(gòu)造新的列表達(dá)式構(gòu)造新的列 用select語句可以對數(shù)值型字段進(jìn)行加減、乘除運(yùn)算。從而計(jì)算表達(dá)式的值。3.3.普通函數(shù)構(gòu)造新的列普通函數(shù)構(gòu)造新的列 在查詢中最常用的兩個(gè)函數(shù),一個(gè)是year(),求日期型字段中的年份。結(jié)果是一個(gè)數(shù)值型數(shù)據(jù)。一個(gè)是getdate(),取系統(tǒng)的日期時(shí)間。 4.4.聚合函數(shù)構(gòu)造新的列聚合函數(shù)構(gòu)造新的列Select 中常用的聚合函數(shù)有SUM、AVG、MAX、MIN、COUNT。其含義如下: Sum(列名) 按列求和Avg(列名) 按列求平均值Max(列名) 按列求最大值Min(列名) 按列求最小值Count(*) 統(tǒng)計(jì)記錄個(gè)數(shù)【操作
24、實(shí)例操作實(shí)例5-105-10】 查詢五年后每個(gè)人的工齡,查看其結(jié)果。新建查詢編輯器,輸入如下代碼: use oasystem -打開oasystem數(shù)據(jù)庫select Name,years+5 from File -查詢五年后每個(gè)人的工作年限如圖5-20 實(shí)例5-10運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-115-11】查詢檔案表File中每個(gè)人的出生年份,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select Name,year(birthday) as 出生年份from File -查詢滿足條件的列如圖5-21 實(shí)例5-11運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-12
25、5-12】查詢檔案表File中職工的年齡,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select Name,year(getdate()-year(birthday) as 年齡from File -查詢滿足條件的列如圖5-22 實(shí)例5-12運(yùn)行結(jié)果 【操作實(shí)例操作實(shí)例5-135-13】查詢檔案表查詢檔案表FileFile中員工平均年齡,中員工平均年齡,最大年齡,最小年齡及年齡總和新建查詢編輯器,輸入最大年齡,最小年齡及年齡總和新建查詢編輯器,輸入如下代碼:如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select avg(year(
26、getdate()-year(birthday) as 平均年齡,max(year(getdate()-year(birthday) as 最大年齡min(year(getdate()-year(birthday) as 最小年齡sum(year(getdate()-year(birthday) as 年齡總和 from File-查詢滿足條件的列結(jié)果如圖5-23所示:如圖5-23 實(shí)例5-13運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-145-14】統(tǒng)計(jì)男性職工人數(shù),新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select count(*) as 男職工人數(shù) fro
27、m File where Sex=男 -查詢滿足條件的列結(jié)果如圖5-24所示: 友情提醒:無論使用表達(dá)式還是函數(shù),得到的只是查詢的結(jié)果列,并不是數(shù)據(jù)表中真有此列。為了讓查詢的結(jié)果更直觀,常常給列起個(gè)見名知義的名稱。如圖5-24 實(shí)例5-14運(yùn)行結(jié)果 5.45.4任務(wù)四任務(wù)四 使用分組查詢使用分組查詢?nèi)蝿?wù)名稱:任務(wù)名稱:使用分組查詢使用分組查詢?nèi)蝿?wù)描述:任務(wù)描述:目前為止,在目前為止,在oasystem數(shù)據(jù)庫中,我們學(xué)會(huì)了數(shù)據(jù)庫中,我們學(xué)會(huì)了簡單統(tǒng)計(jì)數(shù)據(jù)表中的數(shù)據(jù)。如果要進(jìn)行更高級的統(tǒng)計(jì)匯總簡單統(tǒng)計(jì)數(shù)據(jù)表中的數(shù)據(jù)。如果要進(jìn)行更高級的統(tǒng)計(jì)匯總操作,則需要用到操作,則需要用到group by 子句。
28、子句。1 1簡單分析簡單分析數(shù)據(jù)庫具有基于表的特定列對數(shù)據(jù)進(jìn)行分析的能力、可以使用group by子句對某一列數(shù)據(jù)的值進(jìn)行分組,分組可以使同組的元組集中在一起,用于歸納信息類型,以匯總相關(guān)數(shù)據(jù)。2 2實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟GROUP BY 子句語句通常用于SELECT語句中,將查詢的結(jié)果進(jìn)行分組,通常與一些聚合函數(shù)配合使用。一般用法為:(1)GROUP BY 字段名;(2)GROUP BY 字段名 HAVING。圖5-25 分別統(tǒng)計(jì)男女生人數(shù)步驟步驟0101:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-25所示。你想知道
29、去掉groupby后得到的是什么樣的結(jié)果嗎?統(tǒng)計(jì)男女人員數(shù)步驟步驟0202:點(diǎn)擊新建查詢進(jìn)點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將入查詢分析器,并將OASytemOASytem數(shù)據(jù)庫設(shè)置為數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查編輯器中輸入圖中查詢代碼,以實(shí)現(xiàn)統(tǒng)計(jì)詢代碼,以實(shí)現(xiàn)統(tǒng)計(jì)各職稱的人員統(tǒng)計(jì)。各職稱的人員統(tǒng)計(jì)。點(diǎn)擊執(zhí)行,結(jié)果如圖點(diǎn)擊執(zhí)行,結(jié)果如圖5-265-26所示。所示。圖5-26分別查詢不同職稱的人數(shù)通常用不用groupby子句,都是根據(jù)查詢要求,暗含在業(yè)務(wù)規(guī)則里要仔細(xì)考慮哦。分組匯總后的結(jié)果步驟步驟0303 如果將分組后滿足條件的結(jié)果輸出,則用上HAVING,即將
30、分組后滿足條件的記錄顯示出來。在查詢編輯器中輸入圖中查詢代碼,以實(shí)現(xiàn)將統(tǒng)計(jì)后的滿足條件的記錄輸出。結(jié)果如圖5-27。 帶有條件的分組查詢分組匯總后的查詢結(jié)果圖5-27 查詢?nèi)藬?shù)不小于2的職稱及其人數(shù)1 1分組查詢分組查詢 在select from命令中,在select后面,可以接非表中字段的列??梢允潜磉_(dá)式,也可以為函數(shù)(包括一般函數(shù)和聚合函數(shù))。此時(shí)通常用到 as 新列名,即給查詢的列起名,以達(dá)到查詢的結(jié)果更直觀。2 2分組時(shí),查詢字段的選擇分組時(shí),查詢字段的選擇 分組時(shí),查詢的列字段只能是聚合函數(shù)或分組字段。如若出現(xiàn)其他字段,則系統(tǒng)報(bào)錯(cuò)。3.Having3.Having 與與wherewh
31、ere 的不同之處的不同之處 Where 表示條件,Having也是表示條件,但二者是有區(qū)別的,Where用于select 語句中,表示查詢要滿足的條件,用法參考任務(wù)二條件查詢;having只能與group by 分組配合使用,表示將分組后將滿足條件的記錄輸出。4.4.分組的注意事項(xiàng)分組的注意事項(xiàng) 按字段分組,即對該字段值相同的記錄只取一條,同時(shí)匯總其他記錄的數(shù)據(jù),因此,在Group by分組使用時(shí),有一定難度,需要認(rèn)真分析業(yè)務(wù)規(guī)則,仔細(xì)理解后方能熟練使用。5.5.操作實(shí)例操作實(shí)例【操作實(shí)例操作實(shí)例5-155-15】 查詢每個(gè)部門人員數(shù),并查看其結(jié)果。新建查詢編輯器,輸入如下代碼:use oa
32、system -打開oasystem數(shù)據(jù)庫select count(*) as 人數(shù)from File group by Departid -按部門號分組統(tǒng)計(jì)人數(shù)如圖5-28 實(shí)例5-15運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-165-16】上例中查詢每個(gè)部門人員數(shù),顯示結(jié)果更直觀些,則可加分組字段列,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select Departid,count(*) as 人數(shù)from Filegroup by Departid -按部門號分組統(tǒng)計(jì)人數(shù)如圖5-29 實(shí)例5-16運(yùn)行結(jié)果【操作實(shí)例操作實(shí)例5-175-17】在在上例中查詢每
33、個(gè)部門人員數(shù),雖然顯示出了部門號,但每個(gè)部門號都代表哪個(gè)部門呢,若想得到更加直觀的結(jié)果,則還需用到部門表,即連接查詢可實(shí)現(xiàn)。我們將在任務(wù)六中詳細(xì)學(xué)習(xí)連接查詢。不妨先給出操作,供自學(xué)體會(huì)。use oasystem -打開oasystem數(shù)據(jù)庫select Department.Name as 部門名,count(*)as 人數(shù)from Department,File where Department.Departid=File.Departid group by Department.Name-實(shí)現(xiàn)了兩表連接查列并分組查詢結(jié)果如圖5-30所示:如圖5-30 實(shí)例5-17運(yùn)行結(jié)果 友情提醒:在分組
34、查詢時(shí),是否使用groupby分組子句,在實(shí)際查詢分析上有一定的難度,同學(xué)們應(yīng)認(rèn)真理解業(yè)務(wù)規(guī)則基礎(chǔ)上,理解其含義,并上機(jī)調(diào)試、試驗(yàn),才能真正得到自己想要的結(jié)果。 5.5任務(wù)五任務(wù)五 使用排序查詢使用排序查詢?nèi)蝿?wù)名稱:任務(wù)名稱:使用排序查詢?nèi)蝿?wù)描述:任務(wù)描述:在oasystem數(shù)據(jù)庫中,為了方便看數(shù)據(jù)庫表中的記錄,需要對某些字段或某幾個(gè)字段進(jìn)行排序,則用到ORDER BY子句,如果需要將結(jié)果保存到另一張表,則用到INTO短語。1 1簡單分析簡單分析 ORDER BY 子句一般位于SELECT 語句的最后,它的功能是對查詢返回的數(shù)據(jù)進(jìn)行重新排序。用戶可以通過ORDER BY子句來限定查詢返回結(jié)果的
35、輸出順序,如正序或者倒序等?;亟Y(jié)果的輸出順序,如正序或者倒序等。2 2實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟 ORDER BY子句語句通常用于SELECT語句中,將查詢的結(jié)果進(jìn)行排序。INTO短語可以將排序后的結(jié)果保存到一張新表中。(1)ORDER BY 字段名 (2)ORDER BY 字段名1,字段名2 (3)INTO 表名步驟步驟0101:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-31所示。orderbyduty按職稱排序desc表示降序。查詢職工的姓名,職稱,及生日,并結(jié)果按職稱降序排。圖5-31 查詢檔案表的相關(guān)信息,結(jié)果按職
36、稱降序排列。步驟步驟0202:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼。點(diǎn)擊執(zhí)行,結(jié)果如圖5-32所示。先按職稱排序,職稱相同的則按生日由小到大排序。排序后的結(jié)果圖5-32 查詢檔案表的相關(guān)信息,結(jié)果按職稱和生日排列步驟步驟0303:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,以實(shí)現(xiàn)統(tǒng)計(jì)各職稱的人員統(tǒng)計(jì)。點(diǎn)擊執(zhí)行,結(jié)果如圖5-33Intoa1即將查詢的結(jié)果保存到表a1中提示保存成功。表a1在哪,內(nèi)容如何?刷新表查詢表a1的內(nèi)容a1的內(nèi)容圖5-33 將步驟2中查詢的結(jié)果保存到表a
37、1中1 1使用使用ORDERORDER BYBY子句子句 在查詢結(jié)果集中,記錄的順序是按它們在表中的順序進(jìn)行排列的,可以使用ORDER BY子句對查詢的結(jié)果重新進(jìn)行排序。可以規(guī)定順序,如升序(即按由低到高或從小到大);降序(從高到低或由大到?。椒ㄊ褂藐P(guān)鍵字ASC(升序),DESC(降序),如果省略ASC和DESC,系統(tǒng)默認(rèn)升序。也可以在ORDER BY中指定多個(gè)字段,檢索結(jié)果首先按第一個(gè)字段進(jìn)行排序,第一個(gè)字段的值相同的那些數(shù)據(jù),則按第2個(gè)字段值排序,以此類推。ORDER BY子句要寫在WHERE子句的后面。2 2使用使用INTOINTO子句子句 在SELECT查詢中,使用INTO短語,可
38、以將查詢的結(jié)果保存到指定的表中,位置要用于FROM前,查詢的列之后。格式:格式:into表名(根據(jù)查詢建立臨時(shí)基本表 )。使用使用SELECT INTOSELECT INTO注意事項(xiàng):注意事項(xiàng):(1)新表是命令執(zhí)行時(shí)新創(chuàng)建的。(2)新表中的列和行是基于查詢結(jié)果集的。(3)如果新表名稱的開頭為“#”則生成的是臨時(shí)表?!静僮鲗?shí)例操作實(shí)例5-185-18】 查詢檔案表File記錄,并將結(jié)果按性別排序,查看其結(jié)果。新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select * from File order by sex -查詢內(nèi)容并排序【操作實(shí)例操作實(shí)例5-19
39、5-19】查詢部門表Department信息,并將結(jié)果按部門名降序排列,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select * from Department order by Name desc -查詢內(nèi)容并排序【操作實(shí)例操作實(shí)例5-205-20】查詢檔案表File中職工的姓名,工出年限,并將結(jié)果保存到表work中,新建查詢編輯器,輸入如下代碼:use oasystem -打開oasystem數(shù)據(jù)庫select Name,year(birthday) into work as 工作年限from File -查詢并保存結(jié)果 5.6任務(wù)六任務(wù)六 使用
40、嵌套查詢使用嵌套查詢?nèi)蝿?wù)名稱:任務(wù)名稱:使用嵌套查詢?nèi)蝿?wù)描述:任務(wù)描述:在oasystem數(shù)據(jù)庫中,員工表調(diào)用部門表的編號形成了外鍵約束,當(dāng)查詢員工信息的時(shí)候不能把部門編號顯示出來,這個(gè)編號顯示出來用戶也不知道是什么內(nèi)容不知道這個(gè)員工是什么部門的,這時(shí)就需把部門的名稱顯示出來,上述問題用嵌套查詢就能解決。1 1簡單分析簡單分析嵌套查詢是一個(gè)高級查詢技術(shù),即一個(gè)select語句中,可嵌套著另外的子查詢,這種方式就是嵌套查詢。在實(shí)際應(yīng)用中,嵌套子查詢能夠幫助用戶從多個(gè)表中完成查詢?nèi)蝿?wù)。 2 2實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟子查詢可以把一個(gè)復(fù)雜的查詢分解成幾個(gè)簡單的查詢來完成結(jié)果的輸出。(1)先執(zhí)行內(nèi)層查詢(2)
41、再執(zhí)行外層查詢例:如要查詢“生產(chǎn)車間”這個(gè)部門的人員相關(guān)相息,則可以下兩方面分析:1在部門表中查詢,獲得生產(chǎn)車間的部門編號。 select Departid from Department where Name=生產(chǎn)生間 2.在檔案中查詢滿足指定部門編號的人員的相關(guān)信息。select Name from File where Departid= 5 即獲我們想要的查詢結(jié)果。步驟步驟0101:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-34所示。 一個(gè)Select語句后面有嵌套一個(gè)select語句,執(zhí)行時(shí)先執(zhí)行里層,
42、再執(zhí)行外層的。查詢的結(jié)果圖5-34查詢部門為生產(chǎn)生間的員工姓名 1.嵌套查詢嵌套查詢 也可以稱之為子查詢,當(dāng)查詢的內(nèi)容來自多張表,而且多張表之間有一定的聯(lián)系時(shí),我們就可以分析是否能用嵌套查詢(子查詢)來解決問題。子查詢中可以嵌套子查詢最多嵌套32層。子查詢分為以下幾種類型:(1)用于關(guān)聯(lián)數(shù)據(jù)如上例中用短語IN將個(gè)查詢關(guān)聯(lián)起來。也可以用exists、any 、all等謂詞來關(guān)聯(lián)。(2)用于派生表 可以用子查詢產(chǎn)生一個(gè)派生的表,用于代替FROM子句中的表。派生表是FROM子句中子查詢的一個(gè)特殊用法,用一個(gè)別名或用戶自定義的名字來引用這個(gè)派生表。FROM子句中的子查詢將返回一個(gè)結(jié)果集,這個(gè)結(jié)果集所形
43、成的表將被外層SELECT語句使用。 (3)用于表達(dá)式 在查詢中,所有使用表達(dá)式的地方,都可以用子查詢代替。此時(shí)子查詢必須返回一個(gè)單個(gè)的值或某一個(gè)字段的值。子查詢可以返回一系列的值來代替出現(xiàn)在WHERE子句中的IN關(guān)鍵字的表達(dá)式。(4)使用子查詢向表中添加多條記錄。使用INSERTSELECT 語句可以一次向表中添加多條記錄。語法格式如下:INSERT 表名(字段列表)SELECT 字段列表FROM 表名 WHERE 條件表達(dá)式功能:該語句將SELECT子句從一個(gè)或多個(gè)表或視圖中選取的數(shù)據(jù),一次性添加到目的列表中,可以一次添加多條記錄,并且可以選擇添加列。2.嵌套查詢的注意事項(xiàng)嵌套查詢的注意事
44、項(xiàng)當(dāng)用子查詢產(chǎn)生派生表時(shí),必須考慮到: (1)查詢語句中的一個(gè)結(jié)果集,被用做一個(gè)表; (2)代替了FROM子句中的表; (3)將與查詢的其它部分一起參與優(yōu)化。 當(dāng)使用子查詢向表中添加記錄時(shí),必須注意:(1)SELECT子句的列名列表必須與INSERT語句的列名列表的列數(shù)、列序、列的數(shù)據(jù)類型都要兼容(2)SELECT語句不能用小括號括起。3.3.什么情況下使用嵌套查詢什么情況下使用嵌套查詢 嵌套查詢一般當(dāng)查詢的內(nèi)容來自多表時(shí),且多張表有代表意義上相同的字段內(nèi)容。 友情提醒:在嵌套查詢中,能用IN子句的的關(guān)聯(lián)子查詢,我們都可以將其等價(jià)為連接查詢。不管哪種方式,查詢的結(jié)果都是一樣的。4 4操作舉例操
45、作舉例 以下實(shí)例以學(xué)生信息系統(tǒng)中的數(shù)據(jù)庫stupersoninfor進(jìn)行設(shè)計(jì)。 其中有課程表kecheng(課程號,課程名,任課教師)成績表chengji(學(xué)號,課程號,成績)學(xué)生信息表stuinfor(學(xué)號,姓名,性別,年齡,專業(yè),班級)【操作實(shí)例操作實(shí)例5-215-21】查詢選修c1課程的學(xué)生信息,新建查詢編輯器,輸入如下代碼:use stupersoninfor select * from stuinfor where 學(xué)號in (select 學(xué)號from chengji where 課程號=c1) 【操作實(shí)例操作實(shí)例5-225-22】查詢選修成績?yōu)?0分以上的學(xué)生姓名,新建查詢編輯器
46、,輸入如下代碼:use stupersoninfor select 姓名from stuinfor where 學(xué)號in (select 學(xué)號from chengji where 成績=90) 【操作實(shí)例操作實(shí)例5-235-23】查詢有選課的學(xué)生的學(xué)號、姓名、專業(yè)和班級。新建查詢編輯器,輸入如下代碼:use stupersoninfor select 姓名,學(xué)號,專業(yè),班級from stuinforwhere exists(select 學(xué)號=chengji.學(xué)號from chengji )【操作實(shí)例操作實(shí)例5-245-24】查詢學(xué)生的姓名、選課課程號,成績。其中學(xué)生的姓名由學(xué)生信息表派生而來
47、。新建查詢編輯器,輸入如下代碼:use stupersoninfor select 課程號,成績,(select 姓名 from stuinfor ab where 學(xué)號=chengji.學(xué)號) from chengji【操作實(shí)例操作實(shí)例5-255-25】創(chuàng)建一個(gè)表ss,其中有字段學(xué)號和姓名;將學(xué)生信息表的學(xué)號和姓名字段存到表ss中。新建查詢編輯器,輸入如下代碼:use stupersoninfor create table ss (學(xué)號nchar(10),姓名nchar(10)insert into ss select 學(xué)號,姓名from stuinfor【操作實(shí)例操作實(shí)例5-265-26】
48、查詢每個(gè)學(xué)生的年齡及與平均年齡的差值。新建查詢編輯器,輸入如下代碼:use stupersoninfor select年齡,(select avg(年齡) from stuinfor )as 平均年齡,年齡-(select avg(年齡) from stuinfor) as 差齡from stuinfor 5.7任務(wù)七任務(wù)七 使用聯(lián)接查詢使用聯(lián)接查詢?nèi)蝿?wù)名稱:任務(wù)名稱:使用聯(lián)接查詢?nèi)蝿?wù)描述:任務(wù)描述:返回員工基本信息時(shí)需要返回部門名稱這樣讓用戶能更好的讀取數(shù)據(jù),這時(shí)不單可以用嵌套查詢實(shí)現(xiàn),也可以用內(nèi)聯(lián)接、一般性聯(lián)接來完成。1 1簡單分析簡單分析 內(nèi)聯(lián)接是sql默認(rèn)的聯(lián)接方式。內(nèi)聯(lián)接通過比較兩個(gè)
49、表共同擁有的列的值,把兩個(gè)表聯(lián)接起來返回滿足條件的行。僅當(dāng)一個(gè)表中的一些行在另一個(gè)表中也有相應(yīng)行時(shí),內(nèi)聯(lián)接才會(huì)返回兩表中任意一表中的這些行,而會(huì)忽略所有未滿足聯(lián)接條件的行。2 2實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟 一般性聯(lián)接,聯(lián)接的原理同內(nèi)聯(lián)接相同,只是命令格式稍有不同,一般性連接是用where指明連接條件,內(nèi)聯(lián)接是用ON指明連接條件。相比而言,一般性連接使用更簡單、更靈活一些。(1)內(nèi)聯(lián)接(2)一般性聯(lián)接步驟步驟0101:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-35所示。內(nèi)聯(lián)接的典型實(shí)例,雖復(fù)雜些,但實(shí)現(xiàn)的功能很強(qiáng)大,一定要好
50、好理解哦。查詢的結(jié)果圖5-35 查詢部門為生產(chǎn)車間的人員的姓名步驟步驟0202:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-36所示。 一般性聯(lián)接,雖復(fù)雜些,但好理解,一定與內(nèi)聯(lián)接分析對比著記憶哦。查詢的結(jié)果圖5-36 查詢部門為生產(chǎn)車間的人員的姓名1.1.內(nèi)聯(lián)接基本語法內(nèi)聯(lián)接基本語法SELECT 列名列表 FROM 表名1 INNER JOIN 表名2 ON 表名1.列名=表名2.列名 說明:(1)列名列表必須是表名1中含有的字段(2)如果查詢中還有其他條件則使用where子句2.2.一般聯(lián)接的基本語法一般聯(lián)接的
51、基本語法SELECT 列名列表 FROM 表名1, 表名2 WHERE 表名1.列名=表名2.列名 說明如下:(1)列名列表可以是兩張表中任意的字段(2)如果查詢中還有其他條件則寫在原WHERE后,用and連接。3 3二者異同二者異同 內(nèi)連接和一般性連接都是只包含滿足連接條件的數(shù)據(jù)行,也稱自然連接,這是二者的相同點(diǎn),不同點(diǎn)主要有:(1)連接條件寫法不同。內(nèi)聯(lián)接,連接條件表達(dá)式用ON連接;一般性連接用where指定連接條件。(2)表名寫的位置不同。內(nèi)聯(lián)接中第一個(gè)FROM后面只能和一張表,即要查詢的字段存在的那張表。一般性連接FROM后面跟多張表,之間用“,”隔開。4 4操作實(shí)例操作實(shí)例【操作實(shí)例
52、操作實(shí)例5-275-27】查詢每個(gè)學(xué)生的姓名,年齡及選課課號及成績。新建查詢編輯器,輸入如下代碼:use stupersoninfor select 姓名,年齡,課程號,成績from stuinfor,chengjiwhere stuinfor.學(xué)號=chengji.學(xué)號【操作實(shí)例操作實(shí)例5-285-28】查詢每個(gè)學(xué)生的學(xué)號,選課的課程名及成查詢每個(gè)學(xué)生的學(xué)號,選課的課程名及成績???。新建查詢編輯器,輸入如下代碼:use stupersoninfor select 學(xué)號,課程名,成績from kecheng,chengji where kecheng.課程號=chengji.課程號【操作實(shí)例操
53、作實(shí)例5-295-29】查詢每個(gè)學(xué)生的姓名,選課的課程名及成查詢每個(gè)學(xué)生的姓名,選課的課程名及成績。績。新建查詢編輯器,輸入如下代碼:use stupersoninfor select 姓名,課程名,成績from kecheng,chengji ,stuinforwhere kecheng.課程號=chengji.課程號and chengji.學(xué)號=stuinfor.學(xué)號【操作實(shí)例操作實(shí)例5-305-30】查詢選課成績不及格的學(xué)生學(xué)號及姓名。查詢選課成績不及格的學(xué)生學(xué)號及姓名。可由內(nèi)聯(lián)接和一般性連接兩種方法查詢??捎蓛?nèi)聯(lián)接和一般性連接兩種方法查詢。新建查詢編輯器,輸入如下代碼: use stu
54、personinfor select stuinfor.學(xué)號,姓名from stuinfor inner join chengjion chengji.學(xué)號=stuinfor.學(xué)號where 成績60 -內(nèi)聯(lián)接use stupersoninfor select stuinfor.學(xué)號,姓名from stuinfor, chengjiwhere chengji.學(xué)號=stuinfor.學(xué)號 and 成績90 -一般性聯(lián)接【操作實(shí)例操作實(shí)例5-325-32】將將5-315-31例查詢內(nèi)容用內(nèi)聯(lián)接來改寫。例查詢內(nèi)容用內(nèi)聯(lián)接來改寫。新建查詢編輯器,輸入如下代碼:use stupersoninfor s
55、elect姓名from stuinfor inner join chengji on chengji.學(xué)號=stuinfor.學(xué)號 inner join kecheng on kecheng.課程號=chengji.課程號where 成績90 友情提醒:通過以上實(shí)例操作,相信同學(xué)們會(huì)對內(nèi)聯(lián)接和一般性聯(lián)接的用法有了更進(jìn)一步的認(rèn)識和理解。在實(shí)際應(yīng)用中若遇到聯(lián)接查詢時(shí),具體采用哪種方法,可以隨自己喜好而選擇。 5.8任務(wù)八任務(wù)八 使用其它聯(lián)接查詢使用其它聯(lián)接查詢?nèi)蝿?wù)名稱:任務(wù)名稱:使用其它聯(lián)接查詢?nèi)蝿?wù)描述:任務(wù)描述:在聯(lián)接查詢中,除任務(wù)七所提及的兩種聯(lián)接查詢外,還有其它幾種聯(lián)接方式,如交叉聯(lián)接、外聯(lián)
56、接、和集合聯(lián)接查詢,雖然不是很常用,但了解一下,對數(shù)據(jù)庫系統(tǒng)知識的理解是有一定幫助的。1 1簡單分析簡單分析 交叉聯(lián)接可以生成測試數(shù)據(jù)或?yàn)楹藢Ρ砑皹I(yè)務(wù)模塊生成所有可能組合的清單。交叉聯(lián)接將從被聯(lián)接的表中返回所有可能的行的組合。如表1有3條記錄,表2有6條記錄,那么使用交叉聯(lián)接查詢結(jié)果就是3*6=18條記錄。 外聯(lián)接根據(jù)返回行的主從表形式不同,其可分為三種類型,即左外聯(lián)接、右外聯(lián)接和完全聯(lián)接。(1)左外聯(lián)接即在連接時(shí)將左邊表的字段值完全保留下來,右邊表沒有相同匹配的項(xiàng)則以NULL替代,即left join;(2)右外聯(lián)接即在連接時(shí)將右邊表的字段值保留下來,左邊表沒有相同匹配的項(xiàng)則以NULL替代,
57、即right join;(3)完全連接即左右兩邊表所有的字段值都保留下來,即full join 使用UNION運(yùn)算符可以將兩個(gè)或多個(gè)SELECT語句的結(jié)果組合成一個(gè)結(jié)果集。即集合聯(lián)接。使用集合聯(lián)接查詢要求結(jié)果集都必須具有相同的結(jié)構(gòu),即列數(shù)相同,并且相應(yīng)的結(jié)果集列的數(shù)據(jù)類型必須兼容。2 2實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟(1)交叉聯(lián)接(2)外聯(lián)接(3)集合聯(lián)接步驟步驟0101:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-37所示。 交叉查詢,將兩個(gè)表的記錄任意組合。此查詢最終結(jié)為3*4=12條記錄圖5-37 File表與Depart
58、ment表交叉查詢 查詢的結(jié)果步驟步驟0202:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-38所示。左外邊接,在兩個(gè)表的自然連接的基礎(chǔ)上保留了Users表的記錄。另一表中對應(yīng)的列補(bǔ)上了NULL。查詢的結(jié)果圖5-38 Users表與Attendance表左外聯(lián)接查詢步驟步驟0303:點(diǎn)擊新建查詢進(jìn)入查詢分析器,并將OASytem數(shù)據(jù)庫設(shè)置為當(dāng)前默認(rèn)庫。在查詢編輯器中輸入圖中查詢代碼,點(diǎn)擊執(zhí)行,結(jié)果如圖5-39所示。U n i o n 集 并 了News和Resources共同字段title記錄。查詢的結(jié)果圖5-39
59、 Union合并查詢1.1.交叉聯(lián)接查詢交叉聯(lián)接查詢格式一:SELECT 列名列表 FROM 表名1, 表名2格式二:SELECT 列名列表 FROM 表名1 CROSS JOIN 表名2交叉連接的結(jié)果是兩個(gè)表的笛卡兒積。交叉連接在實(shí)際應(yīng)用中一般是沒有意義的,但在數(shù)據(jù)庫的數(shù)學(xué)模式上有重要的作用。2.2.外聯(lián)接查詢外聯(lián)接查詢(1)(1)左外聯(lián)接:左外聯(lián)接: 將左表中的所有記錄分別與右表中的每條記錄進(jìn)行組合,結(jié)果集中除返回內(nèi)部連接的記錄以外,還在查詢結(jié)果中返回左由于bit類型不允許為NULL,就以0值填充。格式:SELECT 列名列表 FROM 表名1 AS A LEFT OUTER JOIN 表
60、名2 AS B ON A.列名=B.列名(2)(2)右外聯(lián)接:右外聯(lián)接: 和左外連接類似,右外連接是將左表中的所有記錄分別與右表中的每條記錄進(jìn)行組合,結(jié)果集中除返回內(nèi)部連接的記錄以外,還在查詢結(jié)果中返回右表中不符合條件的記錄,并在左表的相應(yīng)列中填上NULL,由于bit類型不允許為NULL,就以0值填充。 格式:SELECT 列名列表 FROM 表名1 AS A RIGHT OUTER JOIN 表名2 AS B ON A.列名=B.列名 (3)(3)全外聯(lián)接:全外聯(lián)接: 全外聯(lián)接是將左表中的所有記錄分別與右表中的每條記錄進(jìn)行組合,結(jié)果集中除返回內(nèi)部連接的記錄以外,還在查詢結(jié)果中返回兩個(gè)表中不符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園保健知識培訓(xùn)課件
- 金昌電梯裝修施工方案
- 干部法律知識培訓(xùn)課件
- 水塔工程施工方案
- 兒童租賃門店合同范例
- 個(gè)人勞務(wù)派遣工合同范例
- 個(gè)人田地出租合同范例
- 人工代加工合同范例
- 品牌引導(dǎo)消費(fèi)者行為的技巧計(jì)劃
- 秘書工作任務(wù)安排計(jì)劃表
- 電影院管理與運(yùn)營服務(wù)流程手冊
- 8.2 二氧化碳的性質(zhì)和用途 同步練習(xí)
- GB/T 44536-2024CVD陶瓷涂層熱膨脹系數(shù)和殘余應(yīng)力試驗(yàn)方法
- 現(xiàn)代家政導(dǎo)論-課件 6.1.1認(rèn)識道德與職業(yè)道德
- 北京市東城區(qū)2022-2023學(xué)年高三上學(xué)期期末考試地理試卷 含答案
- 深圳益電通變頻器說明書TD90
- 人教版初中八年級物理上冊課件-第1章-機(jī)械運(yùn)動(dòng)
- 《中小型無人駕駛航空器垂直起降場技術(shù)要求》編制說明
- 國有企業(yè)內(nèi)部控制的問題與改進(jìn)措施
- 企業(yè)員工健康管理與關(guān)懷計(jì)劃實(shí)施方案
- 爭做“四有好老師”-當(dāng)好“四個(gè)引路人”
評論
0/150
提交評論