簡單鏈接僅僅是經過select子句和from子句來鏈接多個表,其查詢結果是一個經過笛卡爾積所生成的表。在實際需求中,因爲笛卡爾積包含了大量的冗餘信息,通常沒有任何意義,一般爲了不這種狀況,在select語句提供一個鏈接條件,過濾無心義的數據。例如: sql
--學生表和性別表關聯,拿學生表的性別id和性別表的id來關聯過濾 select * from student s,gender g where s.gender = g.id;
內鏈接是一種常見的鏈接,用關鍵字inner join.innner能夠省略,也就是說,只使用join鏈接的爲內鏈接。鏈接的條件必須用on來進行條件匹配。若是還想進一步限制,則能夠加where條件句。 oracle
如: spa
select * from student s join gender g on s.gender = g.id where s.name='張三';
天然鏈接與內鏈接的功能相似,在使用天然鏈接查詢多個表時,oracle會下降一個表中的那些列與第二個表中具備相同名稱的列進行鏈接。在天然鏈接中,用戶不須要明確指定進行鏈接的列。系統自動完成這一任務。天然鏈接在實際應用中不多。由於有個限制條件,鏈接的各個表之間必須有相同名稱的列。但這在實際應用中可能和實際引用的含義發生矛盾。 code
外鏈接分爲左外鏈接(LEFT OUTER JOIN或LEFT JOIN)、右外鏈接(RIGHT OUTER JOIN或RIGHT JOIN)和全外鏈接(FULL OUTER JOIN或FULL JOIN)三種。與內鏈接不一樣的是,外鏈接不僅列出與鏈接條件相匹配的行,還列出左表(左外鏈接時候)、右表(右外鏈接時)或兩個表(全外鏈接時)中全部複合搜索條件的數據行。徹底外鏈接至關於同時執行一個左外鏈接和一個右外鏈接。而後將結果集合並,並消除重複記錄行。 class
其中外鏈接還能夠採用一種寫法: select
--這兩種寫法一致(右外鏈接) select * from student s,gender g where s.gender(+) = g.id; select * from student s right join gender g on s.gender = g.id; --這兩種寫法一致(左外鏈接) select * from student s,gender g where s.gender = g.id(+); select * from student s left join gender g on s.gender = g.id;
自鏈接是在from子句中兩次指定了同一個表,爲了在其餘子句中區分,分別爲表指定了表別名。這樣oracle就能夠將兩個表看做是分離的兩個數據源,而且從中獲取相應的數據。 搜索