Mysql(笛卡爾積、等值連接、自然連接、外連接)


1、笛卡爾積:

笛卡爾積的元素是元組,關系A和B的笛卡爾積可以記為(AXB),如果A為a目,B為b目,那么A和B的笛卡爾積為(a+b)列的元組集合。

(1)學生表和分數表中的信息:

學生表:

 

 

 分數表(大概就是這個樣子):

 

 

 (2)學生表和分數表執行笛卡爾積后:

SELECT *
FROM student JOIN score

 可以看出,執行sql語句后,student表中的每一條語句分別與score表中的每一條語句連接。

2、內連接:

內連接又稱為普通連接或自然連接。在說自然連接之前,應該先說一下連接的概念,連接是從笛卡爾積中選取屬性間滿足一定條件的元組。連接運算又可以分為等值連接和自然連接。

(1)等值連接:

當條件為“=”的連接為等值連接,是連接屬性值相等的那些元組。其結果是連接的表的所有列,包括重復列。

還是運用上面的學生表和分數表:

執行以下語句(隱式內連接):

過濾掉沒有用的元組,保留想要的有意義的元組。

SELECT *
FROM student,score
WHERE student.studentno=score.studentno

或者(顯式內連接):

SELECT *
FROM student INNER JOIN score ON
student.studentno=score.studentno

即:只有學生表的學號屬性和分數表的學號屬性相等的時候才會將表中的兩個元組相連,與笛卡爾積相比,等值連接添加了限制條件。

(2)自然連接:

自然連接不僅要求連接的兩個字段必須同名,還要求將結果中重復的屬性列去掉。

執行語句:

SELECT *
FROM student NATURAL JOIN score

  以上自然連接的查詢的元組的條數與等值連接相同,只不過是相同的屬性(studentno)只保留了一個。

3、外連接

在以上的學生表和分數表的連接中,存在有些學生分數表中沒有對應的該學生的分數信息,同樣也有可能存在有分數而沒有該學生信息的情況。這些找不到對應的元組進行匹配的元組稱為懸浮元組。

如果把懸浮元組也保留在結果中,那么這種連接就叫做外連接。

(1)左外連接(只保留左邊關系中的懸浮元組):

為了使查詢結果更明顯,故意制造一個沒有分數的學生:

INSERT INTO student VALUES('111','12345566','1111-11-11','111','111','','zhai','890')

插入后如果進行等值連接或自然連接都不會出現學號為"111"的學生的信息。但是,如果進行左外連接的查詢,會出現該學生的信息,但是有關該學生的成績的相關信息為空。

執行以下語句,進行學生表和分數表的左外連接:

SELECT *
FROM student LEFT OUTER JOIN score
ON student.studentno=score.studentno

 

 (2)右外連接(只保留右邊關系中的懸浮元組):

創建一個學生的分數元組,只有成績而沒有與之對應的學生(學號):

INSERT INTO score VALUES('55','1234344','c8848','87','98','123')

插入后如果進行等值連接或自然連接都不會出現學號為1234344的分數,但是如果進行右外連接,就會出現只有學生的分數信息,而沒有該學生的基本信息的情況。

SELECT *
FROM student RIGHT OUTER JOIN score
ON student.studentno=score.studentno

 

 4、內連接、外連接之間的關系:

 

 如果用上圖來表示內連接與外連接之間的關系的話:

2:代表內連接

1、2:左外連接

2、3:右外連接

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM