




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章高級查詢我們已經初步了解了數據表的基礎查詢。但是,在實際的數據庫操作中,往往需要同時從來自兩個或兩個以上的表中查詢相關數據,連接就是滿足這些需求的技術。本章將主要介紹子查詢、聯合語句、單表關聯語句及多表查詢的相關使用。第8章高級查詢我們已經初步了解了數據表的基礎查詢。但是,18.1連接簡介上一章的查詢語句都只涉及一個表的數據。在很多情況下,需要查詢的數據往往涉及多個表,這時需要對多個表進行連接查詢。通過連接,可以根據各個表之間的邏輯關系從兩個或多個表中檢索數據。如,既要查詢訂單的信息,又要查詢訂單所在城市的信息,這就涉及orders和customersnew兩個表。8.1連接簡介上一章的查詢語句都只涉及一個表的數據。在很28.1.1連接定義多表連接實際上就是實現如何使用一個表中的數據來選擇另一個表中的行。而連接條件則主要通過以下方法定義兩個表在查詢中的關聯方式:指定每個表中要用于連接的列,典型的連接條件是在一個表中指定外鍵,在另一個表中指定與其關聯的鍵。指定比較各列的值時要使用的邏輯運算符(=、<>等)。在select語句中實現多表連接,并不是一個物理存在的實體。換句話說,它在數據表中并不存在,它只是由數據庫系統在需要時創建的,只在查詢、檢索數據期間有效。8.1.1連接定義多表連接實際上就是實現如何使用一個表中38.1.2連接的類型連接體現在where子句中指定的條件上,在條件中要指定兩個表通過哪些列進行連接。一般情況下進行連接查詢的兩個表是通過主鍵和外鍵進行關聯的,所以最簡單的條件是一個表的外鍵與另一個表的主鍵相等。在SQL中,表的連接類型主要有下面幾種。內部連接(innerjoin)外部連接(outer
join)交叉連接(cross
join)8.1.2連接的類型連接體現在where子句中指定的條件48.1.3簡單的多表查詢表的連接實現最簡單的方法就是在select語句的from子句中,羅列要連接的表即可。而要進一步實現復雜的多表連接,則需要在from子句中使用join(innerjoin、outer
join、cross
join等)關鍵詞,以后的章節將詳細講解。8.1.3簡單的多表查詢表的連接實現最簡單的方法就是在s58.1.3簡單的多表查詢1.如何實現多表查詢實現多表查詢,可以在from子句中通過join關鍵詞連接需要查詢的表。而簡單的多表查詢,則可以不使用join關鍵詞,而直接列出所要連接的表,利用逗號把from子句后的表名隔開?!臼纠?-1】使用from子句直接實現product_information和categories兩個表的連接。8.1.3簡單的多表查詢1.如何實現多表查詢68.1.3簡單的多表查詢2.指定連接條件直接使用from子句連接表,返回的是兩個表的記錄的笛卡爾積,這在實際應用中意義不大。在實際應用中,通常需要連接的兩個表的記錄滿足一定的關系。這時,可以在select語句的where子句中指定連接條件?!臼纠?-2】使用where子句指定product_information和categories兩個表的連接條件。8.1.3簡單的多表查詢2.指定連接條件78.1.3簡單的多表查詢3.使用別名作為表名的簡寫在上面的示例中,select語句中有關列名均使用了“product_information.category_id”的完整表達式。在連接的兩個表中,如果不是相同的列名,可以省略表名;對于相同的列名,在使用時必須指明其對應的表名。而使用表名比較繁瑣,我們可以為表定義別名?!臼纠?-3】使用別名簡化product_information和categories兩個表的連接。8.1.3簡單的多表查詢3.使用別名作為表名的簡寫88.1.3簡單的多表查詢4.自連接在查詢信息時,有時需要將表與其自身進行連接,即自連接,這時就需要為表定義別名。【示例8-4】從customersnew表中查詢賒銷限額credit_limit比顧客編號839大的所有顧客信息。8.1.3簡單的多表查詢4.自連接98.2表的連接查詢在關系型數據庫中實現多表之間的聯系,我們引入了連接查詢,連接用于指定多數據源(表、視圖)之間如何組合,以形成最終的數據源。前面介紹的表的連接,是通過from子句列出所要連接的表,結合使用where子句列出連接條件來實現。本節將主要為大家介紹使用關鍵字join實現表的連接,主要包括自然連接、內連接,外連接。使用join關鍵字有助于將連接操作與where的搜索條件分開。8.2表的連接查詢在關系型數據庫中實現多表之間的聯系,我108.2.1自然連接自然連接將兩個數據源中具有相同名稱的列進行連接。在自然連接中,用戶不需要明確指定進行連接的列,系統會自動完成這一任務。連接后相同的列只保留一個。如現在存在兩個表:R表和S表,這兩個表存在相同的列是B列。如果將這兩個表進行自然連接,連接的具體情況如圖所示。8.2.1自然連接自然連接將兩個數據源中具有相同名稱的列118.2.1自然連接8.2.1自然連接128.2.1自然連接自然連接使用natrualjoin關鍵字。語法如圖所示。【示例8-5】在示例數據庫中,product_information和categories都包含category_id這列,現在我們把這兩個表進行自然連接。8.2.1自然連接自然連接使用natrualjoin關138.2.2內連接內連接也稱為簡單連接,它會把兩個或多個表進行連接,最后只能查詢出匹配的記錄,不匹配的記錄將無法查詢出來。理解如圖所示。8.2.2內連接內連接也稱為簡單連接,它會把兩個或多個表148.2.2內連接8.2.2內連接158.2.2內連接這種連接查詢是平時最常用的查詢。語法如圖所示?!臼纠?-6】在示例數據庫中,orders數據表存儲的是訂單信息,這時如果想知道訂單者的聯系方式phone_number就需要連接表customersnew。8.2.2內連接168.2.3外連接外連接分為左外連接、右外連接、全外連接。使用左外連接查詢,返回的結果不僅僅是符合連接條件的行記錄,還包含了左邊表中的全部記錄,右外連接與左外連接相反。全外連接返回所有匹配成功的記錄,還包含了左、右表中未匹配成功的記錄。理解如圖所示。8.2.3外連接外連接分為左外連接、右外連接、全外連接。178.2.3外連接8.2.3外連接188.2.3外連接1.左外連接左外連接又稱左向外連接,也就是說如果左表的某行記錄在右表中沒有匹配項,則在返回結果中右表的所有選擇列表均為空,左外連接使用語法如圖所示。【示例8-7】左外連接連接product_information、categories數據表,顯示產品編號、產品分類編號、分類名稱。8.2.3外連接1.左外連接198.2.3外連接2.右外連接右外連接又稱右向外連接,與左外連接相反,將右邊表中所有的數據與左表進行匹配,返回的結果顯示出了匹配成功的記錄,還包含右表中未匹配成功的記錄,并在其左表對應列補空值。右外連接使用語法如圖所示?!臼纠?-8】右外連接連接product_information、categories數據表,顯示產品編號、產品分類編號、分類名稱。8.2.3外連接2.右外連接208.2.3外連接3.全外連接返回所有匹配成功的記錄,并返回左表未匹配成功的記錄,也返回右表未匹配成功的記錄。語法如圖所示。【示例8-9】全外連接連接product_information、categories數據表,顯示產品編號、產品分類編號、分類名稱?!臼纠?-10】利用外連接的簡略寫法來改寫示例8-8。8.2.3外連接3.全外連接218.3單表中的聯合語句聯合語句是指兩個或多個select語句是并列關系,并且對這些select語句所捕獲的記錄集進行集合操作,以獲得最終的結果集。這些聯合語句包括以下幾種:union查詢、unionall查詢、intersect查詢和minus查詢。8.3單表中的聯合語句聯合語句是指兩個或多個select228.3.1union查詢該操作符用于取得兩個查詢結果集的并集。理解如圖所示。當使用該操作符時,會自動去掉結果集中重復行。語法結構如圖所示。8.3.1union查詢該操作符用于取得兩個查詢結果集的238.3.1union查詢【示例8-11】我們使用關鍵字union,顯示customersnew表中,cust_first_name是Bruce
Margret和city是Roma的顧客編號、顧客姓名、所在城市。8.3.1union查詢【示例8-11】我們使用關鍵字u248.3.2unionall查詢該操作符與union相似,但是它不會取消重復行,不會排序。理解如圖所示。8.3.2unionall查詢該操作符與union相似258.3.2unionall查詢【示例8-12】我們使用關鍵字unionall,顯示customersnew表中,cust_first_name是Bruce或Margret和city是Roma的顧客編號、顧客姓名、所在城市。8.3.2unionall查詢【示例8-12】我們使用268.3.3intersect查詢intersect操作符用于兩個查詢結果的交集,理解如圖所示?!臼纠?-13】我們使用關鍵字intersect,顯示customersnew表中,cust_first_name是Margret和city又是Roma的顧客編號、顧客姓名、所在城市。8.3.3intersect查詢intersect操作符278.3.4minus查詢minus集合運算可以查詢兩個給定集合之間的差集,理解如圖所示。【示例8-14】我們使用關鍵字minus,顯示customersnew表中credit_limit在3000~5000之間的顧客信息。8.3.4minus查詢minus集合運算可以查詢兩個給288.4子查詢子查詢是指嵌套在查詢語句中的查詢語句。子查詢出現的位置一般為條件語句,如where條件,它本質上是where后的一個條件表達式。Oracle會首先執行子查詢,然后執行父查詢。8.4子查詢子查詢是指嵌套在查詢語句中的查詢語句。子查詢298.4.1理解子查詢子查詢是嵌入在其他SQL語句中的select語句,也叫嵌套查詢。子查詢首先生成結果集,并將結果集應用于條件語句。子查詢可以出現在插入、查詢、更新和刪除語句中。建立子查詢的目的在于更加有效的限制where子句中的條件,并可以將復雜的查詢邏輯梳理的更加清晰。子查詢與父查詢關系情況如圖所示。8.4.1理解子查詢子查詢是嵌入在其他SQL語句中的se308.4.2子查詢使用在select語句中,where子句或者having子句中的條件往往不能用一個確定的表達式來確定,而要依賴于另一個查詢,這個被嵌套使用的查詢就是子查詢。子查詢返回單行。查詢語法如圖所示。8.4.2子查詢使用在select語句中,where子句318.4.3子查詢的使用方式及限制在實際應用中,子查詢一般出現在where子句中,包含子查詢的語句通常采用圖中所列格式中的一種。8.4.3子查詢的使用方式及限制在實際應用中,子查詢一般328.4.3子查詢的使用方式及限制1.比較運算符引入子查詢凡是表達式可以出現的地方幾乎都可以使用子查詢,只是SQL對查詢的結果施加了某些限制。即子查詢用在比較運算符之后的表達式中,該子查詢必須返回單值。【示例8-15】子查詢顯示顧客編號customer_id是101的顧客所定產品的折扣價?!臼纠?-16】子查詢顯示顧客編號customer_id是101并且sales_rep_id是159的顧客所定產品的折折扣價。8.4.3子查詢的使用方式及限制1.比較運算符引入子查詢338.4.3子查詢的使用方式及限制【示例8-17】利用子查詢,從customersnew表中查詢賒銷限額credit_limit比顧客編號為839大的所有顧客信息。8.4.3子查詢的使用方式及限制【示例8-17】利用子查348.4.3子查詢的使用方式及限制2.子查詢中的聚合函數之前在講解基本查詢時,我們可以在查詢結果中包括聚合函數,在這里也可以將聚合函數作為where子句的搜索條件的一部分得到聚合函數返回的值。聚合函數返回的是單值,可以在比較運算符引入子查詢。【示例8-18】查詢產品單價unit_price高于平均價格并且line_item_id為1的訂單的order_id、ine_item_id、unit_price的詳細信息。【示例8-19】查詢各個品種的訂單產品的產品單價unit_price高于平均價格的訂單的order_id、ine_item_id、unit_price的詳細信息。8.4.3子查詢的使用方式及限制2.子查詢中的聚合函數358.4.3子查詢的使用方式及限制2.在子查詢中使用in、all關鍵字對于在子查詢返回多個值的情況,可以使用in關鍵字。當使用in運算符引入子查詢時,就是對子查詢集合成員測試,即把源表中的列值與子查詢的返回結果進行比較,如果列值與返回結果集中的列數據值之一匹配,那么in判別式求值為true,查詢結果就包含這行數據?!臼纠?-20】使用子查詢,結合in關鍵字,顯示顧客編號customer_id是101的顧客所定產品的折扣價。8.4.3子查詢的使用方式及限制2.在子查詢中使用in、368.4.3子查詢的使用方式及限制【示例8-21】我們使用關鍵字all,在數據表customersnew中查詢顯示credit_limit比country為IT的所有的顧客的credit_limit高的customer_id、cust_first_name、和country?!臼纠?-22】我們使用關鍵字any,在數據表customersnew中查詢,顯示credit_limit比country為IT的顧客的credit_limit高的customer_id、cust_first_name、和country。8.4.3子查詢的使用方式及限制【示例8-21】我們使用378.4.3子查詢的使用方式及限制3.在子查詢中使用exists關鍵字在某些情況下,只需要查詢返回true或false,子查詢的數據本身并不重要。這時,就可以使用exists判別式來引入子查詢。使用exists引入子查詢時,就相當于進行一次存在性測試?!臼纠?-23】exists往往可以作為in判式的替代語法。結合表order_items、orders查詢顧客編號customer_id是101的顧客所定產品的折扣價信息。表order_items測試哪些訂單號在該集合中。8.4.3子查詢的使用方式及限制3.在子查詢中使用exi388.4.3子查詢的使用方式及限制在子查詢過程中,常用的運算符如表所示,表中集合S為子查詢返回的結果。運算符用法說明existsexists如果集合S部位空,則條件表達式為真,否則為假in表達式inS如果表達式的值在集合S中,則條件表達式為真,否則為假=表達式=S如果表達式的值與集合S中的唯一一個元素相等,則條件表達式為真,否則為假。集合S中最多只有一個元素<><=>=與“=”相同進行相應的關系運算any用在集合之前指定要與集合中的任一個元素進行比較all用在集合之前指定要與集合中的所有元素進行比較8.4.3子查詢的使用方式及限制在子查詢過程中,常用的運398.5查詢語句優化所謂語句優化是在原來的語句基礎上為了是語句能夠更快速地得到結果的方法。在查詢語句中,每一條SQL語句對數據庫的操作,產生結果的時間也不同。即使是完成同一功能的SQL語句,最后的響應時間也是不同的。本小節主要講解查詢語句優化中的使用技巧。8.5查詢語句優化所謂語句優化是在原來的語句基礎上為了是408.5.1在查詢中盡量不使用“*”在數據庫的查詢操作中,操作著最常用的查詢某一個數據表的全部記錄,此時,需要使用“*”。在Oracle數據庫中,使用“*”后,會浪費很多查詢時間,所以,在查詢語句中使用“*”時,要考慮是否有字段是不需要的。如果有不需要的字段就要用指定列名的方式查詢,這樣就可以提高查詢效率。8.5.1在查詢中盡量不使用“*”在數據庫的查詢操作中,418.5.2多表查詢中盡量使用表別名在查詢中使用別名是比較廣泛的,在Oracle數據庫中設置表的別名方式主要有兩種,如圖所示。8.5.2多表查詢中盡量使用表別名在查詢中使用別名是比較428.5.3條件查詢多使用where在SQL語句中指定查詢條件時主要有兩個關鍵詞,一個是where,另一個是having。having語句通常用于對集合函數進行操作。但是在實際的應用中,應該盡量避免使用having語句,因為having語句通常用于在檢索出的結果中過濾結果,所以效率會比較低。使用where語句可以在查詢時就限定結果的范圍,這樣就可以提高查詢速度。8.5.3條件查詢多使用where在SQL語句中指定查詢438.5.4指定查詢范圍多使用in當要查詢某個值在某個范圍時,可以使用or表示“或者”,使用and表示“并且”。但是in關鍵字可以表示與or關鍵詞相同的含義。相對于or關鍵詞來說,使用in的查詢效率更高一些。因為or關鍵詞要比較每一個條件,所以檢索速度就會變慢。8.5.4指定查詢范圍多使用in當要查詢某個值在某個范圍448.5.5子查詢中多使用exists語句判斷條件exists表示存在的意思。這個關鍵詞可以替代SQL語句中的很多關鍵詞,可以替代in關鍵詞;也可以替代distinct關鍵詞。但是使用exists關鍵詞效率會更高。【示例9-23】分別使用exists和in關鍵字來查詢。結合表order_items、orders查詢顧客編號customer_id是101的顧客所定產品的折扣價信息。表orders測試哪些訂單號在該集合中。1.使用in關鍵字查詢。2.使用exists關鍵字查詢。8.5.5子查詢中多使用exists語句判斷條件exis458.6小結本章講述多表連接的查詢語句,同時講解了連接的分類以及集合運算、子查詢。本章重點是多表連接的查詢,關于各種連接的作用。本章難點是各種子查詢的應用,各種不同方式的子查詢和不同應用條件下子查詢的應用。對于結果集之間的操作,尤其需要注意區分union和unionall的細微差別。8.6小結本章講述多表連接的查詢語句,同時講解了連接的分46第8章高級查詢我們已經初步了解了數據表的基礎查詢。但是,在實際的數據庫操作中,往往需要同時從來自兩個或兩個以上的表中查詢相關數據,連接就是滿足這些需求的技術。本章將主要介紹子查詢、聯合語句、單表關聯語句及多表查詢的相關使用。第8章高級查詢我們已經初步了解了數據表的基礎查詢。但是,478.1連接簡介上一章的查詢語句都只涉及一個表的數據。在很多情況下,需要查詢的數據往往涉及多個表,這時需要對多個表進行連接查詢。通過連接,可以根據各個表之間的邏輯關系從兩個或多個表中檢索數據。如,既要查詢訂單的信息,又要查詢訂單所在城市的信息,這就涉及orders和customersnew兩個表。8.1連接簡介上一章的查詢語句都只涉及一個表的數據。在很488.1.1連接定義多表連接實際上就是實現如何使用一個表中的數據來選擇另一個表中的行。而連接條件則主要通過以下方法定義兩個表在查詢中的關聯方式:指定每個表中要用于連接的列,典型的連接條件是在一個表中指定外鍵,在另一個表中指定與其關聯的鍵。指定比較各列的值時要使用的邏輯運算符(=、<>等)。在select語句中實現多表連接,并不是一個物理存在的實體。換句話說,它在數據表中并不存在,它只是由數據庫系統在需要時創建的,只在查詢、檢索數據期間有效。8.1.1連接定義多表連接實際上就是實現如何使用一個表中498.1.2連接的類型連接體現在where子句中指定的條件上,在條件中要指定兩個表通過哪些列進行連接。一般情況下進行連接查詢的兩個表是通過主鍵和外鍵進行關聯的,所以最簡單的條件是一個表的外鍵與另一個表的主鍵相等。在SQL中,表的連接類型主要有下面幾種。內部連接(innerjoin)外部連接(outer
join)交叉連接(cross
join)8.1.2連接的類型連接體現在where子句中指定的條件508.1.3簡單的多表查詢表的連接實現最簡單的方法就是在select語句的from子句中,羅列要連接的表即可。而要進一步實現復雜的多表連接,則需要在from子句中使用join(innerjoin、outer
join、cross
join等)關鍵詞,以后的章節將詳細講解。8.1.3簡單的多表查詢表的連接實現最簡單的方法就是在s518.1.3簡單的多表查詢1.如何實現多表查詢實現多表查詢,可以在from子句中通過join關鍵詞連接需要查詢的表。而簡單的多表查詢,則可以不使用join關鍵詞,而直接列出所要連接的表,利用逗號把from子句后的表名隔開。【示例8-1】使用from子句直接實現product_information和categories兩個表的連接。8.1.3簡單的多表查詢1.如何實現多表查詢528.1.3簡單的多表查詢2.指定連接條件直接使用from子句連接表,返回的是兩個表的記錄的笛卡爾積,這在實際應用中意義不大。在實際應用中,通常需要連接的兩個表的記錄滿足一定的關系。這時,可以在select語句的where子句中指定連接條件?!臼纠?-2】使用where子句指定product_information和categories兩個表的連接條件。8.1.3簡單的多表查詢2.指定連接條件538.1.3簡單的多表查詢3.使用別名作為表名的簡寫在上面的示例中,select語句中有關列名均使用了“product_information.category_id”的完整表達式。在連接的兩個表中,如果不是相同的列名,可以省略表名;對于相同的列名,在使用時必須指明其對應的表名。而使用表名比較繁瑣,我們可以為表定義別名?!臼纠?-3】使用別名簡化product_information和categories兩個表的連接。8.1.3簡單的多表查詢3.使用別名作為表名的簡寫548.1.3簡單的多表查詢4.自連接在查詢信息時,有時需要將表與其自身進行連接,即自連接,這時就需要為表定義別名?!臼纠?-4】從customersnew表中查詢賒銷限額credit_limit比顧客編號839大的所有顧客信息。8.1.3簡單的多表查詢4.自連接558.2表的連接查詢在關系型數據庫中實現多表之間的聯系,我們引入了連接查詢,連接用于指定多數據源(表、視圖)之間如何組合,以形成最終的數據源。前面介紹的表的連接,是通過from子句列出所要連接的表,結合使用where子句列出連接條件來實現。本節將主要為大家介紹使用關鍵字join實現表的連接,主要包括自然連接、內連接,外連接。使用join關鍵字有助于將連接操作與where的搜索條件分開。8.2表的連接查詢在關系型數據庫中實現多表之間的聯系,我568.2.1自然連接自然連接將兩個數據源中具有相同名稱的列進行連接。在自然連接中,用戶不需要明確指定進行連接的列,系統會自動完成這一任務。連接后相同的列只保留一個。如現在存在兩個表:R表和S表,這兩個表存在相同的列是B列。如果將這兩個表進行自然連接,連接的具體情況如圖所示。8.2.1自然連接自然連接將兩個數據源中具有相同名稱的列578.2.1自然連接8.2.1自然連接588.2.1自然連接自然連接使用natrualjoin關鍵字。語法如圖所示?!臼纠?-5】在示例數據庫中,product_information和categories都包含category_id這列,現在我們把這兩個表進行自然連接。8.2.1自然連接自然連接使用natrualjoin關598.2.2內連接內連接也稱為簡單連接,它會把兩個或多個表進行連接,最后只能查詢出匹配的記錄,不匹配的記錄將無法查詢出來。理解如圖所示。8.2.2內連接內連接也稱為簡單連接,它會把兩個或多個表608.2.2內連接8.2.2內連接618.2.2內連接這種連接查詢是平時最常用的查詢。語法如圖所示?!臼纠?-6】在示例數據庫中,orders數據表存儲的是訂單信息,這時如果想知道訂單者的聯系方式phone_number就需要連接表customersnew。8.2.2內連接628.2.3外連接外連接分為左外連接、右外連接、全外連接。使用左外連接查詢,返回的結果不僅僅是符合連接條件的行記錄,還包含了左邊表中的全部記錄,右外連接與左外連接相反。全外連接返回所有匹配成功的記錄,還包含了左、右表中未匹配成功的記錄。理解如圖所示。8.2.3外連接外連接分為左外連接、右外連接、全外連接。638.2.3外連接8.2.3外連接648.2.3外連接1.左外連接左外連接又稱左向外連接,也就是說如果左表的某行記錄在右表中沒有匹配項,則在返回結果中右表的所有選擇列表均為空,左外連接使用語法如圖所示?!臼纠?-7】左外連接連接product_information、categories數據表,顯示產品編號、產品分類編號、分類名稱。8.2.3外連接1.左外連接658.2.3外連接2.右外連接右外連接又稱右向外連接,與左外連接相反,將右邊表中所有的數據與左表進行匹配,返回的結果顯示出了匹配成功的記錄,還包含右表中未匹配成功的記錄,并在其左表對應列補空值。右外連接使用語法如圖所示?!臼纠?-8】右外連接連接product_information、categories數據表,顯示產品編號、產品分類編號、分類名稱。8.2.3外連接2.右外連接668.2.3外連接3.全外連接返回所有匹配成功的記錄,并返回左表未匹配成功的記錄,也返回右表未匹配成功的記錄。語法如圖所示。【示例8-9】全外連接連接product_information、categories數據表,顯示產品編號、產品分類編號、分類名稱?!臼纠?-10】利用外連接的簡略寫法來改寫示例8-8。8.2.3外連接3.全外連接678.3單表中的聯合語句聯合語句是指兩個或多個select語句是并列關系,并且對這些select語句所捕獲的記錄集進行集合操作,以獲得最終的結果集。這些聯合語句包括以下幾種:union查詢、unionall查詢、intersect查詢和minus查詢。8.3單表中的聯合語句聯合語句是指兩個或多個select688.3.1union查詢該操作符用于取得兩個查詢結果集的并集。理解如圖所示。當使用該操作符時,會自動去掉結果集中重復行。語法結構如圖所示。8.3.1union查詢該操作符用于取得兩個查詢結果集的698.3.1union查詢【示例8-11】我們使用關鍵字union,顯示customersnew表中,cust_first_name是Bruce
Margret和city是Roma的顧客編號、顧客姓名、所在城市。8.3.1union查詢【示例8-11】我們使用關鍵字u708.3.2unionall查詢該操作符與union相似,但是它不會取消重復行,不會排序。理解如圖所示。8.3.2unionall查詢該操作符與union相似718.3.2unionall查詢【示例8-12】我們使用關鍵字unionall,顯示customersnew表中,cust_first_name是Bruce或Margret和city是Roma的顧客編號、顧客姓名、所在城市。8.3.2unionall查詢【示例8-12】我們使用728.3.3intersect查詢intersect操作符用于兩個查詢結果的交集,理解如圖所示?!臼纠?-13】我們使用關鍵字intersect,顯示customersnew表中,cust_first_name是Margret和city又是Roma的顧客編號、顧客姓名、所在城市。8.3.3intersect查詢intersect操作符738.3.4minus查詢minus集合運算可以查詢兩個給定集合之間的差集,理解如圖所示?!臼纠?-14】我們使用關鍵字minus,顯示customersnew表中credit_limit在3000~5000之間的顧客信息。8.3.4minus查詢minus集合運算可以查詢兩個給748.4子查詢子查詢是指嵌套在查詢語句中的查詢語句。子查詢出現的位置一般為條件語句,如where條件,它本質上是where后的一個條件表達式。Oracle會首先執行子查詢,然后執行父查詢。8.4子查詢子查詢是指嵌套在查詢語句中的查詢語句。子查詢758.4.1理解子查詢子查詢是嵌入在其他SQL語句中的select語句,也叫嵌套查詢。子查詢首先生成結果集,并將結果集應用于條件語句。子查詢可以出現在插入、查詢、更新和刪除語句中。建立子查詢的目的在于更加有效的限制where子句中的條件,并可以將復雜的查詢邏輯梳理的更加清晰。子查詢與父查詢關系情況如圖所示。8.4.1理解子查詢子查詢是嵌入在其他SQL語句中的se768.4.2子查詢使用在select語句中,where子句或者having子句中的條件往往不能用一個確定的表達式來確定,而要依賴于另一個查詢,這個被嵌套使用的查詢就是子查詢。子查詢返回單行。查詢語法如圖所示。8.4.2子查詢使用在select語句中,where子句778.4.3子查詢的使用方式及限制在實際應用中,子查詢一般出現在where子句中,包含子查詢的語句通常采用圖中所列格式中的一種。8.4.3子查詢的使用方式及限制在實際應用中,子查詢一般788.4.3子查詢的使用方式及限制1.比較運算符引入子查詢凡是表達式可以出現的地方幾乎都可以使用子查詢,只是SQL對查詢的結果施加了某些限制。即子查詢用在比較運算符之后的表達式中,該子查詢必須返回單值。【示例8-15】子查詢顯示顧客編號customer_id是101的顧客所定產品的折扣價?!臼纠?-16】子查詢顯示顧客編號customer_id是101并且sales_rep_id是159的顧客所定產品的折折扣價。8.4.3子查詢的使用方式及限制1.比較運算符引入子查詢798.4.3子查詢的使用方式及限制【示例8-17】利用子查詢,從customersnew表中查詢賒銷限額credit_limit比顧客編號為839大的所有顧客信息。8.4.3子查詢的使用方式及限制【示例8-17】利用子查808.4.3子查詢的使用方式及限制2.子查詢中的聚合函數之前在講解基本查詢時,我們可以在查詢結果中包括聚合函數,在這里也可以將聚合函數作為where子句的搜索條件的一部分得到聚合函數返回的值。聚合函數返回的是單值,可以在比較運算符引入子查詢?!臼纠?-18】查詢產品單價unit_price高于平均價格并且line_item_id為1的訂單的order_id、ine_item_id、unit_price的詳細信息?!臼纠?-19】查詢各個品種的訂單產品的產品單價unit_price高于平均價格的訂單的order_id、ine_item_id、unit_price的詳細信息。8.4.3子查詢的使用方式及限制2.子查詢中的聚合函數818.4.3子查詢的使用方式及限制2.在子查詢中使用in、all關鍵字對于在子查詢返回多個值的情況,可以使用in關鍵字。當使用in運算符引入子查詢時,就是對子查詢集合成員測試,即把源表中的列值與子查詢的返回結果進行比較,如果列值與返回結果集中的列數據值之一匹配,那么in判別式求值為true,查詢結果就包含這行數據?!臼纠?-20】使用子查詢,結合in關鍵字,顯示顧客編號customer_id是101的顧客所定產品的折扣價。8.4.3子查詢的使用方式及限制2.在子查詢中使用in、828.4.3子查詢的使用方式及限制【示例8-21】我們使用關鍵字all,在數據表customersnew中查詢顯示credit_limit比country為IT的所有的顧客的credit_limit高的customer_id、cust_first_name、和country?!臼纠?-22】我們使用關鍵字any,在數據表customersnew中查詢,顯示credit_limit比country為IT的顧客的credit_limit高的customer_id、cust_first_name、和country。8.4.3子查詢的使用方式及限制【示例8-21】我們使用838.4.3子查詢的使用方式及限制3.在子查詢中使用exists關鍵字在某些情況下,只需要查詢返回true或false,子查詢的數據本身并不重要。這時,就可以使用exists判別式來引入子查詢。使用exists引入子查詢時,就相當于進行一次存在性測試?!臼纠?-23】exists往往可以作為in判式的替代語法。結合表order_items、orders查詢顧客編號customer_id是101的顧客所定產品的折扣價信息。表order_items測試哪些訂單號在該集合中。8.4.3子查詢的使用方式及限制3.在子查詢中使用exi8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《春曉》教學課件
- 折疊電機采購方案(3篇)
- 公司工傷防范方案(3篇)
- 保潔報價方案模板(3篇)
- 房屋變更方案模板(3篇)
- DB13T 5773-2023 仿真冰場開放條件和維護保養要求
- DB13T 5620-2022 金銀花桑葉粗提物提取技術規程
- 農村馬廄翻修方案(3篇)
- 魚池施工方案(3篇)
- 學生校服方案(3篇)
- 四川省宜賓市高縣2023年數學六年級第二學期期末聯考試題含解析
- 大學《管理經濟學》期末復習核心知識點及考試真題解析
- 第五章-不規則三角網TIN的建立課件
- 《刑法》講座-課件
- 中級養老護理人員技能培訓
- 第二單元第1課時《線的認識》示范課教學課件【北師大版四年級數學上冊】
- 重慶市建設工程施工項目每日“防高墜三檢”檢查記錄表
- 國開電大本科《人文英語4》機考總題庫
- JJF 1059.1-2012測量不確定度評定與表示
- GB/T 6070-1995真空法蘭
- 民辦非企業單位理事、監事備案表
評論
0/150
提交評論