9、串連查詢與集合查詢

來源:互聯網
上載者:User

在對資料庫的查詢過程中,有些時候檢索一張表中的資料記錄往往不能滿足開發人員或者客戶的需要。例如,查詢學生的選課成績資訊。而學生選課資訊和課程成績資訊分別在兩個不同的資料表中。其中,在課程資訊表(T_curriculum)中包括課程的編號、課程的名字、課程的學分、課時以及授課的教師等學生選課資訊,而學生的編號、選課的課程編號以及課程成績等資訊在成績資訊表(T_result)中,此時為了在查詢的結果中顯示學生選課資訊和所選課程的相關資訊,就需要同時檢索課程資訊表(T_curriculum)和成績資訊表(T_result)。這就需要進行串連查詢的操作。

1.內串連查詢

等值串連
等值串連是指將指定的串連條件通過使用等號運算子(=)串連起來,並返回符合串連條件的資料行。其文法格式如下:
SELECT 表名1.欄位, 表名2.欄位 ….
FROM   表名1,表名2
WHERE 表名1.欄位1=表名2.欄位2
其中,SELECT 語句中表名1.欄位和表名2.欄位表示指定資料表1和資料表2中要查詢的列;FROM語句中表名1和表名2表示指定串連的資料表的名字;WHERE子句中表名1.欄位1=表名2.欄位2表示用於指定串連條件的列。這裡的欄位1中的列和欄位2中的列必須是兩個表之間相互關聯的列。
非等值串連
非等值串連是指使用除等號運算子(=)以外的其他運算子將指定條件串連起來而執行的查詢操作。其他運算子包括、>=(大於等於)、<=(小於等於)、>(大於)、<(小於)、!=(不等於)等,還可以使用BETWEEN…AND運算子。

SELECT R.stuID,S.stuName,C.curID, C.curName,R.resultFROM T_result R,T_curriculum C,T_student SWHERE R.curID=C.curIDAND R.result>80

使用ON子句建立相等串連

在SQL語句中除了WHERE子句中使用等號運算子(=)實現等值串連的操作之外,還可以使用ON子句建立相等串連條件。其文法規則如下:

SELECT 表名1.欄位, 表名2.欄位 ….FROM   表名1 JOIN 表名2ON 表名1.欄位1=表名2.欄位

其中關鍵字JOIN表示將表1和表2串連起來,ON子句用來指定串連條件的列。

使用USING子句建立相等串連

在進行串連操作時,有時只希望將兩張表中相互關聯的列建立一個等值串連。此時,可以使用USING子句建立相等串連來簡化使用等號運算子(=)建立的等值串連操作。其文法規範如下:

SELECT 表名1.欄位, 表名2.欄位 ….FROM   表名1 JOIN 表名2USING  (欄位1)

其中關鍵字JOIN表示將表1和表2串連起來,USING子句中使用括弧將欄位1括起來,欄位1就是兩個表中建立等值串連相互關聯的列。

2.交叉串連

交叉串連返回的結果是一個笛卡爾積。所謂笛卡爾積實際就是兩個集合相乘的結果。假設集合A中有n個元素,集合B中有m個元素,如果最後返回的結果是n*m,那麼這個結果就是集合A和集合B的笛卡爾積。

SELECT R.stuID,C.curIDFROM T_result R,T_curriculum C或FROM T_result R cross join T_curriculum C

3.自串連查詢

前面講到的串連都是在表與表之間進行的。串連查詢除了可以在不同的表之間進行,也可以對同一張表實現串連操作,這種串連查詢的方式稱為自串連。所謂自串連,就是指一個資料表與其自身進行串連。其文法規則如下:

SELECT A.欄位, A.欄位 ….

FROM   表名1 A,表名1 B

WHERE A.欄位=B.欄位

由於串連的是同一張表,所以在FROM語句中需要為表定義不同的別名,這裡為表1分別定義了表的別名為A和B。SELECT語句中可以使用A.欄位的形式也可以使用B.欄位的形式查詢需要的記錄。這裡的SELECT 語句中使用的是A.欄位的形式。

例如,在課程資訊表中選擇學分數比作業系統的學分數多的課程資訊。

SELECT C2.curID,C2.curName,C2.creditFROM T_curriculum C1,T_curriculum C2WHERE C1.curName = '作業系統' AND C1.credit<C2.credit

4.外串連查詢

在前面講述的串連操作中,返回的結果都是滿足串連條件的記錄。有些時候,開發人員或者使用者對於不滿足串連條件的部分記錄也感興趣,這個時候就需要使用外串連查詢。外串連查詢不僅可以返回滿足串連條件的記錄,對於一個資料表中在另一個資料表中不匹配的記錄也可以返回。外串連查詢主要包括三種:左外串連、右外串連和全外串連。

左外串連

左外串連中查詢的結果中不僅將顯示滿足串連條件的記錄,而且還包括左側表中不滿足查詢條件的記錄。在Oracle資料庫中,可以使用加號運算子(+)來表示左外串連。當該加號運算子(+)出現在串連條件的左邊時,就稱之為左外串連。其文法格式如下:

SELECT 表名1.欄位, 表名2.欄位 ….

FROM   表名1,表名2

WHERE 表名1.欄位1(+)=表名2.欄位2

其中,SELECT 語句中表名1.欄位和表名2.欄位表示指定資料表1和資料表2中要查詢的列;FROM語句中表名1和表名2表示指定串連的資料表的名字;WHERE子句中表名1.欄位1(+)=表名2.欄位2表示左外串連。此時,表名1.欄位1所在的列的值將會被全部查詢出來。

在MySQL資料庫和Microsoft SQL Server資料庫中可以使用LEFT[OUTER] JOIN關鍵字實現,其中OUTER關鍵字是可選的。使用LEFT[OUTER] JOIN關鍵字實現左外串連的文法規則如下:

SELECT 表名1.欄位, 表名2.欄位 ….FROM   表名1 LEFT JOIN表名2ON  表名1.欄位1=表名2.欄位2

這裡使用LEFT JOIN關鍵字代替SQL語句中FROM語句裡的逗號,使用ON子句代替標準SQL語句中的WHERE子句,並將SQL語句中表示左外串連的加號運算子(+)去除。

右外串連

在Oracle資料庫中,當該加號運算子(+)出現在串連條件的右邊時,就稱之為右外串連。其文法格式如下:

SELECT 表名1.欄位, 表名2.欄位 ….

FROM   表名1,表名2

WHERE 表名1.欄位1=表名2.欄位2(+)

在MySQL和Microsoft SQL Server資料庫中可以使用RIGHT [OUTER] JOIN關鍵字實現,其中OUTER關鍵字是可選的。使用RIGHT [OUTER] JOIN關鍵字實現左外串連的文法規則如下:

SELECT 表名1.欄位, 表名2.欄位 ….FROM   表名1 RIGHT JOIN表名2ON  表名1.欄位1=表名2.欄位2

全外串連

全外串連中查詢的結果中不僅將顯示左側表中不滿足串連條件的記錄,而且還會顯示右側表中不滿足查詢條件的記錄。全外串連可以認為是左外串連與右外串連的合集(不包括重複行)。

全外串連可以使用FULL [OUTER] JOIN關鍵字實現,其中OUTER關鍵字是可選的。使用FULL [OUTER] JOIN關鍵字實現左外串連的文法規則如下:

SELECT 表名1.欄位, 表名2.欄位 ….FROM   表名1 FULL JOIN表名2ON  表名1.欄位1=表名2.欄位2

5.集合查詢

在SQL的串連查詢語句中,還有一種查詢方式就是結合查詢。集合查詢主要包括三種:並操作、交操作和差操作。其中交操作和差操作並不是對目前主流的所有的資料庫的適用。

並操作(UNION)

執行並操作使用的關鍵字是UNION。並操作返回的結果集是包括了兩個查詢語句中查詢出來的所有不同的行,不包含重複行。其文法格式如下:

SELECT 語句1

UNION

SELECT 語句2

其中語句1和語句2表示的是兩個用於查詢的SELECT語句。UNION關鍵字表示對這兩個查詢語句查詢出來的結果進行並操作。這裡需要保證SELECT 語句1和SELECT 語句2中查詢出的列數必須相同,而且對應的列的資料類型必須一致。

交操作(INTERSECT)

執行交操作使用的關鍵字是INTERSECT。交操作返回的結果集包括了串連查詢結果的公用行。交操作中不會出現重複行。其文法格式如下:

SELECT 語句1

INTERSECT

SELECT 語句2

其中語句1和語句2表示的是兩個用於查詢的SELECT語句。INTERSECT關鍵字表示對這兩個查詢語句查詢出來的結果進行交操作。這裡需要保證SELECT 語句1和SELECT 語句2中查詢出的列數必須相同,而且對應的列的資料類型必須一致。

差操作(MINUS)

執執行交操作使用的關鍵字是MINUS。差操作返回的記錄結果集是只在第一個SELECT語句中出現存在,但不存在於第二個SELECT語句的查詢結果中。在其文法格式如下:

SELECT 語句1

MINUS

SELECT 語句2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.