1.等值連接
SQL> ---查詢出員工和員工的部門的名稱是什么(涉及兩個表emp,dept的聯(lián)合查詢,找等值條件? emp.deptno = dept.deptno)
SQL> ---1.等值查詢
SQL> select e.*,d.dname from emp e,dept d where e.deptno = d.deptno;
笛卡爾積,笛卡爾積(沒有等值條件) emp 14條 dept 4條 結果 14*4 = 56條記錄
SQL> select e.empno,e.ename,d.dname from emp e,dept d;
內(nèi)連接(和等值查詢的結果一樣) inner join
SQL> select e.empno,e.ename,d.dname from emp e inner join dept d on e.deptno = d.deptno;
外連接 left [outer] join 左外聯(lián),right [outer] join 右外聯(lián),full join完全連接
left [outer] join 左外聯(lián):
rows selected
SQL> ----3.left [outer] join 左外聯(lián),以左表為準 emp e left join dept d,left join左邊的emp為左表,left join右邊 dept為右表
SQL> 左外聯(lián),以左表emp為準,不管關聯(lián)的字段deptno是否在右表dept中是否有對應的數(shù)據(jù),左表emp的數(shù)據(jù)全部要顯示(注意:查詢結果合理,實戰(zhàn)中推薦使用左外聯(lián))
左外聯(lián),以左表emp為準,不管關聯(lián)的字段deptno是否在右表dept中是否有對應的數(shù)據(jù),左表emp的數(shù)據(jù)全部要顯示
SQL> select e.empno,e.ename,d.dname from emp e left join dept d on e.deptno = d.deptno;
right [outer] join 右外聯(lián),右外聯(lián),以右表dept為準,不管關聯(lián)的字段deptno是否在左表emp中是否有對應的數(shù)據(jù),右表dept的數(shù)據(jù)全部要顯示,坐標emp中關聯(lián)的deptno為null的記錄不顯示
full [outer] join 完全連接 都要顯示左表和右表的數(shù)據(jù),不管左表emp的關聯(lián)字段deptno為null,還是右表dept的數(shù)據(jù)deptno=40被左表emp引用(注意:mysql不支持)
聯(lián)合查詢中的三表聯(lián)合查詢
SQL> select e.empno,e.ename,e.job,e.sal,d.dname,g.grade
? 2? from emp e
? 3? left join dept d on e.deptno = d.deptno
? 4? left join salgrade g on e.sal between g.losal and g.hisal
? 5? order by e.empno
? 6? ;
如何使用(+)進行多表查詢(注意:該語法在別的數(shù)據(jù)庫不支持,所以不通用,不推薦使用)
SQL> select e.empno, e.ename, d.deptno, d.dname
? 2? from emp e, dept d
? 3? where e.deptno(+) = d.deptno;
EMPNO ENAME? ? ? DEPTNO DNAME
----- ---------- ------ --------------
7499 ALLEN? ? ? ? ? 30 SALES
7521 WARD? ? ? ? ? 30 SALES
7566 JONES? ? ? ? ? 20 RESEARCH
7654 MARTIN? ? ? ? 30 SALES
7698 BLAKE? ? ? ? ? 30 SALES
7782 CLARK? ? ? ? ? 10 ACCOUNTING
7788 SCOTT? ? ? ? ? 20 RESEARCH
7844 TURNER? ? ? ? 30 SALES
7876 ADAMS? ? ? ? ? 20 RESEARCH
7900 JAMES? ? ? ? ? 30 SALES
7902 FORD? ? ? ? ? 20 RESEARCH
7934 MILLER? ? ? ? 10 ACCOUNTING
7839 KING? ? ? ? ? 10 ACCOUNTING
? ? ? ? ? ? ? ? ? ? 40 OPERATIONS
14 rows selected
使用using來實現(xiàn)聯(lián)合查詢
SQL> select e.empno,e.ename,d.deptno,d.dname from emp e inner join? dept d using(deptno);
select e.empno,e.ename,d.deptno,d.dname from emp e inner join? dept d using(deptno)
ORA-25154: USING 子句的列部分不能有限定詞
SQL> select e.empno,e.ename,deptno,d.dname from emp e inner join? dept d using(deptno);
EMPNO ENAME? ? ? DEPTNO DNAME
----- ---------- ------ --------------
7499 ALLEN? ? ? ? ? 30 SALES
7521 WARD? ? ? ? ? 30 SALES
7566 JONES? ? ? ? ? 20 RESEARCH
7654 MARTIN? ? ? ? 30 SALES
7698 BLAKE? ? ? ? ? 30 SALES
7782 CLARK? ? ? ? ? 10 ACCOUNTING
7788 SCOTT? ? ? ? ? 20 RESEARCH
7844 TURNER? ? ? ? 30 SALES
7876 ADAMS? ? ? ? ? 20 RESEARCH
7900 JAMES? ? ? ? ? 30 SALES
7902 FORD? ? ? ? ? 20 RESEARCH
7934 MILLER? ? ? ? 10 ACCOUNTING
7839 KING? ? ? ? ? 10 ACCOUNTING
13 rows selected
SQL>