Oracle系列:(13)多表查询

前端之家收集整理的这篇文章主要介绍了Oracle系列:(13)多表查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

多表查询包括等值连接等值连接外连接自连接

内连接包括等值连接非等值连接


员工表emp和部门表dept的笛卡尔集(笛卡尔集表=列数之和,行数之积,笛卡尔集表内中有些数据是不符合要求的)

selectemp.ename,dept.dname
fromemp,dept;


使用等值连接/内连接(只能使用=号),显示员工的编号,姓名,部门名,使用表别名简化

selectemp.empno,emp.ename,dept.dname,dept.deptno
fromemp,dept
whereemp.deptno=dept.deptno;


使用非等值连接(不能使用=号,其它符号可以,例如:>=,<=,<>,betwen and等),显示员工的编号,姓名,月薪,工资级别

selecte.empno,e.ename,e.sal,s.grade
fromempe,salgrades
wheree.salbetweens.losalands.hisal;

wKioL1fQAs-BVxIQAAAmiWt1mOE959.png


内连接查询:只能查询出符合条件的记录

外连接查询:既能查询出符合条件的记录,也能根据一方强行将另一个方查询出来


使用外连接,按部门10,20,30,40号,统计各部门员工人数,要求显示部门号,部门名,人数

部门号 部门名 人数

10 ACCOUNTING 3

20 RESEARCH 5

30 SALES 6

40 OPERATIONS 0


等值连接/非等值连接/内连接只会查询出多张表中,根据某个字段匹配,符合条件的记录,不符合条件的记录是不会存在的


左外连接[是oracle专用的,不是sql99规则]:

selectdept.deptno"部门号",dept.dname"部门名",count(emp.empno)"人数"
fromdept,emp
wheredept.deptno=emp.deptno(+)
groupbydept.deptno,dept.dname;

wKioL1fQA6CiQYAXAAAZuLDkETw677.png


右外连接:

selectdept.deptno"部门号",emp
whereemp.deptno(+)=dept.deptno
groupbydept.deptno,dept.dname;

wKiom1fQA9aBCaIrAAAXXpsgY2E344.png


使用左外连接,按部门10,40号,统计各部门员工人数,要求显示部门号,部门名,人数,且按人数降序排列

selectdept.deptno"部门号",dept.dname
orderby3desc;

wKioL1fQBBDQ9lwtAAAYlB_QPho010.png


使用自连接,显示"SMITH的上级是FORD"这种格式

selectusers.ename||'的上级是'||boss.ename
fromempusers,empboss
whereusers.mgr=boss.empno;

只有13条记录,不含有KING

wKiom1fQBfTCc4luAAAw7Bo6H64544.png


基于上述问题,将KING的上级是“”显示出来

selectusers.ename||'的上级是'||boss.ename
fromempusers,empboss
whereusers.mgr=boss.empno(+);

14条记录

注意:自连接也用到内连接和外连接

wKioL1fQBjLwIvfiAAA4UWZUO8g529.png

原文链接:https://www.f2er.com/oracle/212702.html

猜你在找的Oracle相关文章