首页 > 代码库 > oracle 多表查询
oracle 多表查询
Oracle 连接:
Equijoin:等值连接 rowa=rowb
Non-equijoin:不等值连接
Outer join:外连接 分为左链接和右链接,左链接:rowa=rawb(+);右链接rowa(+)=rawb
Self join:自连接:利用一个表可以有多个别名,自连接不太适合操作大表
1 SQL> --等值连接 2 SQL> select e.empno,e.ename,e.sal,d.dname 3 2 from emp e,dept d 4 3 where e.deptno=d.deptno; 5 6 EMPNO ENAME SAL DNAME 7 ----- ---------- --------- -------------- 8 7369 SMITH 800.00 RESEARCH 9 7499 ALLEN 1600.00 SALES 10 7521 WARD 1250.00 SALES 11 7566 JONES 2975.00 RESEARCH 12 7654 MARTIN 1250.00 SALES 13 7698 BLAKE 2850.00 SALES 14 7782 CLARK 2450.00 ACCOUNTING 15 7839 KING 5000.00 ACCOUNTING 16 7844 TURNER 1500.00 SALES 17 7900 JAMES 950.00 SALES 18 7902 FORD 3000.00 RESEARCH 19 7934 MILLER 1400.00 ACCOUNTING 20 21 12 rows selected 22 23 SQL> --不等值连接 24 SQL> select e.ename,e.sal,s.grade 25 2 from emp e,salgrade s 26 3 where e.sal between s.losal and s.hisal 27 4 ; 28 29 ENAME SAL GRADE 30 ---------- --------- ---------- 31 SMITH 800.00 1 32 JAMES 950.00 1 33 WARD 1250.00 2 34 MARTIN 1250.00 2 35 MILLER 1400.00 2 36 TURNER 1500.00 3 37 ALLEN 1600.00 3 38 CLARK 2450.00 4 39 BLAKE 2850.00 4 40 JONES 2975.00 4 41 FORD 3000.00 4 42 KING 5000.00 5 43 44 12 rows selected 45 46 SQL> --外连接 47 SQL> select d.deptno,d.dname,count(e.empno) 48 2 from dept d,emp e 49 3 where d.deptno=e.deptno 50 4 group by d.deptno,d.dname 51 5 ; 52 53 DEPTNO DNAME COUNT(E.EMPNO) 54 ------ -------------- -------------- 55 10 ACCOUNTING 3 56 20 RESEARCH 3 57 30 SALES 6 58 59 60 SQL> --左外连接 61 SQL> select d.deptno,d.dname,count(e.empno) 62 2 from dept d,emp e 63 3 where d.deptno=e.deptno(+) 64 4 group by d.deptno,d.dname 65 5 order by deptno 66 6 ; 67 68 DEPTNO DNAME COUNT(E.EMPNO) 69 ------ -------------- -------------- 70 10 ACCOUNTING 3 71 20 RESEARCH 3 72 30 SALES 6 73 40 OPERATIONS 0 74 75 SQL> --自连接 76 SQL> select e.ename 员工,b.ename 老板 77 2 from emp e,emp b 78 3 where e.empno=b.mgr; 79 80 员工 老板 81 ---------- ---------- 82 FORD SMITH 83 BLAKE ALLEN 84 BLAKE WARD 85 KING JONES 86 BLAKE MARTIN 87 KING BLAKE 88 KING CLARK 89 BLAKE TURNER 90 BLAKE JAMES 91 JONES FORD 92 CLARK MILLER 93 94 11 rows selected 95 96 SQL> --层次查询: 对同一张表的前后两次操作,进行连接 97 SQL> select level,empno,ename,mgr 98 2 from emp 99 3 connect by prior empno=mgr100 4 start with mgr is null101 5 order by 1102 6 ;103 104 LEVEL EMPNO ENAME MGR105 ---------- ----- ---------- -----106 1 7839 KING 107 2 7566 JONES 7839108 2 7698 BLAKE 7839109 2 7782 CLARK 7839110 3 7844 TURNER 7698111 3 7900 JAMES 7698112 3 7654 MARTIN 7698113 3 7521 WARD 7698114 3 7934 MILLER 7782115 3 7902 FORD 7566116 3 7499 ALLEN 7698117 4 7369 SMITH 7902118 119 12 rows selected
oracle 多表查询
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。