內連接、外連接、自然連接


一. 前言:

通常在項目中對表的查詢都是關聯多張表,多表查詢就涉及到sql的內連接、外連接和自連接查詢。本篇文章將簡單的介紹這些sql連接的使用,希望對大家有所幫助。


二. 數據准備:

先准備兩張表:

1. 學生表:student

select * from student;


2. 教師表:teacher

select * from teacher;


 

三. 關聯查詢:

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. 外連接

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

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;

第三種寫法:"(+)" 所在位置的另一側為連接的方向

select t.teacher_name, s.student_name from teacher t, student s where t.id = s.teacher_id(+);



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

第一種寫法:()

select t.teacher_name, s.student_name from teacher t right join student s on t.id = s.teacher_id;

第二種寫法:

select t.teacher_name, s.student_name from teacher t right outer join student s on t.id = s.teacher_id;

第三種寫法:"(+)" 所在位置的另一側為連接的方向

select t.teacher_name, s.student_name from teacher t, student s where t.id(+) = s.teacher_id;



2.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 .. on)

select t.teacher_name, s.student_name from teacher t full outer join student s on t.id = s.teacher_id;



3. 自連接

自連接,連接的兩個表都是同一個表,同樣可以由內連接,外連接各種組合方式,按實際應用去組合。

SELECT a.*, b.* FROM table_1 a,table_1 b WHERE a.[name] = b.[name] 


免責聲明!

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



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