Oracle数据库笔记之各种连接及合并查询
来源:互联网 发布:淘宝小二旺旺 编辑:程序博客网 时间:2024/06/05 06:52
1.等值连接
查询部门10中经理的员工编号、姓名、部门编号、部门名称及年薪
select empno,ename,e.deptno,dname,12*sal+nvl(comm,0)*12 from emp e,dept d where e.deptno=d.deptno and
d.deptno=10 and job='MANAGER';
查询每个部门经理的员工编号、姓名、工资、部门编号和部门名称
select empno,ename,sal,d.deptno,dname
from emp e,dept d
where e.deptno = d.deptno
and job = 'MANAGER';
结果为:
EMPNO ENAME SAL DEPTNO DNAME
----- ------ ------- ------ ----------
7782 CLARK 2450.00 10 ACCOUNTING
7566 JONES 2975.00 20 RESEARCH
7698 BLAKE 2850.00 30 SALES
2.不等值连接
查询每个员工的姓名、工资及工资等级
select ename, sal, grade
from emp e, salgrade s
where sal between losal and hisal;
3.内连接--匹配的记录查询出来
语法:inner join 表名 on 条件
查询部门20中员工编号、姓名、部门编号和部门名称
select empno, ename, e.deptno, dname
from emp e, dept d
where e.deptno = d.deptno
and e.deptno = 20;
<==>
select empno, ename, e.deptno, dname
from emp e inner join dept d
on e.deptno = d.deptno
where e.deptno = 20;
4.外连接:
通过外链接可以把对于连接条件不成立的记录仍然包含最后的结果中
左外连接:当连接条件不成立的时候,等号左边仍然被包含
右外连接:当连接条件不成立的时候,等号右边仍然被包含
--按部门统计员工人数,要求显示部门号,部门名称,部门人数
select d.deptno,dname,count(empno) as deptno_number
from emp e,dept d
where e.deptno(+)=d.deptno
group by d.deptno,dname
order by d.deptno;
查询员工编号、姓名、部门编号、部门名称并释放部门表中的数据
①select empno,
ename,
e.deptno,
d.deptno,
dname
from emp e, dept d
where e.deptno(+) = d.deptno;
②select empno,
ename,
e.deptno,
d.deptno,
dname
from dept d left join emp e
on d.deptno = e.deptno;
③select empno,
ename,
e.deptno,
d.deptno,
dname
from emp e right outer join dept d
on e.deptno = d.deptno;
④select empno,
ename,
e.deptno,
d.deptno,
dname
from emp e, dept d
where d.deptno = e.deptno(+);
5.自连接(表与自身连接)
查询自己和所属经理的姓名
select yuangong.ename, jingli.ename
from emp yuangong, emp jingli
where yuangong.mgr = jingli.empno;
查询员工SMITH的经理名字
select m.ename
from emp e, emp m
where e.mgr = m.empno
and e.ename = 'SMITH';
6.层次查询
自连接虽然显示很直观,但自连接本质属于多表查询,仍然会产生笛卡尔集
不是适合操作大表,解决方式--》层次查询(层次查询是单表查询在某些情况下可以取代自连接)
select level,ename,mgr
from emp
connect by 上一层的员工号=当前这一层的老板号
strat with 从树的哪个结点开始
select level,empno,ename ,mgr
from emp
connect by prior empno=mgr
start with empno=7839 --king的员工号(只有根节点可以使用start with mgr is null)
order by level;
7.全连接
释放左右两个表中不匹配的数据
语法:full [outer] join 表名 on 条件
查询学生表和年级表中的信息(不匹配的信息也查询)
select sname,s.gid,g.gid,gname
from student s full join grade g
on s.gid = g.gid;
8.合并查询
①union 合并查询并去重复
②union all 合并查询不去重复
③intersect 交集
④minus 差集
注意:被连接的两条SQL语句,查询的列数必须一致
1.select ename,sal,dept.deptno,mgr,dname
from emp, dept
where emp.deptno = dept.deptno
union all
select ename,sal,deptno,comm,job
from emp
where deptno = 30;
2.select ename, job, sal
from emp
where sal > 2000
minus
select ename, job, sal
from emp
where job = 'MANAGER';
结果为:
ENAME JOB SAL
---------- --------- ---------
FORD ANALYST 3000.00
KING PRESIDENT 5000.00
SCOTT ANALYST 3000.00
3.select ename, job, sal
from emp
where sal > 2000
union
select ename, job, sal
from emp
where job = 'MANAGER';
结果为:
ENAME JOB SAL
---------- --------- ---------
BLAKE MANAGER 2850.00
CLARK MANAGER 2450.00
FORD ANALYST 3000.00
JONES MANAGER 2975.00
KING PRESIDENT 5000.00
SCOTT ANALYST 3000.00
4.select ename, job, sal
from emp
where sal > 2000
intersect
select ename, job, sal
from emp
where job = 'MANAGER';
结果为:
ENAME JOB SAL
---------- --------- ---------
BLAKE MANAGER 2850.00
CLARK MANAGER 2450.00
JONES MANAGER 2975.00
查询入职日期是1981年以后的员工的工资级别
select ename, hiredate, sal, grade
from emp, salgrade
where sal between losal and hisal
and to_char(hiredate,'yyyy') > 1981;
- Oracle数据库笔记之各种连接及合并查询
- Oracle笔记之合并查询
- Oracle数据库之SQL连接查询
- 黑马程序员之ORACLE数据库学习笔记:如何实现连接池及连接池的优缺点
- Oracle数据库学习5之查询进阶:连接查询
- oracle数据库之sql查询语句笔记
- oracle之连接查询及子查询举例
- php连接oracle数据库及查询数据的方法
- 文章推荐:Oracle各种连接查询
- oracle笔记 之VI JDBC连接 Oracle 数据库
- 数据库查询中的各种连接类型
- 数据库查询中的各种连接类型
- (强烈推荐)java连接oracle数据库的各种方法及java在数据库中的含义
- java连接oracle数据库的各种方法及java在数据库中的含义(转载'SunnyXu ')
- java连接oracle数据库的各种方法及java在数据库中的含义
- java连接oracle数据库的各种方法及java在数据库中的含义
- java连接oracle数据库的各种方法及java在数据库中的含义
- java连接oracle数据库的各种方法及java在数据库中的含义
- java的文件xml读取,4种方式的不同
- centos安装THEFUCK
- 牛客《剑指Offer》 -- 斐波那契数列
- C#程序保留两位小数
- elk安装流程
- Oracle数据库笔记之各种连接及合并查询
- QT在控制台下实现TCP网口通信
- python实现前向匹配中查找最大长度的最高重复模式的子字符串
- 防空火箭暗示法
- hibernate @Entity @MappedSuperclass @ID
- Scikit-learn之Cross_Validation
- PCB布线规则
- JS复习2
- C语言将BMP格式图片转化为灰度