項目四公司管理數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)查詢課件_第1頁
項目四公司管理數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)查詢課件_第2頁
項目四公司管理數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)查詢課件_第3頁
項目四公司管理數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)查詢課件_第4頁
項目四公司管理數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)查詢課件_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、項目四 公司管理數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)查詢 終極目標(biāo):能根據(jù)需要靈活、快速地查詢公司管理系統(tǒng)數(shù)據(jù)庫的數(shù)據(jù) 一、教學(xué)目標(biāo): 1、會在一個數(shù)據(jù)表中實現(xiàn)數(shù)據(jù)的簡單查詢 2、會同時在多個數(shù)據(jù)表中實現(xiàn)數(shù)據(jù)的復(fù)合查詢 3、會實現(xiàn)分組查詢 4、會對查詢結(jié)果集排序 5、會利用庫函數(shù)進(jìn)行數(shù)據(jù)統(tǒng)計二、工作任務(wù) 根據(jù)需要靈活快速地查詢公司管理數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)模塊1 公司管理數(shù)據(jù)庫系統(tǒng)的簡單查詢一、教學(xué)目標(biāo): 1、 準(zhǔn)確理解TRANSACT-SQL查詢語句的基本結(jié)構(gòu) 2、 能根據(jù)需要靈活使用查詢語句的各子句二、工作任務(wù) 公司對所有招收的雇員的材料都存儲在公司管理數(shù)據(jù)庫系統(tǒng)COMPANYINFO的employee表中,該表中

2、包含了雇員的姓名、性別、出生年月、雇傭日期、特長和薪水等信息。現(xiàn)編寫查詢語句,按要求得到相應(yīng)的結(jié)果。SELECT語句 使用數(shù)據(jù)庫和數(shù)據(jù)表的主要目的是存儲數(shù)據(jù),以便在需要時進(jìn)行檢索、統(tǒng)計或組織輸出,通過T-SQL的查詢可以從表或視圖中迅速、方便地檢索數(shù)據(jù)。在眾多的T-SQL語句中,SELECT語句是使用頻率最高的一個。 查詢的最基本方式是使用SELECT語句,按照用戶給定的條件從SQL SERVER數(shù)據(jù)庫中取出數(shù)據(jù),并將數(shù)據(jù)通過一個或多個結(jié)果集返回給用戶。 一、SELECT格式 從數(shù)據(jù)庫中檢索行,并允許從一個或多個表中選擇一個或多個行或列。SELECT ALL| DISTINCT , INTO

3、FROM , WHERE GROUP BY HAVING ORDER BY ASC | DESC Select子句:指定由查詢返回的列 。Into子句:將檢索結(jié)果存儲到新表或視圖中。From子句:用于指定引用的列所在的表和視圖 。Where子句:指定用于限制返回的行的搜索條件。Group by子句:指定用來放置輸出行的組,并且如果 SELECT 子句 中包含聚合函數(shù),則計算每組的匯總值。 having子句:指定組或聚合的搜索條件。 HAVING 通常與 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行為與 WHERE 子句一樣。Order by子句:指定結(jié)

4、果集的排序。 1、子句的功能2、SELECT語句的執(zhí)行方式1)通過查詢設(shè)計器輔助生成和執(zhí)行select語句2)查詢分析器執(zhí)行select語句二、SELECT 子句功能: 指定由查詢返回的列。格式: SELECT ALL|DISTINCTTOP N PERCENT 列名1,列名2,列名N FROM 表名或視圖名 參數(shù)的含義:ALL:指定在結(jié)果集中可以顯示重復(fù)行。ALL 是默認(rèn)設(shè)置。DISTINCT:指定在結(jié)果集中只能顯示唯一行。即表示輸出無重復(fù)的所有記錄。TOP N PERCENT:指定只從查詢結(jié)果集中輸出前 N 行。如果還指定了 PERCENT,則只從結(jié)果集中輸出前百分之 N 行。1、查詢所有

5、的列 SELECT 子句中,在選擇列表處使用通配符“*”,表示選擇指定的表或視圖中所有的列。服務(wù)器會按用戶創(chuàng)建表格時聲明列的順序來顯示所有的列.語法 : SELECT * FROM 表名 【例1】從公司管理數(shù)據(jù)庫COMPANYINFO中的客戶表(customer)中檢索所有的客戶的公司名稱、聯(lián)系人姓名、聯(lián)系方式、地址和郵編。USE COMPANYINFOGOSELECT *FROM customerGO 2、查詢特定的列 【例2】 從公司管理數(shù)據(jù)庫(COMPANYINFO)中的客戶表(customer)中檢索所有的客戶的公司名稱、聯(lián)系人姓名、地址。USE COMPANYINFOGOSELECT

6、 公司名稱,聯(lián)系人姓名,地址FROM customerGO 【例3】 從公司管理數(shù)據(jù)庫(COMPANYINFO)中的雇員表(employee)中檢索所有的雇員的姓名和特長。USE COMPANYINFOGOSELECT 姓名,特長FROM employeeGO 3、指定特定列的列名(1)采用符合ANSI規(guī)則的標(biāo)準(zhǔn)方法,在列表達(dá)式后面給出列名?!纠?】查詢每個人的薪水降低30%信息。 USE COMPANYINFO GO SELECT 姓名, 薪水 原薪水 , 薪水-薪水*0.3 現(xiàn)薪水 FROM employee GO(2)用“=”來連接列表達(dá)式【例5】查詢每個人的薪水降低30%信息。USE

7、COMPANYINFOGOSELECT 姓名, 原薪水=薪水, 現(xiàn)薪水=薪水-薪水*0.3FROM employeeGO(3)用AS關(guān)鍵字來連接列表達(dá)式和指定的列名【例6】查詢每個人的薪水降低30%信息。USE COMPANYINFOGOSELECT 姓名, 薪水 as 原薪水 , 薪水-薪水*0.3 as 現(xiàn)薪水FROM employeeGO4使用TOP關(guān)鍵字 SQL Server 2000提供了TOP關(guān)鍵字,讓用戶指定返回前面一定數(shù)量的數(shù)據(jù)。 語法格式: SELECT TOP n | TOP n PERCENT 列名1,列名2,列名n FROM 表名其中:TOP n:表示返回最前面的n行,

8、n表示返回的行數(shù)。TOP n PERCENT:表示返回的前面的n%行。【例7】從northwind數(shù)據(jù)庫的customers表中返回前面10行數(shù)據(jù)。use northwindgoselect top 10 *from customersgo【例8】從northwind數(shù)據(jù)庫中的customers表中返回前10%的數(shù)據(jù)。use northwindgoselect top 10 percent *from customersgo三、 WHERE 字句 使用WHERE子句的目的是為了從表格的數(shù)據(jù)集中過濾出符合條件的行。 語法格式: SELECT 列名1 ,列名2, 列名n FROM 表名 WHERE

9、 條件常用查詢條件 查詢條件運算符號比較=、=、!=、!、!=3000GO2使用邏輯表達(dá)式 在T-SQL里的邏輯表達(dá)式共有3個。分別是:NOT:非,對表達(dá)式的否定。AND:與,連接多個條件,所有的條件都成立時為真。OR:或,連接多個條件,只要有一個條件成立就為真。 【例11】查詢所有在美國加利福尼亞州的出版社。use pubsgo select pub_id as 出版社代號, pub_name as 出版社名稱,city as 城市, state as 州, country as 國家from publisherswhere country=usa and state =cago查詢結(jié)果如下

10、:出版社代號 出版社名稱 城市 州 國家 - - - - - 1389 Algodata Infosystems Berkeley CA USA(所影響的行數(shù)為 1 行)3使用BETWEEN關(guān)鍵字 使用BETWEEN關(guān)鍵字可以更方便地限制查詢數(shù)據(jù)的范圍。語法格式為: 表達(dá)式 NOT BETWEEN 表達(dá)式1 AND 表達(dá)式2【例12】查詢COMPANYINFO數(shù)據(jù)庫的雇員表(employee)中,薪水在3000元至4000元的雇員的姓名和薪水。SELECT 姓名,薪水FROM employee WHERE 薪水 between 3000 and 4000【例13】查詢庫存量大于200和庫存量小

11、于100的產(chǎn)品名、庫存量和單價。SELECT 產(chǎn)品名 ,庫存量 ,單價 FROM productWHERE 庫存量 not between 200 and 100【例 14】 查詢價格在15和20美元之間的書的書號、種類和價格。use pubsgo select title_id as 書號,type as 種類 ,price as 原價from titleswhere price between $15 and $20go【例15】查詢書價大于20和書價小于15的書的代號、種類和價格。use pubsgo select title_id as 書號,type as 種類, price as

12、原價 from titleswhere price $20go查詢結(jié)果如下:書號種類原價- - - BU1111business11.9500BU2075business2.9900MC3021mod_cook2.9900PC1035popular_comp22.9500(所影響的行數(shù)為 11 行) 4使用IN關(guān)鍵字 同BETWEEN關(guān)鍵字一樣,IN的引入也是為了更方便地限制檢索數(shù)據(jù)的范圍,靈活使用IN關(guān)鍵字,可以用簡潔的語句實現(xiàn)結(jié)構(gòu)復(fù)雜的查詢。 語法格式為: 表達(dá)式 NOT IN (表達(dá)式1 , 表達(dá)式2 ,表達(dá)式n)【例16】查詢所有居住在KS、CA、MI或IN州的作家。use pubsg

13、oselect au_id,au_lname,au_fnamefrom authorswhere state IN (CA,KS,MI,IN)go 如果不使用IN關(guān)鍵字,這些語句可以使用下面的語句代替:use pubsgoselect au_id,au_lname,au_fnamefrom authorswhere state=CA or state=KS or state=MI or state=INgo【例17】查詢所有不在上述4個州居住的作家。use pubsgo select au_id,au_lname,au_fnamefrom authorswhere state not in (

14、CA, KS, MI, IN) go 與下面的語句等價:use pubsgoselect au_id,au_lname,au_fnamefrom authorswhere stateCA and stateKS and stateMIand stateINgo 5、通配符的使用 注意:所有通配符都只有在LIKE子句中才有意義,否則通配符會被當(dāng)作普通字符處理。符號含義%(百分號)表示從0N個任意字符_(下劃線)表示單個的任意字符 (封閉方括號)表示方括號里列出的任意一個字符任意一個沒有在方括號里列出的字符【例18】列出所有姓“章”的雇員的信息。 查詢語句如下: SELECT *FROM empl

15、oyeeWHERE 姓名 LIKE 章%【例19】查詢雇員表(employee)中所有姓名中含有“利”字的雇員。SELECT 雇員ID,姓名FROM employeeWHERE 姓名 like %利%GO【例20】查詢雇員表(employee)中所有雇員ID滿足前2個字符為“01”,第4個字符為“-”的雇員的姓名和出生年月。SELECT 雇員ID,姓名,出生年月FROM employeeWHERE 雇員id like 01_-%GO【例21】查詢所有au_id滿足前2個字符為“72”,第4個字符為“-”的作家的姓名和電話號碼。use pubsgoselect au_lname, au_fnam

16、e, phone, au_id from authorswhere au_id like 72_-%go查詢結(jié)果如下:au_lnameau_fnamephone au_id- - - - DeFranceMichel219 547-9982722-51-5454StringerDirk 415 843-2991724-08-9931MacFeather Stearns 415 354-7128724-80-9391(所影響的行數(shù)為 3 行)【例22】查詢所有au_id的第一個字符為5-9、第二個字符為1-4的作家的姓名和電話號碼。use pubs goselect au_lname,au_fn

17、ame, phone, au_idfrom authorswhere au_id like 5-91-4%go五、 from 子句 在每一條要從表或視圖中檢索數(shù)據(jù)的 SELCET 語句中,都需要使用 FROM 子句。用 FROM 子句可以: 列出選擇列表和 WHERE 子句中所引用的列所在的表和視圖??捎?AS 子句為表和視圖的名稱指定別名。FROM 子句可以指定:一個或多個表或視圖。 例: SELECT * FROM Shippers 兩個表或視圖之間的聯(lián)接: SELECT Cst.CustomerID, Cst.CompanyName, Cst.ContactName, Ord.Shipp

18、edDate, Ord.Freight FROM Northwind.dbo.Orders AS Ord JOIN Northwind.dbo.Customers AS Cst ON (Cst.CustomerID = Ord.CustomerID) 六、 ORDER BY子句 SELECT語句獲得的數(shù)據(jù)一般是沒有排序的。為了方便閱讀和使用,最好對查詢的結(jié)果進(jìn)行一次排序。SQL語言中,用于排序的是ORDER BY子句。 語法格式為: ORDER BY 表達(dá)式1 ASC | DESC ,表達(dá)式2 ASC | DESC,n 【例24】在公司管理數(shù)據(jù)庫(COMPANYINFO)中的訂單表(p_ord

19、er)中,查詢產(chǎn)品ID,數(shù)量和訂貨日期,并按的訂貨日期降序給產(chǎn)品排序。USE COMPANYINFOGO SELECT 產(chǎn)品ID,數(shù)量,訂貨日期FROM p_orderORDER BY 訂貨日期 descGO【例25】查詢pubs數(shù)據(jù)庫中的表stores中商店的名字,并按商店名的降序給商店排序。use pubsgoselect stor_namefrom storesorder by stor_name descgo【例26】查詢titles中各類書的銷售利潤和書號,并按照各種書的銷售利潤降序排列。use pubsgoselect title_id,profit=price*ytd_sales

20、from titlesorder by profit descgo查詢結(jié)果如下:title_idprofit - - PC1035201501.0000TC4203180397.2000PC888881900.0000BU103281859.0500BU783281859.0500PS333381399.2800(所影響的行數(shù)為 18 行) 【例27】查詢titles中各類書的書號、價格、年銷售量和銷售利潤,并用年銷售量和書價進(jìn)行升序排列。use pubsgoselect title_id,price,ytd_sales,profit=price*ytd_sales from titlesor

21、der by ytd_sales,price go七 GROUP BY子句 在大多數(shù)情況下,使用統(tǒng)計函數(shù)返回的是所有行數(shù)據(jù)的統(tǒng)計結(jié)果。如果需要按某一列數(shù)據(jù)的值進(jìn)行分類,在分類的基礎(chǔ)上再進(jìn)行查詢,就要使用GROUP BY子句了。 常用統(tǒng)計函數(shù) 為了有效的決心數(shù)據(jù)集分類匯總、求平均等統(tǒng)計,SQL Server2000提供了一系列統(tǒng)計函數(shù)?!纠?28】計算訂單表(p_order)中所有產(chǎn)品的已訂購總額:USE COMPANYINFOGOSELECT sum(數(shù)量) FROM p_order【例 29】 對訂單表(p_order)中按產(chǎn)品ID ,查詢每件產(chǎn)品的訂購總和USE COMPAMYINFOSE

22、LECT 產(chǎn)品ID , sum(數(shù)量) as 總數(shù)量FROM p_order GROUP BY 產(chǎn)品ID 1簡單分組【例 30】訂單表(p_order) 按產(chǎn)品ID的種類分類,求出各種類型產(chǎn)品的價格總和、平均價格以及各類產(chǎn)品的數(shù)量。USE COMPAMYINFO GO SELECT 產(chǎn)品ID, sum(單價) 價格總和, avg(單價) 平均單價, count(*)FROM p_orderGROUP BY 產(chǎn)品ID GO2、使用 GROUP BY 分組多行 GROUP BY 子句用來為結(jié)果集中的每一行產(chǎn)生聚合值。如果聚合函數(shù)沒有使用 GROUP BY 子句,則只為 SELECT 語句報告一個聚

23、合值。 當(dāng) SELECT 語句中包含 GROUP BY 關(guān)鍵字時,對可以在選擇列表中指定的項有一些限制。在該選擇列表中所允許的項目是: 分組列。 為分組列中的每個值只返回一個值的表達(dá)式,例如將列名作為其中一個參數(shù)的聚合函數(shù)。這些函數(shù)稱為矢量聚合。八、使用HAVING篩選結(jié)果 指定組或聚合的搜索條件。HAVING 通常與 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行為與 WHERE 子句一樣。 語法: HAVING 參數(shù) : 指定組或聚合應(yīng)滿足的搜索條件。當(dāng) HAVING 與 GROUP BY ALL 一起使用時,HAVING 子句替代 ALL。 在 H

24、AVING 子句中不能使用 text、image 和 ntext 數(shù)據(jù)類型?!纠?1】查詢所有價格超過10元的產(chǎn)品的種類和平均價格。 USE COMPANYINFO GO SELECT 類別ID , avg(單價) 平均價格 FROM Product WHERE 單價10 GROUP By 類別ID GO【例32】在所有價格超過10美元的書中,查詢所有平均價格超過18美元的書的種類和平均價格。use pubsgoselect type , avg(price) avg_pricefrom titleswhere price10group by typehaving avg(price)$18g

25、o查詢的結(jié)果是:Type avg_price- - mod_cook 19.9900popular_comp 21.4750(所影響的行數(shù)為 2 行) WHERE子句在求平均值之前從表中選擇所需要的行,HAVING子句在進(jìn)行統(tǒng)計計算后產(chǎn)生的結(jié)果中選擇所需要的行。 九、 COMPUTE子句 COMPUTE 子句可以用于SELECT 語句既查看明細(xì)行,又查看匯總行??梢杂嬎惴纸M的匯總值,也可以計算整個結(jié)果集的匯總值。 語法格式: COMPUTE 聚合函數(shù)名 (列名) , N BY expression , N 【例 33】語句使用簡單 COMPUTE 子句生成 titles 表中 price 及

26、advance 的求和總計:USE pubsGo SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) by type 【例 34】查找雇員表(empoyee)中各雇員的姓名、出生年月和特長,并產(chǎn)生一個雇員總?cè)藬?shù)行。USE COMPANYINFOGOSELECT 姓名,出生年月,特長FROM employeeOrder by 特長COMPUTE count(雇員) by 特長比較 COMPUTE 和 GROUP BYGROUP BY 生成單個結(jié)果集。每個組都有一個只包含分組依

27、據(jù)列和顯示該組子聚合的聚合函數(shù)的行。選擇列表只能包含分組依據(jù)列和聚合函數(shù)。COMPUTE 生成多個結(jié)果集。一類結(jié)果集包含每個組的明細(xì)行,其中包含選擇列表中的表達(dá)式。另一類結(jié)果集包含組的子聚合,或 SELECT 語句的總聚合。選擇列表可包含除分組依據(jù)列或聚合函數(shù)之外的其它表達(dá)式。聚合函數(shù)在 COMPUTE 子句中指定,而不是在選擇列表中。 模塊2 公司管理數(shù)據(jù)庫系統(tǒng)的多表查詢一、教學(xué)目標(biāo): 終極目標(biāo):使用聯(lián)接查詢和嵌套查詢的方法實現(xiàn)公司管理數(shù)據(jù)庫系統(tǒng)的多表查詢二、工作任務(wù) 公司對于產(chǎn)品訂單有關(guān)的數(shù)據(jù)保存在訂單表P-ORDER和,此表包含了客戶訂購產(chǎn)品有關(guān)的訂單ID、產(chǎn)品ID、數(shù)量、雇員ID、客戶

28、ID和訂貨日期。在產(chǎn)品表PRODUCT中包含了產(chǎn)品ID、產(chǎn)品名、類別ID、單價、庫存量。在顧客表CUSTOMER中包含了客戶ID、公司名稱、聯(lián)系人姓名、聯(lián)系方式和地址和郵編?,F(xiàn)編寫查詢語句,按下列要求查詢得到相應(yīng)的結(jié)果: 1、查詢訂貨公司的名稱,聯(lián)系人姓名、訂購產(chǎn)品名稱和數(shù)量 2、查詢訂購“蘋果汁”的顧客的公司名稱和聯(lián)系方法。 3、查詢客戶“通恒機(jī)械”下的訂單訂購的產(chǎn)品名和數(shù)量。 4、查詢產(chǎn)品“蘋果汁”所屬的類別和說明。 一、聯(lián)接( join) 通過聯(lián)接,可以根據(jù)各個表之間的邏輯關(guān)系從兩個或多個表中檢索數(shù)據(jù)。聯(lián)接表示應(yīng)如何使用一個表中的數(shù)據(jù)來選擇另一個表中的行。 聯(lián)接條件通過以下方法定義兩個表

29、在查詢中的關(guān)聯(lián)方式: 指定每個表中要用于聯(lián)接的列。典型的聯(lián)接條件在一個表中指定外鍵,在另一個表中指定與其關(guān)聯(lián)的鍵。指定比較各列的值時要使用的邏輯運算符(=、 等)。聯(lián)接類型 當(dāng)聯(lián)接表時,創(chuàng)建的聯(lián)接類型影響出現(xiàn)在結(jié)果集內(nèi)的行。 聯(lián)接類型: 內(nèi)聯(lián)接 外聯(lián)接 左向外聯(lián)接 右向外聯(lián)接 完整外部聯(lián)接 交叉聯(lián)接 聯(lián)接語法格式:FROM JOIN ON 參數(shù): := INNER | LEFT | RIGHT | FULL OUTER 1、內(nèi)連接 內(nèi)連接也叫自然連接,它是組合兩個表的常用方法。自然連接將兩個表中的列進(jìn)行比較,返回每對匹配的行。廢棄兩個表中不匹配的行。如果未指定聯(lián)接類型,則這是默認(rèn)設(shè)置。語法一:

30、 SELECT 列 FROM 表1 inner JION 表2 ON 表1.列=表2.列語法二: SELECT 列 FROM 表1,表2 WHERE 表1.列=表2.列【例34】從titles和titleauthor表中查詢書的書號、書名、作者號和價格。usepubsgoselect titles.title_id as 書號, title as 書名,au_id as 作者號, price as 價格from titles inner join titleauthoron titles.title_id=titleauthor.title_id【例35】從titles、authors和tit

31、leauthor表中查詢書的書號、書名、作者號和作者名。usepubsgoselect titles.title_id, title, authors.au_id, au_lnamefrom titles join titleauthoron titles.title_id=titleauthor.title_idjoin authorson authors.au_id=titleauthor.au_id任務(wù)1:查詢已訂購了產(chǎn)品的公司的公司名稱,聯(lián)系人姓名和所訂產(chǎn)品的產(chǎn)品名和數(shù)量。 SELECT cu.公司名稱,聯(lián)系人姓名,pr.產(chǎn)品名, pd.數(shù)量FROM customer as cuINN

32、ER JOIN p_order as pd ON cu.客戶ID=pd.客戶IDINNER JOIN product as pron pr.產(chǎn)品ID=Pd.產(chǎn)品ID任務(wù)3:查詢客戶名為通恒機(jī)械的公司所訂購產(chǎn)品的產(chǎn)品ID和數(shù)量。SELECT 公司名稱,產(chǎn)品ID,數(shù)量FROM customer as A INNER JOIN p_order as BON A.客戶ID=B.客戶IDWHERE A.公司名稱=通恒機(jī)械【例36】從學(xué)生信息表、教學(xué)成績表和課程信息表中查詢學(xué)生的學(xué)號、姓名、課程名稱和分?jǐn)?shù)use 教學(xué)成績管理數(shù)據(jù)庫goselect cj.學(xué)號,姓名,kc.名稱,分?jǐn)?shù)from 教學(xué)成績表 a

33、s cj inner join 學(xué)生信息表 as xs on cj.學(xué)號 = xs.學(xué)號 inner join 課程信息表 as kc on cj.課程編號 = kc.編號【例 37】查詢200301班均分高于80分的學(xué)生的班級、學(xué)號、姓名、均分,結(jié)果按均分降序排列.use 教學(xué)成績管理數(shù)據(jù)庫select 班級編號, a.學(xué)號, b.姓名, avg(分?jǐn)?shù)) 均分from 教學(xué)成績表 as a join 學(xué)生信息表 as b on a.學(xué)號 = b.學(xué)號 join 課程信息表 as c on a.課程編號 = c.編號group by 班級編號, a.學(xué)號, b.姓名having avg(分?jǐn)?shù))

34、80 and 班級編號=200301 order by avg(分?jǐn)?shù)) desc2外連接(Outer join) 在自然連接中,只有在兩個表中匹配的行才能在結(jié)果集中出現(xiàn)。而在外連接中可以只限制一個表,而對另外一個表不加限制(即所有的行都出現(xiàn)在結(jié)果集中)。 外連接分為左外連接、右外連接和全外連接。左外連接是對連接條件中左邊的表不加限制;右外連接是對右邊的表不加限制;全外連接對兩個表都不加限制,所有兩個表中的行都會包括在結(jié)果集中。左外連接的語法為: SELECT 列 FROM 表1 LEFT OUTERJOIN 表2 ON 表1.列1=表2.列2右外連接的語法為: SELECT select_li

35、st FROM 表1 RIGHTOUTERJOIN 表2 ON 表1.列1=表2.列2全外連接的語法為: SELECT select_list FROM 表1 FULLOUTER JOIN 表2 ON 表1.列1=表2.列21)左向外聯(lián)接 聯(lián)接兩個表,并保留左表中沒有匹配項的行。不包括右表中的不匹配行?!纠?8】authors 表與 titleauthor 表在各表的 au_id 列上相匹配。無論作品出版或未出版,所有作者均出現(xiàn)在結(jié)果集中。Use pubs go SELECT authors.au_lname AS Last, titleauthor.title_id FROM authors

36、 LEFT OUTER JOIN titleauthor ON authors.au_id = titleauthor.au_id 2)右向外聯(lián)接 包括第二個命名表(“右”表,出現(xiàn)在 JOIN 子句的最右邊)中的所有行。不包括左表中的不匹配行?!纠?9】在 titles 和 publishers 表之間的右向外聯(lián)接將包括所有的出版商,甚至包括那些在 titles 表中沒有書名的出版商。 SELECT titles.title_id, titles.title, publishers.pub_name FROM titles RIGHT OUTER JOIN publishers ON titl

37、es.pub_id = publishers.pub_id3)完整外部聯(lián)接 包括所有聯(lián)接表中的所有行,不論它們是否匹配?!纠?0】查詢書的書號、書名 和作者的作者號、作者名。usepubsgoselect title_id, title, au_id, au_lnamefrom titles full join authorson titles.title_id=authors.au_id【例41】返回 titles 表中的書籍標(biāo)題及對應(yīng)的出版商。還返回未出版列在 titles 表中的書籍的出版商,以及不是由 publishers 表中所列的出版商出版的所有書籍標(biāo)題。 SELECT title

38、s.title , publishers.pub_name FROM publishers FULL OUTER JOIN titles ON titles.pub_id = publishers.pub_id ORDER BY publishers.pub_name4)交叉聯(lián)接 沒有 WHERE 子句的交叉聯(lián)接將產(chǎn)生聯(lián)接所涉及的表的笛卡爾積。第一個表的行數(shù)乘以第二個表的行數(shù)等于笛卡爾積結(jié)果集的大小。 二、用嵌套進(jìn)行多表查詢 在實際應(yīng)用中,經(jīng)常要用到多層查詢。在SQL中,將一條SELECT語句作為另一條SELECT語句的一部分稱為嵌套查詢。外層的SELECT語句被稱為外部查詢或父查詢,內(nèi)層的S

39、ELECT語句成為內(nèi)部查詢或子查詢。 1、單值嵌套 在該方式下,通過子查詢返回一個單一的數(shù)據(jù),該數(shù)據(jù)可以參加相關(guān)表達(dá)式的運算。當(dāng)子查詢返回的是單值,可以使用,=,=,!=或等比較運算符?!纠?2】查詢“南天有限公司”的所有訂購的訂單號和產(chǎn)品。第一步:確定“南天有限公司”的客戶IDSELECT 客戶IDFROM COSTOMERWHERE 公司名稱=南天有限公司執(zhí)行結(jié)果:客戶ID3 第二步:查詢客戶ID為“3”訂購的訂單號和產(chǎn)品idSELECT 訂單ID,產(chǎn)品IDFROM P_ORDERWHERE 客戶ID=3SELECT 訂單ID,產(chǎn)品ID FROM P_ORDER WHERE 客戶ID=(S

40、ELECT 客戶ID FROM COSTUMER WHERE 公司名稱=南天有限公司) 說明:在這種方法下通過子查詢?nèi)〉玫臄?shù)據(jù)必須是惟一的,不能返回多值,否則運行將出現(xiàn)錯誤。 多值嵌套查詢 子查詢的返回結(jié)果是一列值的嵌套查詢稱為多值嵌套查詢。使用NOTIN操作符 IN運算符可以測試表達(dá)式的值是否與子查詢返回集中的某一個相等,NOT IN恰好與其相反。使用NOTEXISTS操作符 EXISTS表示一個子查詢至少返回一行時產(chǎn)生邏輯真值“true”,不返回任何行時產(chǎn)生邏輯假值“false”。與EXISTS相對應(yīng)的是NOT EXISTS。 【例 43】查詢類別ID為“1”的所有訂購的訂單號。SELECT 訂單IDFROM P_ORDERWHERE 產(chǎn)品ID IN (SELECT 產(chǎn)品ID FROM PRODUCT WHERE 類別ID=1 ) 任務(wù)2:查詢所有訂購了“鼠標(biāo)”產(chǎn)品的公司的公司名稱和聯(lián)系方式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論