1.等值連接
SQL> ---查詢出員工和員工的部門的名稱是什么(涉及兩個(gè)表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;
笛卡爾積誉简,笛卡爾積(沒(méi)有等值條件) emp 14條 dept 4條 結(jié)果 14*4 = 56條記錄
SQL> select e.empno,e.ename,d.dname from emp e,dept d;
內(nèi)連接(和等值查詢的結(jié)果一樣) 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),以左表為準(zhǔn) emp e left join dept d,left join左邊的emp為左表,left join右邊 dept為右表
SQL> 左外聯(lián)莺褒,以左表emp為準(zhǔn),不管關(guān)聯(lián)的字段deptno是否在右表dept中是否有對(duì)應(yīng)的數(shù)據(jù)白粉,左表emp的數(shù)據(jù)全部要顯示(注意:查詢結(jié)果合理传泊,實(shí)戰(zhàn)中推薦使用左外聯(lián))
左外聯(lián),以左表emp為準(zhǔn),不管關(guān)聯(lián)的字段deptno是否在右表dept中是否有對(duì)應(yīng)的數(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為準(zhǔn),不管關(guān)聯(lián)的字段deptno是否在左表emp中是否有對(duì)應(yīng)的數(shù)據(jù),右表dept的數(shù)據(jù)全部要顯示,坐標(biāo)emp中關(guān)聯(lián)的deptno為null的記錄不顯示
full [outer] join 完全連接 都要顯示左表和右表的數(shù)據(jù)鹃祖,不管左表emp的關(guān)聯(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? ;
如何使用(+)進(jìn)行多表查詢(注意:該語(yǔ)法在別的數(shù)據(jù)庫(kù)不支持溪椎,所以不通用,不推薦使用)
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來(lái)實(shí)現(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>