7.多表查询

一:多表查询必须至少有一个条件 

--(1)要求显示雇员的名字、工资及所在部门的名称 (emp,dept)
select ename,sal,dname from emp,dept where emp.deptno=dept.deptno

--(2)如何显示部门编号为10的部门名、员工名和工资?
select dname,ename,sal from dept,emp where emp.deptno=10 and emp.deptno=dept.deptno

--(3)显示雇员名、雇员工资及所在部门的名字,并按照部门名称进行排序。
select ename,sal,dname from dept,emp where emp.deptno=dept.deptno order by dname

二:内连接

特点:特点:只有两张表同时匹配上,才会显示出来

语法结构:select列名 from 表1 inner join 表2 on条件

--(1)显示员工的信息和部门名称
select emp.*,dname from emp inner join dept on emp.deptno=dept.deptno
--select emp.*,dname from emp,dept where emp.deptno=dept.deptno

三:外连接

  (1)左连接  :左侧的表完全显示
  语法结构: select 列名 from 表1 left join 表2 on 条件
--(1) 显示所有员工的姓名和部门名称,如果员工没有部门,也要显示员工的名字
select ename,dname,emp.deptno from emp left join dept on emp.deptno=dept.deptno   --第一种方法
select ename,dname,emp.deptno from emp,dept where emp.deptno=dept.deptno(+)    --第二种方法
(2)右连接:右边的表完全显示
语法结构: select 列名 from 表1 right join 表2 on 条件
--(2) 显示员工的名字和部门名称,要显示所有部门,即使部门里没有员工。
select ename,dname,emp.deptno from emp right join dept on emp.deptno=dept.deptno  --第一种方法
select ename,dname,emp.deptno from emp,dept where emp.deptno(+)=dept.deptno    --第二种方法

(3)完全连接:完全显示两张表,没有匹配的记录置为空
语法结构: Select 列名 from 表1 full outer join 表2 on 条件
--(3)完全显示两张表,没有匹配的记录置为空,显示所有员工的名字和所有部门的名字
select ename,dname,emp.deptno from emp full outer join dept on emp.deptno=dept.deptno  

四:自连接

    自连接: 指的是在同一张表中的连接查询
--(1)要显示RACHEL的上级领导的姓名
select ename from emp where empno=(select mgr from emp where ename='RACHEL')
select * from emp

--(2)显示员工的姓名和上级领导的姓名  worker.mgr=boss.empno
select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno







猜你喜欢

转载自blog.csdn.net/RachelHYC/article/details/79085717