在这里插入代码--多表联合查询:
--当需要获取的数据分布在多张表中,考虑使用联合查询
--SQL99方式
--依然可以使用别名
--如果使用on或者useing关键字对结果进行筛选,必须使用inner jion作用表与表的链接,其中inner可以省略,
--外连接的outer关键字可以不写
--依然可以继续使用分组,having 排序等
--笛卡尔积 使用 cross join 关键字
--select 内容 from 表名 cross join
select * from emp cross join dept;
--筛选
--查询员工姓名,工作,薪资,部门名称
--自然连接
--使用select 内容 from 表名 natrual join 表名
--特点1:底层先笛卡尔积,然后按照同名同字段自动进行筛选
--缺点1:如果想按照字段名不同,但是值相同进行筛选怎么办
--缺点2:如果只想按照部分字段结果筛选怎么办
select * from emp natural join dept;
--解决1 使用using关键字
--作用:知名使用指定的字段对联合查询的结果进行等值筛选
--注意1:指明的字段必须是两表的同名同值字段
--使用 select 内容 from表名 inner join 表名 using(字段名,字段名。。)
select * from emp inner join dept using(deptno);
--解决2 使用on关键字进行自定义连接条件筛选(等值筛选,不等值筛选)
--注意:普通筛选条件使用where筛选,不要使用on进行。好处:SQL语句的阅读性变强
--使用:select 内容 from表名 inner join 表名 on 连接条件 where 普通筛选条件按
select * from emp inner join dept on emp.deptno=dept.DEPTNO where sal>2000;
--外连接
--左外连接 select 内容 from表名 left outer join 表名 on 连接条件
--查询员工姓名,工作,薪资,部门名称ji没有部门的员工
select * from emp e left join dept d on e.deptno=d.deptno;
--右外连接
--查询员工姓名,工作,薪资,部门名称ji没有部门的员工
select * from emp e right join dept d on e.deptno=d.deptno;
--全外连接
select * from emp e full outer join dept d on e.deptno=d.deptno;
--自连接
--查询员工机器上级领导
select e1.*,e2.ename from emp e1 inner join emp e2 on e1.mgr=e2.empno;
-------------------
--SQL92方式
--笛卡尔积:将多个表的数据一一对应,多得到结果为多表的笛卡尔积
--结果数量为所有表的数量的乘积。
select * from emp,dept where emp.DEPTNO=dept.DEPTNO;--两个表做全排列
--等值连接筛选
--仙座标的笛卡尔积,然后筛选条件为等值筛选
--查询员工姓名,工作,薪资,部门名称
select * frpm emp,dept where emp.DEPTNO=dept.DEPTNO;
--可以在select子句中使用字段直接获取数据,但是效率比较低,建议字段前加上表明
--注意:如果是公共字段,则必须声明表明
select emp.ENAME,ename,emp.JOB,emp.SAL,dept.dname,emp.DEPTNO from emp,dept where emp.DEPTNO=dept.DEPTNO;
select e.ENAME,e.JOB,e.SAL,d.dname,e.DEPTNO from emp e,dept d where e.DEPTNO=d.DEPTNO;
--不等值连接
--查询员工姓名,工作,工资,工资等级
select * from emp e,salgrade s where e.sal>=s.losal and e.sal<=s.hisal;
--自连接
--查询员工姓名,工作,薪资,和上级领导姓名
select e1.ename,e1.job,e1.sal,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno;
--外连接
--左外连接
--查询员工姓名,工作,薪资,部门名称及没有部门的员工
select * from emp e,dept d where e.deptno=d.deptno(+);
--右外连接
----查询员工姓名,工作,薪资,部门名称及没有员工的部门
select * from emp e,dept d where e.deptno(+)=d.deptno;
--查询员工姓名,工作,薪资,部门名称
select * from emp;
select * from dept;片
Oracle两个表表联合查询92&99
最新推荐文章于 2023-07-16 22:52:50 发布