一. 前言:
通常在項目中對表的查詢都是關聯多張表,多表查詢就涉及到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]
