1. 程式人生 > 實用技巧 >SQL查詢--內連線、外連線、自連線查詢-轉載

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