摘要:連接查詢是通過連接運(yùn)算符實(shí)現(xiàn)多表查詢的一種數(shù)據(jù)檢索方式,連接查詢是關(guān)系數(shù)據(jù)庫(kù)的主要特點(diǎn)。在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,常把一個(gè)實(shí)體的所有信息存放在一個(gè)數(shù)據(jù)表中,當(dāng)檢索數(shù)據(jù)信息時(shí),通過連接查詢?nèi)〕龃娣旁诙鄠€(gè)表中的不同實(shí)體信息,這樣的應(yīng)用方式給用戶帶來(lái)了很大的靈活性。
關(guān)鍵詞:連接查詢數(shù)據(jù)庫(kù)
中圖分類號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼: A文章編號(hào):1672-1578(2009)11-0095-01
在SQL SERVER數(shù)據(jù)庫(kù)中,連接類型可以分為三種:交叉連接、內(nèi)連接、外連接和自連接。
1 交叉連接
交叉連接又稱非限制連接,它將兩個(gè)表不加任何約束地組合在一起,也就是將第一個(gè)表的所有記錄分別與第二個(gè)表的每條記錄組成新記錄,連接結(jié)果返回第一個(gè)數(shù)據(jù)表中符合查詢條件的數(shù)據(jù)行乘以第二個(gè)數(shù)據(jù)表中符合查詢條件的數(shù)據(jù)行數(shù)。交叉連接有兩種語(yǔ)法格式:
格式1:select 列名列表 from 表名1 cross join 表名2;
格式2:select 列名列表 from 表名1,表名2。
例如:t1表中有四條記錄,t2表中有三條記錄,交叉連接的結(jié)果中有12條記錄,進(jìn)行交叉連接的語(yǔ)法為:
Select * from t1 cross join t2,或select * from t1,t2。
在實(shí)際應(yīng)用中使用交叉連接產(chǎn)生的結(jié)果集一般沒有什么意義,但在數(shù)據(jù)庫(kù)的數(shù)據(jù)模式上有重要作用。
2 內(nèi)連接
內(nèi)連接也稱自然連接,使用比較運(yùn)算符進(jìn)行表間列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行。內(nèi)連接就是將交叉連接產(chǎn)生的結(jié)果集經(jīng)過連接條件過濾后得到的,它是將兩個(gè)表中滿足條件的記錄組合在一起,通常采用“on 主鍵=外鍵”的形式,通常有兩種語(yǔ)法格式:
格式1:select 列名列表 from 表名1[inner]join 表名2 on 表名1.列名=表名2.列名。
格式2:select 列名列表 from 表名1,表名2where 表名1.列名=表名2.列名。
內(nèi)連接根據(jù)所使用的比較方式的不同,又分為等值連接、不等值連接和自然連接
2.1等值連接
等值連接是指在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。
例如:查詢teacher數(shù)據(jù)庫(kù)的class_info表中所有課程的選課信息,Select * from class_info as a inner join student_choose as b on a.課程編號(hào)=b.課程編號(hào)。
2.2不等值連接
不等值連接是指在連接條件使用除等于運(yùn)算符外的其他比較運(yùn)算符比較被連接列的列值。這些運(yùn)算符包括>、>=、<=、<、
!>、!<和<>。
例如:查詢teacher數(shù)據(jù)庫(kù)的class_info表中所有課程的選課信息,Select * from class_info as a inner join student_choose as b on a.課程編號(hào)<>b.課程編號(hào)。
2.3自然連接
自然連接只有在兩個(gè)表有相同名稱的列且列的含義相似時(shí)才能使用,將在同名列上進(jìn)行相等連接。自然連接是指在連接條件中使用(=)運(yùn)算符比較被連接的列值,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中重復(fù)的列。
例如:查詢學(xué)生信息和成績(jī)信息,要求連接的列只顯示一次,Select student_info.*,student_grade.* from stusent_info as a inner join student_grade as b on a.學(xué)號(hào)=b.學(xué)號(hào)。
3 外連接
外連接分左外連接、右外連接和全外連接三種。外連接除生成內(nèi)連接生成的結(jié)果集外,還可以使一個(gè)表(左外連接、右外連接)或兩個(gè)(全外連接)中不滿連接條件的記錄也出現(xiàn)在結(jié)果集中。
3.1左外連接
左外連接就是將左表的所有記錄分別與右表的每條記錄進(jìn)行連接組合,結(jié)果集中除返回內(nèi)部連接的記錄外,還在查詢結(jié)果中顯示出左表中不符合條件的記錄并在右表的相應(yīng)列中添上NULL值,語(yǔ)法格式為:
Select 列名列表 from 表名1 left [outer] join 表名2 on 表名1.列名=表名2.列名。
例如:查詢Teacher數(shù)據(jù)庫(kù)中的student_info表中所有沒有成績(jī)的學(xué)生信息,Select * from stuent_info as a left join student_grade as b on a.學(xué)號(hào)=b.學(xué)號(hào)。
3.2右外連接
右外連接就是將左表的所有記錄分別與右表的每一條記錄進(jìn)行連接組合,結(jié)果集中除返回內(nèi)部連接的記錄外,還在查詢結(jié)果集中顯示出右表中不符合條件的記錄并在左表的相應(yīng)列中添上NULL值。其語(yǔ)法格式為:
Select 列名列表 from 表名1 right [outer] join 表名2 on 表名1.列名=表名2.列名。
例如:查詢teacher數(shù)據(jù)庫(kù)中student_info表中所有有成績(jī)的學(xué)生信息,Select * from student_info as a right join student_grade as b on a.學(xué)號(hào)=b.學(xué)號(hào)。
3.3全外連接
全外連接就是將左邊數(shù)據(jù)表的所有數(shù)據(jù)分別與右邊數(shù)據(jù)表的每條數(shù)據(jù)進(jìn)行連接組合,返回的結(jié)果除內(nèi)連接的數(shù)據(jù)外,還有兩個(gè)表中不符合條件的數(shù)據(jù),并在左表或右表的相應(yīng)列中填上NULL值,其語(yǔ)法格式為:
Select 列名列表 from 表名1 full [outer] join 表名2 on 表名1.列名=表名2.列名。
例如:查詢Teacher數(shù)據(jù)庫(kù)中的student_info表中所有有成績(jī)和沒有成績(jī)的學(xué)生信息,Select * from student_info as a full join student_grade as b on a.學(xué)號(hào)=b.學(xué)號(hào)。
4 自連接查詢
自連接就是一張表的兩個(gè)副本之間的內(nèi)連接,使用它可以將同一個(gè)表的不同行連接起來(lái)。使用自連接時(shí),必須為表指定兩個(gè)不同的別名,使之在邏輯上成為兩個(gè)表。
例如:查詢學(xué)生檔案中畢業(yè)院校相同的學(xué)生信息,Select a.* from student_info as a,student_info as b where a.畢業(yè)院校=b.畢業(yè)院校 and a.學(xué)號(hào)<>b.學(xué)號(hào)。
參考文獻(xiàn):
[1]耿文蘭,王慶建等編著.SQL Server 2000數(shù)據(jù)庫(kù)管理與開發(fā)[M].電子工業(yè)出版社.
[2]劉桂林,謝堯等編著.SQL Server 數(shù)據(jù)庫(kù)應(yīng)用技術(shù)[M].
作者簡(jiǎn)介:邢文端(1975-),女,本科學(xué)歷,計(jì)算機(jī)及其應(yīng)用專業(yè),職稱:講師。