版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章數(shù)據(jù)庫(kù)查詢,第六章 數(shù)據(jù)庫(kù)的查詢,第6章數(shù)據(jù)庫(kù)查詢,本章重點(diǎn),SELECT語句的使用 使用SELECT語句進(jìn)行簡(jiǎn)單的查詢 使用SELECT語句進(jìn)行分組篩選和匯總計(jì)算 使用SELECT語句進(jìn)行連接查詢 使用SELECT語句進(jìn)行子查詢,第6章數(shù)據(jù)庫(kù)查詢,本章難點(diǎn),使用SELECT語句進(jìn)行連接查詢 使用SELECT語句進(jìn)行連子查詢 GROUP BY語句的使用 使用HAVING子句對(duì)分組數(shù)據(jù)的進(jìn)一步篩選,第6章數(shù)據(jù)庫(kù)查詢,6.1 SELECT語句概述,SELECT 從表中檢索數(shù)據(jù) 可以是簡(jiǎn)單或條件 SELECT 選擇表中所有列的數(shù)據(jù) SELECT * FROM table_name; 選擇表中指
2、定列的數(shù)據(jù) SELECT colname1, colname2, , colnamen FROM table_name;,第6章數(shù)據(jù)庫(kù)查詢,6.1.2 SELECT語句的執(zhí)行,使用企業(yè)管理器 使用查詢分析器,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,簡(jiǎn)單查詢是按照一定的查詢條件在單表上查詢數(shù)據(jù),并對(duì)查詢結(jié)果排序和保存 1、選擇表中指定的列 使用SELECT語句選擇一個(gè)表中的某些列進(jìn)行查詢,要在SELECT后寫出要查詢的字段名,并用逗號(hào)分隔,服務(wù)器將按照SELECT后給出的列的順序顯示滿足查詢條件的列。,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,例題6.1 查詢XS數(shù)據(jù)庫(kù)的XSDA表中所有學(xué)生的姓名、性別、
3、系名和總學(xué)分。 USE XS SELECT 姓名,性別,系名,總學(xué)分 FROM XSDA GO,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,例題6.2 查詢XSDA表中所有學(xué)生的所有列的信息。 USE XS SELECT * FROM XSDA GO,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,2、指定列的別名(修改查詢結(jié)果中的列標(biāo)題) 當(dāng)希望查詢結(jié)果中的某些列不顯示表結(jié)構(gòu)中規(guī)定的列標(biāo)題,而使用用戶自己另外選擇的列標(biāo)題時(shí),可以在列名之后用AS子句更改查詢結(jié)果中列標(biāo)題名。,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,例題6.3 查詢XSDA表中所有學(xué)生的學(xué)號(hào)、姓名、查詢結(jié)果中要求各列的標(biāo)題分別指定為number和nam
4、e. 1、 別名 別名 SELECT 學(xué)號(hào) AS number,姓名 AS name FROM XSDA 2、 SELECT 學(xué)號(hào) number,姓名 name FROM XSDA 別名 別名 3、 SELECT number=學(xué)號(hào),name=姓名 FROM XSDA GO,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,2、修改查詢結(jié)果中的列標(biāo)題 注意:當(dāng)自定義的列標(biāo)題中含有空格時(shí),必須使用單引號(hào)將標(biāo)題括起來。例如: USE XS SELECT student number=學(xué)號(hào),姓名 AS student name FROM XSDA GO,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,3、查詢導(dǎo)出列(計(jì)算列值
5、) Select子句中的列表達(dá)式不僅可以是表中的屬性列,也可以是通過計(jì)算得到的列,稱為導(dǎo)出列。一般情況下,導(dǎo)出列是通過運(yùn)算符和函數(shù)得到的表達(dá)式 例題6.4 假設(shè)XSCJ表中所有學(xué)生的成績(jī)均為期未考試成績(jī),計(jì)算總成績(jī)時(shí),只占80%,要求按照公式:期未成績(jī)成績(jī)0.8 USE XS SELECT 學(xué)號(hào),課程編號(hào),期未成績(jī)成績(jī)0.8 FROM XSCJ GO,第6章數(shù)據(jù)庫(kù)查詢,6.2 簡(jiǎn)單查詢,4.消除結(jié)果集中的重復(fù)行 對(duì)表只選擇某些列時(shí),可能會(huì)出現(xiàn)重復(fù)行,可以使用DISTINCT關(guān)鍵字消除結(jié)果集中的重復(fù)行。,第6章數(shù)據(jù)庫(kù)查詢,DISTINCT 子句,查找 employeestatistic 表中職位
6、的唯一性列表 SELECT DISTINCT position FROM employeestatistics 結(jié)果將顯示為 position - Manager Staff Entry-level,第6章數(shù)據(jù)庫(kù)查詢,DISTINCT 子句,與DISTINCT相反,當(dāng)使用關(guān)鍵字ALL時(shí),將保留結(jié)果集中的所有行。當(dāng)SELECT語句中省略ALL與DISTINCT時(shí),默認(rèn)值為ALL.,第6章數(shù)據(jù)庫(kù)查詢,DISTINCT 子句,例6.5 查詢XSDA表中所有學(xué)生的性別和系名。 USE XS SELECT ALL 性別,系名 FROM XSDA GO 或 USE XS SELECT 性別,系名 FROM
7、 XSDA GO,第6章數(shù)據(jù)庫(kù)查詢,5.使用TOP n指定返回查詢結(jié)果的前n行記錄 例6.6:select TOP 4 * FROM sales,6.2 簡(jiǎn)單查詢,第6章數(shù)據(jù)庫(kù)查詢,N是一個(gè)正整數(shù),表示返回查詢結(jié)果集的前N行。若帶PERCENT關(guān)鍵字,則表示返回結(jié)果集的前n%行 TOP N PERCENT 例題6.7 查詢XSCJ表中所有學(xué)生的學(xué)號(hào)、課程編號(hào)和成績(jī),只返回結(jié)果集的前10%行。 USE XS SELECT TOP 10 PERCENT 學(xué)號(hào),課程編號(hào),成績(jī) FROM XSCJ GO,6.2 簡(jiǎn)單查詢,第6章數(shù)據(jù)庫(kù)查詢,使用 WHERE 子句來指定條件 SELECT 語句,限制返回
8、的數(shù)據(jù)行 WHERE子句用于指定搜索條件,過濾不符合查詢條件的數(shù)據(jù)記錄,使用比較靈活而且復(fù)雜。可以使用的條件包括比較運(yùn)算,邏輯運(yùn)算,范圍,模糊匹配以及未知值等,6.2.2 WHERE子句,第6章數(shù)據(jù)庫(kù)查詢,比較表達(dá)式作查詢條件,運(yùn)算符意義 =等于 大于 =大于或等于 或 !=不等于,使用比較運(yùn)算符可以讓表中的值與指定值或表達(dá)式作比較,第6章數(shù)據(jù)庫(kù)查詢,比較表達(dá)式作查詢條件的示例,1、SELECT employeeidno FROM employeestatistics WHERE salary = 50000; 2、WHERE描述語句稱為條件。條件同樣可用于文本列。例如 SELECT empl
9、oyeeidno FROM employeestatistics WHERE position = Manager; 3、語句中出現(xiàn)的的任何文本都要用單引號(hào)括起來。注意WHERE子句中Manager的值是區(qū)分大小寫的,需要和在表中存儲(chǔ)的方式相匹配,第6章數(shù)據(jù)庫(kù)查詢,邏輯表達(dá)式作查詢條件,邏輯運(yùn)算符優(yōu)先順序 NOT AND OR,第6章數(shù)據(jù)庫(kù)查詢,邏輯運(yùn)算符,AND 運(yùn)算符 連接兩個(gè)或多個(gè)條件,顯示滿足所有條件的所有行 SELECT employeeidno FROM employeestatistics WHERE salary 40000 AND position = Staff OR 運(yùn)算
10、符 連接兩個(gè)或多個(gè)條件,顯示至少滿足一個(gè)條件的所有行 SELECT employeeidno FROM employeestatistics WHERE salary 40000 OR benefits 10000,第6章數(shù)據(jù)庫(kù)查詢,模式匹配,LIKE謂詞用于指出一個(gè)字符串是否與指定的字符串相匹配。 在實(shí)際應(yīng)用中,用戶不是總能夠給出精確的查詢條件。因此,經(jīng)常需要根據(jù)一些不確切的線索來搜索信息,這就是模糊查詢。 LIKE進(jìn)行模式匹配時(shí),如果與通配符配合使用,即可進(jìn)行模糊查詢。SQL Server提供了以下四種通配符供用戶靈活實(shí)現(xiàn)復(fù)雜的查詢條件,通配符表如6-2所示。,第6章數(shù)據(jù)庫(kù)查詢,模式匹配,
11、表6-2 通配符列表,第6章數(shù)據(jù)庫(kù)查詢,模式匹配,例6.8 查詢XSDA表中姓“王”或“李”并且單名的學(xué)生情況。 USE XS SELECT * FROM XSDA WHERE 姓名 LIKE 王李_ GO,第6章數(shù)據(jù)庫(kù)查詢,模式匹配,查找姓是以“S”開頭的所有雇員 SELECT employeeidno FROM employeeaddress WHERE lastname LIKE S% 1、百分號(hào)(%)用于表示零個(gè)或多個(gè)字符。上述示例使用“S%” ,指定了任何以“S”開頭,后面有零個(gè)或多個(gè)字符的姓。 2、要查詢姓以“S”結(jié)尾的雇員,則使用“%S” 3、要查詢姓中包含了“S”的人,則,可以
12、使用“%S%” 4、要查詢姓的第三個(gè)字母是“S”的雇員,則使用“_S%”。 5、”_”表示一個(gè)未知字符,兩個(gè)“_”,第6章數(shù)據(jù)庫(kù)查詢,范圍比較,用于范圍比較的關(guān)鍵字有: BETWEEN和IN BETWEEN運(yùn)算符查找給定范圍內(nèi)的值 找出特定薪水范圍($30000 到 $50000)內(nèi)的所有雇員 SELECT employeeidno FROM employeestatistics WHERE salary BETWEEN 30000 AND 50000,第6章數(shù)據(jù)庫(kù)查詢,范圍比較,使用IN關(guān)鍵字可以指定一個(gè)值表,值表中列出所有可能的值,當(dāng)與值表中任意一個(gè)匹配時(shí),返回true,否則false 查
13、詢是經(jīng)理或職員的所有雇員的SQL語句 SELECT employeeidno FROM employeestatistics WHERE position =Manager OR position= Staff 該查詢也可以用 IN 運(yùn)算符來寫 SELECT employeeidno FROM employeestatistics WHERE position IN (Manager, Staff) 將作為比較的一組值在IN運(yùn)算符后面用括號(hào)括起來,并且值之間用逗號(hào)分隔,第6章數(shù)據(jù)庫(kù)查詢,空值比較,當(dāng)需要判定一個(gè)表達(dá)式的值是否為空值,使用IS NULL關(guān)鍵字,格式為: Expression IS
14、 NOT NULL 說明:當(dāng)不使用NOT 時(shí),若表達(dá)式EXPRESSION的值為空值,返回TRUE,否則返回FALSE:當(dāng)使用NOT時(shí),結(jié)果剛好相反。 例6.9 查詢XSDA表中沒有備注的學(xué)生情況。 USE XS SELECT * FROM XSDA WHERE 備注 IS NULL GO,第6章數(shù)據(jù)庫(kù)查詢,ORDER BY子句,在應(yīng)用中經(jīng)常要對(duì)查詢的結(jié)果排序輸出,例如將學(xué)生成績(jī)由高到低排序輸出。在SELECT語句中,使用ORDER BY子句對(duì)查詢結(jié)果進(jìn)行排序。 關(guān)鍵字ASC表示升序排列,DESC表示降序排列,系統(tǒng)默認(rèn)值為ASC. 例6.10 將XSDA表中所有“管理系”學(xué)生按年齡從小到大的順
15、序排序輸出。 USE XS SELECT * FROM XSDA WHERE 系名管理 ORDER BY 出生日期 DESC GO,第6章數(shù)據(jù)庫(kù)查詢,6.3分類匯總,對(duì)表數(shù)據(jù)進(jìn)行檢索時(shí),經(jīng)常需要對(duì)查詢結(jié)果進(jìn)行分類、匯總或計(jì)算。例如,在學(xué)生數(shù)據(jù)庫(kù)中求某門課程的總成績(jī)、統(tǒng)計(jì)各分?jǐn)?shù)段的人數(shù)等。本節(jié)將介紹SELCET語句中用于數(shù)據(jù)統(tǒng)計(jì)的子句及函數(shù),第6章數(shù)據(jù)庫(kù)查詢,聚合函數(shù),聚合函數(shù)用于計(jì)算表中的數(shù)據(jù),只能在select語句中使用。返回單個(gè)計(jì)算結(jié)果 重要的聚合函數(shù)有 SUM、AVG、MAX、MIN 和 COUNT SUM()函數(shù)返回在滿足條件的行集合中給定列的值的總和 1、SELECT SUM(sal
16、ary) FROM employeestatistics,第6章數(shù)據(jù)庫(kù)查詢,聚合函數(shù),AVG()函數(shù)返回在滿足條件的行集合中給定列的值的平均值 2、SELECT AVG(salary) FROM employeestatistics MIN()函數(shù)返回在滿足條件的行集合中給定列的最小值 3、SELECT MIN(benefits) FROM employeestatistics WHERE position = Manager; MAX()函數(shù)返回在滿足條件的行集合中給定列的最大值 4、SELECT MAX(SALARY) FROM employeestatistics,第6章數(shù)據(jù)庫(kù)查詢,聚合
17、函數(shù) COUNT,SELECT COUNT(*) FROM employeestatistics WHERE position = Staff; COUNT 函數(shù)統(tǒng)計(jì)職位為“Staff” 的雇員的數(shù)目 COUNT函數(shù)把*作為列名,*表示表中的所有列。實(shí)際上COUNT是統(tǒng)計(jì)滿足條件的所有行的數(shù)目 * 只可用于 COUNT 函數(shù),而不能用于其它聚合函數(shù) Count(字段)表示統(tǒng)計(jì)表中這個(gè)字段的所有行數(shù),count(*)表示統(tǒng)計(jì)整張表的所有行數(shù),第6章數(shù)據(jù)庫(kù)查詢,分組篩選,分組是按照某一列數(shù)據(jù)的值或某個(gè)列組合的值將查詢出的行分成若干組,每組在指定列或列組合上具有相同的值。分組可通過使用GROUP B
18、Y子句來實(shí)現(xiàn)。 簡(jiǎn)單分組 例6.11:求XSDA表中男女生人數(shù)。 USE XS SELECT 性別,COUNT(*) AS 人數(shù) FROM XSDA GROUP BY 性別 GO,第6章數(shù)據(jù)庫(kù)查詢,分組篩選,GROUP BY后面的字段是分組的依據(jù) GROUP BY是配合聚合函數(shù)一塊使用的 使用了group by的select語句中出現(xiàn)的字段只能是聚合函數(shù)或group by后面的字段名 例如:SELECT buyerid, COUNT(item) AS items FROM toys GROUP BY buyerid 一般group by后面的字段都應(yīng)該出現(xiàn)在SELECT 增強(qiáng)查詢結(jié)果的可讀性,
19、第6章數(shù)據(jù)庫(kù)查詢,GROUP BY 子句,SELECT 語句的輸出需要基于某個(gè)屬性值,對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行邏輯分組 例6.12:找出每個(gè)購(gòu)買者購(gòu)買的玩具數(shù)目 SELECT buyerid, COUNT(item) AS items FROM toys GROUP BY buyerid 按購(gòu)買者進(jìn)行邏輯分組,在每一組的數(shù)據(jù)上,應(yīng)用COUNT函數(shù)以統(tǒng)計(jì)每一組的商品總數(shù),第6章數(shù)據(jù)庫(kù)查詢,分組篩選,例6.13 求XSDA表中各系的男、女生各自的總學(xué)分的平均值。 USE XS SELECT 系名,性別,AVG(總學(xué)分)AS 總學(xué)分的平均值。 FROM XSDA GROUP BY 系名,性別 GO,第6章數(shù)據(jù)
20、庫(kù)查詢,分組篩選,使用HAVING篩選結(jié)果 使用GROUP BY子句和聚合函數(shù)對(duì)數(shù)據(jù)進(jìn)行分組后,還可以使用HAVING子句是對(duì)分組后的數(shù)據(jù)進(jìn)一步篩選。 注意:1、如果語句中出現(xiàn)了HAVING子句,那么一定會(huì)出現(xiàn)group by, HAVING子句不能在沒有g(shù)roup by的情況下單獨(dú)出現(xiàn) 2、但是group by可以沒有having子句單獨(dú)存在,第6章數(shù)據(jù)庫(kù)查詢,分組篩選,例:6.14 查找學(xué)生檔案表中平均成績(jī)?cè)?5分以上的學(xué)生的學(xué)號(hào)和平均分。 select 姓名,avg(成績(jī)) from 學(xué)生檔案 group by 姓名 having avg(成績(jī))=75,第6章數(shù)據(jù)庫(kù)查詢,HAVING 子
21、句,如果要查詢購(gòu)買的商品超過兩件的購(gòu)買者購(gòu)買的商品數(shù)目,必須引入COUNT(item)2 SELECT buyerid , COUNT(item) AS items FROM toys GROUP BY buyerid HAVING COUNT(item) 2,第6章數(shù)據(jù)庫(kù)查詢,分組篩選,注意在SELECT語句中,當(dāng)WHERE、GROUP BY與HAVING子名同時(shí)被使用時(shí),要注意它們的作用和執(zhí)行順序:WHERE用于篩選由FROM指定的數(shù)據(jù)對(duì)象,即從FROM指定的基表或視圖中檢索滿足條件的記錄;GROUP BY 用于WHERE的篩選結(jié)果進(jìn)行分組;HAVING則是對(duì)使用GROUP BY分組以后的
22、數(shù)據(jù)進(jìn)行過濾。,第6章數(shù)據(jù)庫(kù)查詢,分組篩選,例6.15 查找選修課超過3門,并且成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)。 USE XS SELECT 學(xué)號(hào) FROM XSCJ WHERE 成績(jī)90 GROUP BY 學(xué)號(hào) HAVING COUNT( * )3 GO,注: 1、goup by 是對(duì)where條件篩選后的結(jié)果進(jìn)行分組,所以group by放在where后面 2、having是對(duì)分組后的結(jié)果進(jìn)行篩選,所以having 出現(xiàn)在group by后面,第6章數(shù)據(jù)庫(kù)查詢,計(jì)算與匯總,計(jì)算與匯總是生成合計(jì)作為附加的匯總行出現(xiàn)在結(jié)果集的最后。 例6.16 查找信息系所有男生的學(xué)號(hào)、姓名、性別和系名,并產(chǎn)生
23、一個(gè)學(xué)生總?cè)藬?shù)行。 USE XS SELECT 學(xué)號(hào),姓名,性別,系名 FROM XSDA WHERE 系名=信息 AND 性別1 COMPUTE CONUNT(學(xué)號(hào)),第6章數(shù)據(jù)庫(kù)查詢,計(jì)算與匯總,例6.17 將學(xué)生按系名排序,并匯總各系的人數(shù)和總學(xué)分的平均值。 USE XS SELECT 學(xué)號(hào),姓名,系名,總學(xué)分 FROM XSDA ORDER BY 系名 COMPUTE COUNT(學(xué)號(hào)), AVG(總學(xué)分) BY 系名 GO,第6章數(shù)據(jù)庫(kù)查詢,計(jì)算與匯總,注意 COMPUTE或COMPUTE BY子句中的表達(dá)式,必須出現(xiàn)在選擇列表中,并且必須將其指定為與選擇列表中的某個(gè)表達(dá)式完全一樣,
24、不能使用在選擇列表中指定的列的別名。 COMPUTE或COMPUTE BY子句中,不能指定為ntext、text、image數(shù)據(jù)類型。,第6章數(shù)據(jù)庫(kù)查詢,計(jì)算與匯總,如果使用COMPUTE BY,則必須也使用ORDER BY子句。表達(dá)式必須與在ORDER BY后列出的子句相同或是其子集,并且必須按相同的序列。例如,如果ORDER BY子句是ORDER BY a,b,c ,則COMPUTE子句可以是下面的任意一個(gè)(或全部); COMPUTE BY a,b,c COMPUTE BY a,b COMPUTE BY a 在SELECT INTO 語句中不能使用COMPUTE。因此,任何由COMPUTE
25、生成的計(jì)算結(jié)果不出現(xiàn)在用SELECT INTO語句創(chuàng)建的新表內(nèi),第6章數(shù)據(jù)庫(kù)查詢,連接查詢,連接查詢是關(guān)系數(shù)據(jù)庫(kù)中最主要的查詢方式,連接查詢的目的是通過加載連接字段條件將多個(gè)表連接起來,以便從多個(gè)表中檢索用戶所需要的數(shù)據(jù)。 在T-SQL語句中,連接查詢有兩個(gè)大類表示形式,一類是符合SQL標(biāo)準(zhǔn)連接謂詞的表示形式,另一類是T-SQL擴(kuò)展使用的關(guān)鍵字JOIN的表示形式。,第6章數(shù)據(jù)庫(kù)查詢,連接謂詞,可以在SELCET語句的WHERE子句中使用比較運(yùn)算符給出連接條件對(duì)表進(jìn)行連接,這種表示形式被稱為連接謂詞表示形式。 例6.18 查找XS數(shù)據(jù)庫(kù)中每個(gè)學(xué)生的情況以及選修的課程情況。 SELECT 學(xué)生檔案
26、.*,學(xué)生成績(jī).* FROM 學(xué)生檔案, 學(xué)生成績(jī) WHERE 學(xué)生檔案.學(xué)號(hào)=學(xué)生成績(jī).學(xué)號(hào),第6章數(shù)據(jù)庫(kù)查詢,連接謂詞,SELECT 學(xué)生成績(jī).學(xué)號(hào),姓名,分?jǐn)?shù) FROM 學(xué)生檔案, 學(xué)生成績(jī) WHERE 學(xué)生檔案.學(xué)號(hào)=學(xué)生成績(jī).學(xué)號(hào),第6章數(shù)據(jù)庫(kù)查詢,連接謂詞,注意:連接謂詞中的兩個(gè)列(即字段)稱為連接字段,他們必須是可比的。例如,本例中連接謂詞中的兩個(gè)字段分別是XSDA表和XSCJ表中的學(xué)號(hào)字段。 連接謂詞中的比較運(yùn)算符可以是“”、“=”、“!=”、“”、“!”,當(dāng)比較運(yùn)算符是“=”時(shí),就是等值連接。若在目標(biāo)列中去除相同的字段名,則為自然連接。,第6章數(shù)據(jù)庫(kù)查詢,連接謂詞,例6.19
27、 對(duì)例6.28進(jìn)行自然連接查詢 USE XS SELECT XSDA.*, XSCJ.課程編號(hào),XSCJ.成績(jī) FROM XSDA,XSCJ WHERE XSDA.學(xué)號(hào)=XSCJ.學(xué)號(hào) GO,第6章數(shù)據(jù)庫(kù)查詢,連接謂詞,例6.20 查找選修軟件工程課程并且成績(jī)優(yōu)秀的學(xué)生的姓名及成績(jī)。 SELECT 姓名,分?jǐn)?shù) FROM 學(xué)生檔案,學(xué)生成績(jī) WHERE 學(xué)生檔案.學(xué)號(hào)=學(xué)生成績(jī).學(xué)號(hào) AND 課程=軟件工程 AND 分?jǐn)?shù)=90,第6章數(shù)據(jù)庫(kù)查詢,連接謂詞,例6.21 查找選修了“計(jì)算機(jī)文化基礎(chǔ)”課程并且成績(jī)優(yōu)秀的學(xué)生的學(xué)號(hào)、姓名、課程名稱及成績(jī)。 USE XS SELECT XSDA.學(xué)號(hào),姓名
28、,課程名稱,成績(jī) FROM XSDA,KCXX,XSCJ WHERE XSDA,學(xué)號(hào)=XSCJ.學(xué)號(hào) AND KCXX.課程編號(hào)=XSCJ.課程編號(hào) AND 課程名稱=計(jì)算機(jī)文化基礎(chǔ) AND 成績(jī)=90 GO,第6章數(shù)據(jù)庫(kù)查詢,JOIN關(guān)鍵字指定的連接,T-SQL擴(kuò)展使用的關(guān)鍵字JOIN指定連接的表示方式,使表的連接運(yùn)算能力得到增強(qiáng)。以JOIN關(guān)鍵字指定的連接有以下3種類型。 內(nèi)連接 內(nèi)連接是按照ON所指定的連接條件合并兩個(gè)表,返回滿足條件的行。 例6.22 查找XS數(shù)據(jù)庫(kù)中每個(gè)學(xué)生的情況以及選修的課程情況。 USE XS SELECT * FROM XSDA INNER JOIN XSCJ
29、ON XSDA.學(xué)號(hào)=XSCJ.學(xué)號(hào) GO,第6章數(shù)據(jù)庫(kù)查詢,1、內(nèi)聯(lián)接,學(xué)生表:,班級(jí)表:,第6章數(shù)據(jù)庫(kù)查詢,1、內(nèi)聯(lián)接,SELECT 學(xué)號(hào), 學(xué)生姓名, 性別, 出生時(shí)間, 班級(jí)名稱, 所在學(xué)院, 專業(yè)名稱 FROM 學(xué)生,班級(jí) WHERE 學(xué)生.班級(jí)編號(hào)=班級(jí).班級(jí)編號(hào),第6章數(shù)據(jù)庫(kù)查詢,1、內(nèi)聯(lián)接,這是JOIN最常見用法,稱為內(nèi)連接,在運(yùn)行后,上面的語句會(huì)變成如下格式,系統(tǒng)會(huì)自動(dòng)增加部分語句: SELECT 學(xué)號(hào), 學(xué)生姓名, 性別, 出生時(shí)間, 班級(jí)名稱, 所在學(xué)院, 專業(yè)名稱 FROM 學(xué)生 INNER JOIN 班級(jí) ON 學(xué)生.班級(jí)編號(hào)=班級(jí).班級(jí)編號(hào) 內(nèi)連接是僅當(dāng)至少有一個(gè)同
30、屬于兩表的數(shù)據(jù)行符合連接條件時(shí),才返回?cái)?shù)據(jù)行.內(nèi)連接消除了與另一張表中的任何不匹配的行,第6章數(shù)據(jù)庫(kù)查詢,2、左外連接,左外連接(LEFT OUTER JOIN):返回參與聯(lián)接查詢的表中所有匹配的行和所有來自左表(第一張表)的不符合指定條件的行 左外連接的步驟: 1、取出第一張表和第二張表所有匹配的行 2、取出存在于第一張表中但與第二張表中的記錄沒有匹配關(guān)系的記錄,第二張表中沒有匹配的列用NULL填充(取出第一張表中剩下的所有記錄,第二張表的字段用NULL填充),第6章數(shù)據(jù)庫(kù)查詢,2、左外連接,第6章數(shù)據(jù)庫(kù)查詢,2、左外連接,ANSI語法實(shí)現(xiàn) SELECT 學(xué)生.學(xué)生姓名,學(xué) 生.性別,班級(jí).
31、班級(jí)名稱 FROM 學(xué)生 where學(xué)生.班級(jí)編號(hào)*=班級(jí).班級(jí)編號(hào),第6章數(shù)據(jù)庫(kù)查詢,2、左外連接,Program Student,第6章數(shù)據(jù)庫(kù)查詢,2、左外連接,用SQL語句說明Left Outer JOIN SELECT gram_name, program.course_no, program.grade_points, student.student_name, student.course_no FROM program left outer join student on program.course_no=student.course_no,第6章數(shù)據(jù)庫(kù)查
32、詢,3、右外連接,(RIGHT OUTER JOIN):返回參與聯(lián)接查詢的表中所有匹配的行和所有來自右表(第二張表)的不符合指定條件的行 右外連接的步驟: 1、取出第一張表和第二張表所有匹配的行 2、取出存在于第二張表中但與第一張表中的記錄沒有匹配關(guān)系的記錄,第一張表中沒有匹配的列用NULL填充(取出第二張表中剩下的所有記錄,第一張表的字段用NULL填充),第6章數(shù)據(jù)庫(kù)查詢,3、右外連接,第6章數(shù)據(jù)庫(kù)查詢,3、右外連接,第6章數(shù)據(jù)庫(kù)查詢,3、右外連接,Program Student,第6章數(shù)據(jù)庫(kù)查詢,3、右外連接,用SQL語句說明Right Outer JOIN SELECT program.
33、program_name, program.course_no, program.grade_points, student.student_name, student.course_no FROM program right outer join student on program.course_no=student.course_no,第6章數(shù)據(jù)庫(kù)查詢,4、完全外連接,根據(jù) JOIN 條件中指定的基于值的等價(jià)條件,將第一張表中的記錄與第二張表中的記錄進(jìn)行映射 這個(gè) JOIN 是 Left Outer JOIN 和 Right Outer JOIN 的組合 包括不滿足基于等價(jià)條件的所有記錄
34、,第6章數(shù)據(jù)庫(kù)查詢,4、完全外連接,第6章數(shù)據(jù)庫(kù)查詢,4、完全外連接,第6章數(shù)據(jù)庫(kù)查詢,4、完全外連接,staff_name,第6章數(shù)據(jù)庫(kù)查詢,4、完全外連接,用SQL語句說明Left Outer JOIN SELECT gram_name, program.course_no, program.grade_points, student.student_name, student.course_no FROM program full outer join student on program.course_no= student.course_no,第6章數(shù)據(jù)庫(kù)查詢,
35、交叉連接,交叉連接沒有ON子句,也不允許帶有WHERE子句,它返回查詢對(duì)象中所有行的笛卡爾積,查詢結(jié)果的數(shù)據(jù)行數(shù)為每個(gè)查詢對(duì)象所含數(shù)據(jù)行的乘積,第6章數(shù)據(jù)庫(kù)查詢,第6章數(shù)據(jù)庫(kù)查詢,自連接,連接操作不僅可以在不同的表上進(jìn)行,也可以在同一張表內(nèi)進(jìn)行自身連接,即將同一個(gè)表的不同行連接起來。自連接可以看作一張表的兩個(gè)副本之間的連接。若要在一個(gè)表中查找具有相同列值的行,則可以使用自連接,使用自連接時(shí)需要為表指定兩個(gè)別名,使之邏輯上成為兩張表。對(duì)所有列的引用均要用別名限定。,第6章數(shù)據(jù)庫(kù)查詢,自連接,例 6.23 在表中查找出與學(xué)號(hào)為09w1在同一個(gè)班的學(xué)生的姓名和學(xué)號(hào) SELECT XSDA1.姓名,X
36、SDA1.學(xué)號(hào) FROM 學(xué)生信息 AS XSDA1 JOIN 學(xué)生信息 AS XSDA2 ON XSDA1.班級(jí)號(hào)=XSDA2.班級(jí)號(hào) WHERE XSDA2.學(xué)號(hào)=09w1 and XSDA1.學(xué)號(hào)XSDA2.學(xué)號(hào),第6章數(shù)據(jù)庫(kù)查詢,6.5嵌套查詢(子查詢),嵌套查詢概述 一個(gè)SELECT-FROM-WHERE語句稱為一個(gè)查詢塊 將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢,第6章數(shù)據(jù)庫(kù)查詢,SELECT 姓名外層查詢/父查詢 FROM 學(xué)生檔案 WHERE 學(xué)號(hào) IN (SELECT 學(xué)號(hào) 內(nèi)層查詢/子查詢 FROM 班級(jí)信息 WHERE 班
37、級(jí)號(hào)= w2 );,6.5嵌套查詢(子查詢),第6章數(shù)據(jù)庫(kù)查詢,6.5嵌套查詢,不相關(guān)子查詢 子查詢的查詢條件不依賴于父查詢 相關(guān)子查詢 子查詢的查詢條件依賴于父查詢,分類:,第6章數(shù)據(jù)庫(kù)查詢,不相關(guān)子查詢 是由里向外逐層處理。即每個(gè)子查詢?cè)?上一級(jí)查詢處理之前求解,子查詢的結(jié)果 用于建立其父查詢的查找條件。,6.5嵌套查詢,第6章數(shù)據(jù)庫(kù)查詢,子查詢 1、帶有IN運(yùn)算符的子查詢 操作符IN用于WHERE子句中時(shí),通常用來確定某個(gè)屬性列的值是否包含在一個(gè)表達(dá)式或者常量的集合中。同樣,操作符IN也可以用于子查詢,用來確定某個(gè)列值是否在內(nèi)部查詢的結(jié)果集中。 在帶有IN運(yùn)算符的子查詢中,子查詢的結(jié)果是
38、一個(gè)結(jié)果集。,6.5嵌套查詢,第6章數(shù)據(jù)庫(kù)查詢,子查詢 1、帶有IN運(yùn)算符的子查詢 在執(zhí)行包含子查詢的select語句時(shí),系統(tǒng)先執(zhí)行子查詢,產(chǎn)生一個(gè)結(jié)果表,在執(zhí)行外層查詢。 例6.24:查找選修了軟件工程課程的學(xué)生情況。 此查詢要求可以分步來完成 確定選修了軟件工程課程學(xué)生的學(xué)號(hào) SELECT 學(xué)號(hào) FROM 學(xué)生成績(jī) where 課程=軟件工程,6.5.1帶有IN謂詞的子查詢,運(yùn)行結(jié)果:,第6章數(shù)據(jù)庫(kù)查詢,SELECT * FROM 學(xué)生檔案 WHERE 學(xué)號(hào) IN (SELECT 學(xué)號(hào) FROM 學(xué) 生成績(jī) where 課程=軟件 工程),6.5.1帶有IN謂詞的子查詢,SELECT *
39、FROM 學(xué)生檔案 WHERE 學(xué)號(hào) IN ( 1, 4),顯示學(xué)生的詳細(xì)信息,將第一步查詢嵌入到第二步查詢的條件中,等價(jià)于,第6章數(shù)據(jù)庫(kù)查詢,select * from xsda where 學(xué)號(hào) not in (select 學(xué)號(hào) FROM xscj),布置學(xué)生思考:查詢未選修任何課程的學(xué)生情況,6.5.1帶有IN謂詞的子查詢,P275 4.如何按照上例寫代碼。,第6章數(shù)據(jù)庫(kù)查詢,例6.25 查詢選修了課程名為“數(shù)據(jù)結(jié)構(gòu)”的學(xué)生學(xué)號(hào)和姓名 SELECT 學(xué)號(hào),姓名 最后在xsda關(guān)系中 FROM xsda 取出學(xué)號(hào)和姓名 WHERE 學(xué)號(hào) IN (SELECT 學(xué)號(hào) 然后在xscj關(guān)系中找
40、出選 FROM xscj 修了104號(hào)課程的學(xué)生學(xué)號(hào) WHERE 課程編號(hào) IN (SELECT 課程編號(hào) 首先在kcxx關(guān)系中找出“數(shù)據(jù)結(jié)構(gòu) FROM kcxx”的課程號(hào),結(jié)果為104 WHERE 課程名稱= 數(shù)據(jù)結(jié)構(gòu)),6.5.1帶有IN謂詞的子查詢,第6章數(shù)據(jù)庫(kù)查詢,帶有比較運(yùn)算符的子查詢 在帶有比較運(yùn)算符的子查詢中,子查詢的結(jié)果是一個(gè)單值。父查詢通過比較運(yùn)算符將“父查詢”中的表達(dá)式與子查詢結(jié)果(單值)進(jìn)行比較,如果相等運(yùn)算的結(jié)果為TRUE,否則返回FALSE。 常用的比較運(yùn)算符有: ,= , ,!= ,! ,! 。,6.5.2比較子查詢,第6章數(shù)據(jù)庫(kù)查詢,列出選修了104號(hào)課程,且成績(jī)高于該課程平均分的學(xué)生的學(xué)號(hào)。,6.5.2比較子查詢,select 學(xué)號(hào) FROM xscj where 課程編號(hào)=104 and 成績(jī)(select avg(成績(jī)) from xscj where 課程編號(hào)=104),列出選修了104號(hào)課程,且成績(jī)高于該課程 平均分的學(xué)生信息。?,第6章數(shù)據(jù)庫(kù)查詢,謂詞語義 ANY:任意一個(gè)值 AL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年民和平民醫(yī)院招聘考試備考試題及答案解析
- 2026四川成都市勘察測(cè)繪研究院考核招聘2人考試參考題庫(kù)及答案解析
- 2026上半年云南事業(yè)單位聯(lián)考云南大理大學(xué)招聘考試備考試題及答案解析
- 2026山東濰坊市昌樂縣事業(yè)單位招聘30人考試參考試題及答案解析
- 2026年生物科技服務(wù)公司倉(cāng)儲(chǔ)管理制度
- 蘭山區(qū)培訓(xùn)教學(xué)課件
- 有機(jī)磷農(nóng)藥中毒護(hù)理查房課件
- 籃球架培訓(xùn)課件
- 籃球教練培訓(xùn)
- 早產(chǎn)兒培訓(xùn)課件
- 第三次全國(guó)國(guó)土調(diào)查工作分類與三大類對(duì)照表
- 農(nóng)村集貿(mào)市場(chǎng)改造項(xiàng)目實(shí)施方案
- 消防設(shè)施檢查記錄表
- 印刷操作指導(dǎo)書
- 酒店協(xié)議價(jià)合同
- 哈爾濱工業(yè)大學(xué)簡(jiǎn)介宣傳介紹
- 中國(guó)兒童錯(cuò)頜畸形早期矯治專家共識(shí)
- GB/T 5147-2003漁具分類、命名及代號(hào)
- GB/T 2703-2017鞋類術(shù)語
- GB/T 10125-2021人造氣氛腐蝕試驗(yàn)鹽霧試驗(yàn)
- 綜合醫(yī)院心身疾病診治課件
評(píng)論
0/150
提交評(píng)論