若是一個查詢同時涉及兩個以上的表,則稱之爲連接查詢,連接查詢是關係數據庫中最主要的查詢,主要包括等值連接查詢、非等值連接查詢、自身連接查詢、外連接查詢和複合條件連接查詢。
這篇博文咱們來對多表連接進行學習。數據庫
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
【連接的分類】性能
一個用戶查詢請求涉及到多個表的時候,連接兩個表的條件爲=時,就是等值連接查詢;其餘的運算符連接的就是非等值查詢。 注意:連接條件中的各連接字段類型必須是可比的,但沒必要是相同的,整型和實型是可比的,可是字符型和整型就不可比。學習
內鏈接,也被稱爲天然鏈接,只有兩個表相匹配的行才能在結果集中出現。返回的結果集選取了兩個表中全部相匹配的數據,捨棄了不匹配的數據。spa
外鏈接不只包含符合鏈接條件的行,還包含左表(左鏈接時)、右表(右鏈接時)或兩個邊接表(全外鏈接)中的全部數據行。設計
連接兩個表的條件爲=時,就是等值連接查詢blog
SQL> SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc 2 FROM emp, dep
3 WHERE emp.deptno=dept.deptno;
注意:咱們還可使用And運算符添加其餘查詢條件,如:數學
注意:咱們還能夠用列別名提升性能和限制歧義列名table
如:class
SQL> SELECT e.ename, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal 4 BETWEEN s.losal AND s.hisal;
一個表與本身進行鏈接,這種鏈接稱爲表的自身鏈接查詢。
具體實現的時候,咱們能夠把本身的表起兩個別名,一個是first, 一個是second.在設計的時候能夠把這兩個表想成是徹底兩個同樣的表,可是各自的字段咱們均可以只有調用訪問。
SQL> SELECT worker.ename||' leader is '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno;
<--笛卡爾積寫法--> SQL> SELECT emp.empno, emp.ename, emp.deptno,dept.deptno, dept.loc FROM emp, dept;
<--交叉鏈接寫法--> SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.loc FROM emp CROSS JOIN dept;
SELECT empno,ename,sal,deptno,loc FROM emp NATURAL JOIN dept;
天然鏈接是使用全部名稱和數據類型相匹配的列做爲鏈接條件,而USING子句能夠指定用某個或某幾個相同名字和數據類型的列做爲鏈接條件,如:
SELECT e.ename,e.ename,e.sal,deptno,d.loc FROM emp e JOIN dept d USING (deptno) WHERE deptno = 20 ;
SELECT e.empno, e.ename, d.loc,m.ename FROM emp e JOIN dept d ON e.deptno = d.deptno JOIN emp m ON e.mgr = m.empno;
<--左外鏈接--> SELECT e.ename,e.deptno,d.loc FROM emp e LEFT OUTER JOIN dept d ON (e.deptno = d.deptno);
<--右外鏈接--> SELECT e.ename,e.deptno,d.loc FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);
<--全鏈接--> SELECT e.ename,e.deptno,d.loc FROM emp e FULL OUTER JOIN dept d ON (e.deptno = d.deptno);