簡體   English   中英

在Oracle11g SQL中聯接三個表

[英]Joining three tables in Oracle11g SQL

通常,這對我來說不是問題,但是1.我的教練從未教過我們如何聯接三個這樣的表和2.甚至在本周的作業中也沒有涉及。 但是因為這些數據庫不在我們通常使用的Oracle接口數據庫中,所以我什至無法進行反復試驗。

我有三張桌子。 內容對這個問題並不重要。 第一個表是STUDENTS,具有LAST_NAME,SID和MID列(此處兩個MID單元具有NULL值)。 第二個表是COURSES,其列為COURSES(不知道為什么設計此問題的人決定將其命名為與表相同)和CID(我假設這是主鍵)。第三個表是ENROLLED,其列為SID和CID 。

我被問到以下問題“使用上面顯示的三個表來回答以下問題:a。您將使用哪種聯接來聯接所有三個表?編寫將產生所需結果的語法。b。命名兩個表可以用來從自然聯接中檢索數據。編寫可產生所需結果的語法。”

我被困在這一個。 到目前為止,Internet並沒有太大幫助,甚至Oracle的資料也沒有。 我們了解了聯接的知識,但從未聯接兩個以上的表。 任何幫助,將不勝感激。

具有LAST_NAME,SID和MID COURSES列,具有COURSES和CID ENROLLED列,具有SID和CID列的學生。

如果兩個表都有一個共同的列,則一個表可以與另一個表連接。 所以這里的學生表可以和ENROLLED一起使用,

ENROLLED.SID =學生.SID

和課程可以與ENROLLED一起加入

ENROLLED.CID =課程.CID

您將使用哪種聯接來聯接所有三個表? 編寫將產生所需結果的語法。

select last_name, courses
  from students 
    left join enrolled on students.sid = enrolled.sid
    left join courses on enrolled.cid = courses.cid

要么

select last_name, courses from students
  left join (select * from enrolled join courses using (cid)) using (sid)

SQLFiddle

在這里,我使用左加入來顯示學生,即使他沒有在任何地方注冊。 但是,您也可以使用內部聯接來避免這種情況,也可以使用完全聯接來顯示所有內容-在某個地方就讀的學生,未就讀的學生和沒有學生的課程。 在這個Stack Overflow主題中,您將很好地解釋不同類型的聯接如何工作。

命名兩個表,這些表可用於從自然聯接中檢索數據。 編寫將產生所需結果的語法。

這些對是:ENROLLED和STUDENTS(公共密鑰SID)以及ENROLLED和COURSES(公共密鑰CID)。

select * from enrolled natural join students;

select * from enrolled natural join courses;

您可以使用SQLFiddle測試您自己的想法,就像我第一次查詢時所用的那樣。 從列表框中選擇數據庫(Oracle),左側面板中的下一個構建模式(創建表,插入數據),然后在右側面板中編寫查詢。 如果查詢成功運行,結果將顯示在底部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM