SQL查詢--內連接、外連接、自連接查詢


先創建2個表:學生表和教師表

 

1.內連接:

在每個表中找出符合條件的共有記錄。[x inner join y on...] 
第一種寫法:只用where
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t,student s WHERE t.ID=s.TEACHER_ID
第二種寫法:使用
join..on.. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t JOIN student s ON t.ID=s.TEACHER_ID
第三種寫法:使用inner
join .. on.. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t INNER JOIN student s ON t.ID=s.TEACHER_ID

 

2.外連接:外連接有三種方式:左連接,右連接和全連接

(1)左連接:根據左表的記錄,在被連接的右表中找出符合條件的記錄與之匹配,如果找不到與左表匹配的,用null表示 [x left [outer] join y on...]

第一種寫法:left join .. on ..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t LEFT JOIN student s ON t.ID=s.TEACHER_ID
第二種寫法:
left outer join .. on .. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t LEFT OUTER JOIN student s ON t.ID=s.TEACHER_ID

 

(2)右連接:根據右表的記錄,在被連接的左表中找出符合條件的記錄與之匹配,如果找不到匹配的,用null填充 [x right [outer] join y on...]

第一種寫法:right join .. on ..
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t RIGHT JOIN student s ON t.ID=s.TEACHER_ID
第二種寫法:
right outer join .. on .. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t RIGHT OUTER JOIN student s ON t.ID=s.TEACHER_ID

 

(3)全連接:返回符合條件的所有表的記錄,沒有與之匹配的,用null表示(結果是左連接和右連接的並集)

第一種寫法:(full join .. on ..)
select t.teacher_name, s.student_name from teacher t full join student s on t.id = s.teacher_id;
第二種寫法:(
full outer join .. onselect t.teacher_name, s.student_name from teacher t full outer join student s on t.id = s.teacher_id;

 注意:Oracle數據庫支持full join,mysql是不支持full join的


如果直接查詢2張表,將得到一個笛卡爾積,兩個表的乘積 select * from teacher,student;

關於笛卡爾積的說明,請參考博客:https://blog.csdn.net/csdn_hklm/article/details/78394412

 


免責聲明!

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



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