Oracle从零开始3——复杂查询
3.1 多表查询
1)基本语法
a)用WHERE消除笛卡尔积
多表连接笛卡尔积是无法消除的,我们只是通过WHERE进行笛卡尔积的显示消除,即只显示符合条件的内容
SELECT * FROM emp,dept
WHERE emp.deptno=dept.deptno;
b)自身关联
如查询每个雇员的姓名、工作、雇员的直接上级领导的姓名(上级领导也是在雇员表中,所以是自身关联)
SELECT e.ename,e.job,m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno;
c)步步为营
如:查询每个雇员的姓名、工资、部门名称、工资在公司的等级、及其领导的姓名及工资所在公司的等级
SQL> SELECT * FROM salgrade;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
分析:需要雇员表与部门表、工资登记表,雇员与部门用部门编号连接,雇员与工资等级是用sal在工资表的LOSAL和HISAL的范围来连接
第一步:首先查询每个雇员的姓名、工资、部门名称、工资在公司的等级
SELECT e.ename,e.sal,d.dname,s.grade
FROM emp e,dept d,salgrade s
WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal;
第二步:其领导的姓名及工资所在公司的等级,所以加入蓝色部分
SELECT e.ename,e.sal,d.dname,s.grade,m.ename,m.sal,ms.grade
FROM emp e,dept d,salgrade s,emp m,salgrade ms
WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal
AND e.mgr=m.empno
AND m.sal BETWEEN ms.losal AND ms.hisal;
第三步:要求按照以下的样式显示工资等级
1.第五等工资
2.第四等工资
3.第三等工资
4.第二等工资
5.第一等工资
此时肯定要使用DECODE()函数,将s.grade和ms.grade改为红色部分
SELECT e.ename,e.sal,d.dname,
DECODE(s.grade, 1,'第五等工资',2,'第四等工资',3,'第三等工资',4,'第二等工资',5,'第一等工资'),m.ename,m.sal,
DECODE(ms.grade, 1,'第五等工资',2,'第四等工资',3,'第三等工资',4,'第二等工资',5,'第一等工资')
FROM emp e,dept d,salgrade s,emp m,salgrade ms
WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal
AND e.mgr=m.empno
AND m.sal BETWEEN ms.losal AND ms.hisal;
2)外连接
如dept表中有四个部门,emp表中雇员在其中3个部门中,查询雇员及所在部门的编号、名称与位置
发现没有编号为40的部门,因为雇员没有在这个部门的,所以没有显示,如果要想让它显示出来,就要用到右连接
SELECT e.empno,e.ename,d.deptno,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno=d.deptno;
(+)在=左边:表示右连接
(+)在=右边:表示左连接
SELECT e.empno,e.ename,d.deptno,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno;
如:查找雇员的编号、姓名及其领导的编号、姓名
SELECT e.empno,e.ename,e.mgr,m.empno,m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno(+);
3.2 分组统计查询
应用:例如,把男生分成一组,女生一组,然后求出每一组的平均身高、年龄,这就要用到分组函数
1)分组统计函数
常用的分组统计函数有:
COUNT():求出全部的记录数
MAX():求出一组中的最大值
MIN():求出一组中的最小值
AVG():求出平均值
SUM():求和
SELECT COUNT(empno) FROM emp;
SELECT MIN(sal) FROM emp;
SELECT MAX(sal) FROM emp;
求出20部门的总工资
SELECT SUM(sal) FROM emp WHERE deptno=20;
求出所有员工的平均工资
SELECT AVG(sal) FROM emp;
2)分组统计查询
a)GROUP BY
要想使用分组统计,则首先应该固定其语法,使用GROUP BY
SELECT [DISTINCT] *|列名 [别名]
FROM 表名
[WHERE 条件(s)]
[GROUP BY 分组条件]
[HAVING 条件(s)]
[ORDER BY 排序字段1[ASC|DESC],…]
如:求出每个部门的雇员数量,即按照部门编号分组
SELECT deptno,COUNT(empno) FROM emp GROUP BY deptno;
一般情况下,进行分组统计查询时,分组字段要出现在SELECT中,方便我们查看统计信息是哪个组的,COUNT()是统计数据量的,里面可以是*,但一般写实体表的主键,当然写其他列名称也可以
如:求出每个部门的平均工资
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;
以下代码运行会出错:
SELECT deptno,COUNT(empno) FROM emp;
原因如下:
1、如果程序中使用了分组统计函数,则有两种可以使用的情况:
程序中存在了GROUP BY并指定了分组条件,这样可以将分组条件一起查询出来;
如果不使用分组的话,则只能单独的使用分组统计函数
2、在使用分组统计函数的时候,不能出现分组统计函数和分组条件之外字段
SELECT deptno,empno,COUNT(empno)
FROMP emp
GROUP BY deptno;
此时,会提示empno不是GROUP BY表达式,所以无法使用
分组统计也支持多表查询
如:按部门分组,并显示部门名称以及员工数
SELECT d.dname,COUNT(e.empno)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;
如:要求显示出平均工资大于2000的部门编号及平均工资
SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno
HAVING AVG(sal)>2000;
这里不能使用WHERE
SELECT deptno,AVG(sal)
FROM emp
WHERE AVG(sal)>2000
GROUP BY deptno;
因为分组统计函数只能在分组中使用,不允许在WHERE语句中出现,如果要对分组后的内容进行过滤,只能使用HAVING。
根本原因在于SQL语句的执行顺序:
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
WHERE先执行,GROUP BY后执行,执行分组才能使用分组统计函数,因此WHERE里不能使用分组统计函数,而HAVING在GROUP BY后执行,所以HAVING中可以使用分组统计函数
如:显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的总和降序排列
第一步:显示全部的非销售人员
SELECT *
FROM emp
WHERE job<> 'SALESMAN';
第二步:按工作分组,同时求出工资的总和
SELECT job,SUM(sal)
FROM emp
WHERE job<> 'SALESMAN'
GROUP BY job;
第三步:对分组的条件进行限制,工资总和大于5000
SELECT job,SUM(sal)
FROM emp
WHERE job<> 'SALESMAN'
GROUP BY job
HAVING SUM(sal)>5000;
第四步:使用排序,降序
SELECT job,SUM(sal)
FROM emp
WHERE job<> 'SALESMAN'
GROUP BY job HAVING SUM(sal)>5000
ORDER BY SUM(sal) DESC;
分组的简单原则:只有一列上存在重复的内容才有可能考虑到分组
注意:分组函数可以嵌套使用,但是在分组函数嵌套使用的时候不能在出现分组条件的查询语句
如:求出平均工资最高的部门工资
错误的代码:分组条件deptno不能出现在查询语句中
SELECT deptno,MAX(AVG(sal))
FROM emp
GROUP BY deptno;
正确的代码:
SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptno;
如果分组字段要出现在SELECT语句中则只能通过子查询来完成
SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno
HAVING AVG(sal)=(
SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno);
3.3 子查询
子查询定义:在一个查询的内部还包括另一个查询
子查询格式:在小括号中编写代码,()
子查询类别:
单列子查询:返回的结果是一列的一个内容,出现几率最高,单行单列
单行子查询:返回多个列,有可能是一个完整的记录,单行多列
多行子查询:返回多条记录,多行多列,就是一个表
范例:要求查询比7654工资要高的全部雇员的信息,要首先知道7654雇员的工资
SELECT sal
FROM emp
WHERE empno=7654;
之后要以以上的结果作为后续查询的依据。只要是其他的工资大于sal,就符合条件
SELECT *
FROM emp
WHERE sal>(
SELECT sal
FROM emp
WHERE empno=7654);
如:要求查询比7654工资要高,同时与7788从事相同工作的全部雇员的信息
SELECT *
FROM emp
WHERE sal>(
SELECT sal
FROM emp
WHERE empno=7654)
AND job=(
SELECT job
FROM emp
WHERE empno=7788);
如:要求查询出部门名称、部门员工数、部门的平均工资、部门的最低收入雇员的姓名
程序需要两张表关联:dept、emp
第一步:如果要想求出每个部门的员工数量及平均工资,则要按照deptno分组:
SELECT deptno,COUNT(empno),AVG(sal)
FROM emp
GROUP BY deptno;
第二步:但是如果要想查出部门的名称,则需要与dept表进行关联。红色部分是第一步的结果,以一个临时表的身份成为一个子查询
SELECT d.dname,temp.count,temp.avgsal
FROM dept d,(
SELECT deptno,COUNT(empno) count,AVG(sal) avgsal
FROM emp
GROUP BY deptno) temp
WHERE d.deptno=temp.deptno;
第三步:部门的最低收入雇员的姓名
SELECT d.dname,temp.count,temp.avgsal,e.ename
FROM dept d,emp e,(
SELECT deptno,COUNT(empno) count,AVG(sal) avgsal,MIN(sal) minsal
FROM emp
GROUP BY deptno) temp
WHERE d.deptno=temp.deptno AND e.sal=temp.minsal;
另外一种写法:
SELECT e.ename,temp.dname,temp.count,temp.avgsal
FROM emp e,(
SELECT d.dname dname,COUNT(e.empno) count,AVG(sal) avgsal,MIN(sal) minsal
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname) temp
WHERE e.sal=temp.minsal;
如果此时在一个部门中同时存在两个最低工资的雇员,程序就会出错。
当返回的数据是多行1列时,需要使用范围标记,在WHERE子句中使用子查询
1)IN
指定查询的范围
如:求出每个部门最低工资的雇员信息。每个部门的最低工资,返回值肯定是多个,所以此时可以使用IN指定一个操作范围
SELECT *
FROM emp
WHERE sal IN (
SELECT MIN(sal)
FROM emp
GROUP BY deptno);
2)ANY
三种情况:
=ANY 与IN的操作符的功能完全一样
SELECT *
FROM emp
WHERE sal=ANY (
SELECT MIN(sal)
FROM emp
GROUP BY deptno);
>ANY 比里面最小的值要大
SELECT *
FROM emp
WHERE sal>ANY (
SELECT MIN(sal)
FROM emp
GROUP BY deptno);
<ANY 比里面最小的值要小
SELECT *
FROM emp
WHERE sal<ANY (
SELECT MIN(sal)
FROM emp
GROUP BY deptno);
3)ALL
>ALL 比最大的值要大
SELECT *
FROM emp
WHERE sal>ALL (
SELECT MIN(sal)
FROM emp
GROUP BY deptno);
<ALL 比最小的值要小
SELECT *
FROM emp
WHERE sal<ALL (
SELECT MIN(sal)
FROM emp
GROUP BY deptno);
对于子查询来讲,还可以进行多列子查询,一个子查询中同时返回多个查询的列,但在开发中不建议使用,这种情况可以拆成多个子查询
查询与SCOTT工资相同,工作也相同的雇员信息
SELECT *
FROM emp
WHERE (sal,job)=(
SELECT sal,job
FROM emp
WHERE ename='SCOTT')
AND ename<>'SCOTT';
可以拆成两个子查询
SELECT *
FROM emp
WHERE sal=(SELECT sal FROM emp WHERE ename='SCOTT') AND
job=(SELECT job FROM emp WHERE ename='SCOTT')
AND ename<>'SCOTT';
3.4 集合操作
在oracle中提供了三种类型的集合操作:并UNION,交INTERSECT,查MINUS
并UNION:将多个查询结果组合到一个查询结果之中,无重复内容
并UNION ALL:将多个查询结果组合到一个查询结果之中,有重复内容
交INTERSECT:返回多个查询结果中相同的部分
差MINUS:返回两个查询结果的差集
为了更好的观察以上的查询结果,下面复制emp表,将20部门的雇员信息取出来
CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20
1)UNION操作
SELECT * FROM emp
UNION
SELECT * FROM emp20;
2)UNION ALL操作
SELECT * FROM emp
UNION ALL
SELECT * FROM emp20;
3)INTERSECT操作
SELECT * FROM emp
INTERSECT
SELECT * FROM emp20;
4)MINUS操作
SELECT * FROM emp
MINUS
SELECT * FROM emp20;
3.5 查询综合练习
1)列出至少有一个员工的所有部门
第一步:求出所有部门的员工数量
SELECT deptno,COUNT(empno)
FROM emp
GROUP BY deptno;
第二步:求出员工数大于1的部门编号
SELECT deptno,COUNT(empno)
FROM emp
GROUP BY deptno
HAVING COUNT(empno)>1;
第三步:通过部门表查出部门信息
SELECT d.*,temp.count
FROM dept d,(
SELECT deptno,COUNT(empno) count
FROM emp
GROUP BY deptno
HAVING COUNT(empno)>1) temp
WHERE d.deptno=temp.deptno;
2)列出薪金比Smith高的所有员工
第一步:求出SMITH的工资
SELECT sal
FROM emp
WHERE ename= 'SMITH';
第二步:以上面的结果为条件,查询所有符合条件的结果
SELECT *
FROM emp
WHERE sal>(
SELECT sal
FROM emp
WHERE ename= 'SMITH');
3)列出所有员工姓名及其直接上级的姓名
SELECT e.ename,m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno(+);
4)列出所有受雇佣日期早于其直接上级的雇员的姓名、领导姓名、部门名称
第一步:自身关联,查找mgr=empno的同时还要比较hiredate
SELECT e.ename,m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno
AND e.hiredate<m.hiredate;
第二步:要加入部门信息,则肯定应该加入dept表
SELECT e.ename,m.ename,d.dname
FROM emp e,emp m,dept d
WHERE e.mgr=m.empno
AND e.hiredate<m.hiredate
AND e.deptno=d.deptno;
还可以使用子查询来做:
SELECT temp.ename,temp.mname,d.dname
FROM dept d,(
SELECT e.ename ename,m.ename mname,e.deptno deptno
FROM emp e,emp m
WHERE e.mgr=m.empno
AND e.hiredate<m.hiredate) temp
WHERE d.deptno=temp.deptno;
5)列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
SELECT d.dname,e.*
FROM dept d,emp e
WHERE d.deptno=e.deptno(+);
使用左外连接,显示没有雇员的40部门
6)列出所有“CLERK(办事员)”的姓名及其部门名称、部门人数
第一步:找出所有办事员的姓名及部门编号
第二步:部门名称,需要部门表
SELECT e.ename,d.deptno
FROM emp e,dept d
WHERE job= 'CLERK' AND d.deptno=e.deptno(+);
第三步:分组求人数
SELECT e.ename,d.dname,temp.count
FROM emp e,dept d,(
SELECT deptno,COUNT(empno) count
FROM emp e
GROUP BY deptno) temp
WHERE e.job='CLERK'
AND e.deptno=d.deptno
AND d.deptno=temp.deptno;
7)列出最低薪金大于1500的各种工作以及从事此工作的全部雇员的人数
第一步:按工资分组,分组条件为最低工资大于1500
SELECT job,MIN(sal)
FROM emp
GROUP BY job
HAVING MIN(sal)>1500;
第二步:求出全部雇员人数
SELECT e.job,COUNT(e.empno)
FROM emp e
WHERE e.job IN (
SELECT job
FROM emp
GROUP BY job
HAVING MIN(sal)>1500)
GROUP BY e.job;
另外一种写法:
SELECT temp.job,temp.count
FROM (
SELECT job,MIN(sal),COUNT(empno) count
FROM emp
GROUP BY job
HAVING MIN(sal)>1500) temp;
8)列出在“SALES(销售部)”工作的员工姓名,假定不知道销售的部门号
第一步:通过dept表查询销售部的部门编号
SELECT deptno
FROM dept
WHERE dname= 'SALES';
第二步:将之前的作为子查询
SELECT ename
FROM emp
WHERE deptno=(
SELECT deptno
FROM dept
WHERE dname= 'SALES');
9)列出薪金高于公司平均薪金的所有员工、所在部门、上级领导,工资等级
第一步:求出工资平均薪金
SELECT AVG(sal)
FROM emp;
第二步:列出薪金高于平均工资的所有雇员信息
SELECT *
FROM emp
WHERE sal>(
SELECT AVG(sal)
FROM emp);
第三步:求出所在部门,要关联部门表
SELECT e.*,d.dname,d.loc
FROM emp e,dept d
WHERE sal>(
SELECT AVG(sal)
FROM emp)
AND e.deptno=d.deptno;
第四步:求出上级领导,要自身关联
SELECT e.empno,e.ename,d.dname,m.ename
FROM emp e,dept d,emp m
WHERE e.sal>(
SELECT AVG(sal)
FROM emp)
AND e.deptno=d.deptno
AND e.mgr=m.empno(+);
第五步:求出雇员的工资等级
SELECT e.empno,e.ename,d.dname,m.ename,s.grade
FROM emp e,dept d,emp m,salgrade s
WHERE e.sal>(
SELECT AVG(sal)
FROM emp)
AND e.deptno=d.deptno
AND e.mgr=m.empno
AND e.sal BETWEEN s.losal AND s.hisal;
10)列出与SCOTT从事相同工作的所有员工及部门名称
第一步:找到SCOTT的工作
SELECT job
FROM emp
WHERE ename= 'SCOTT';
第二步:找出与其从事相同工作的人
SELECT empno,ename,job,sal
FROM emp
WHERE job=(
SELECT job
FROM emp
WHERE ename= 'SCOTT')
AND ename<>'SCOTT';
第三步:与部门表关联,查询部门名称
SELECT e.empno,e.ename,e.job,e.sal,d.dname
FROM emp e,dept d
WHERE e.deptno=d.deptno
AND job=(
SELECT job
FROM emp
WHERE ename='SCOTT')
AND e.ename<>'SCOTT';
11)列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金
第一步:求出30部门的薪金
SELECT sal
FROM emp
WHERE deptno=30;
第二步:上一步作为子查询
SELECT ename,sal
FROM emp
WHERE sal IN (
SELECT sal
FROM emp
WHERE deptno=30);
部门编号不应该为30
SELECT ename,sal
FROM emp
WHERE sal IN (
SELECT sal
FROM emp
WHERE deptno=30)
AND deptno<>30;
12)列出薪金高于部门30中工作的所有员工的薪金的员工姓名和薪金、部门名称
第一步:在之前的程序上进行修改,使用>ALL,比最大的还要大
SELECT ename,sal
FROM emp
WHERE sal>ALL (
SELECT sal
FROM emp
WHERE deptno=30)
AND deptno<>30;
第二步:与dept关联,求出部门名称
SELECT e.ename,e.sal,d.dname
FROM emp e,dept d
WHERE sal>ALL (
SELECT sal
FROM emp
WHERE deptno=30)
AND d.deptno<>30
AND e.deptno=d.deptno;
13)列出在每个部门工作的员工数量、平均工资和平均服务年限
第一步:求出每个部门的员工数量,部门名称
SELECT d.dname,COUNT(e.empno)
FROM dept d,emp e
WHERE d.deptno=e.deptno
GROUP BY d.dname;
第二步:平均工资和服务年限
SELECT d.dname,COUNT(e.empno) count,AVG(sal) avgsal,
AVG(MONTHS_BETWEEN(SYSDATE,hiredate)/12) avgyear
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;
14)列出所有部门的详细信息和部门人数
第一步:列出所有部门的人数
SELECT deptno dno,COUNT(empno) count
FROM emp
GROUP BY deptno;
第二步:列出部门的详细信息
SELECT d.*,temp.count
FROM dept d,(
SELECT deptno dno,COUNT(empno) count
FROM emp
GROUP BY deptno) temp
WHERE d.deptno=temp.dno;
但是没有雇员的40部门也应该显示出来,人数应该是0
SELECT d.*,NVL(temp.count,0)
FROM dept d,(
SELECT deptno dno,COUNT(empno) count
FROM emp
GROUP BY deptno) temp
WHERE d.deptno=temp.dno(+);
15)列出各种工作的最低工资及从事此工作的雇员姓名
第一步:按工作分组,用MIN求出最低工资
SELECT job,MIN(sal)
FROM emp
GROUP BY job;
第二步:求出从事此工作的雇员姓名
SELECT *
FROM emp
WHERE sal IN (
SELECT MIN(sal)
FROM emp
GROUP BY job);
16)列出各个部门的MANAGER的最低薪金
SELECT deptno,MIN(sal)
FROM emp
WHERE job= 'MANAGER'
GROUP BY deptno;
17)列出所有员工的年薪,按照年薪从低到高排序
在处理年薪的时候要注意奖金,奖金要使用NVL函数
SELECT (sal+NVL(comm,0))*12 income
FROM emp
ORDER BY income DESC;
18)查询出每个员工的上级主管,并找出这些主管中的薪水超过3000的人
SELECT DISTINCT m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno;
AND m.sal>3000;
19)求出部门名称中带“S”字符的部门的员工、工资总和、部门人数
第一步:查询部门表的部门名称,使用模糊查询,来确定部门的编号
SELECT deptno
FROM dept
WHERE dname LIKE '%S%';
第二步:上面作为子查询
SELECT deptno,SUM(sal),COUNT(empno)
FROM emp
WHERE deptno IN (
SELECT deptno
FROM dept
WHERE dname LIKE '%S%')
GROUP BY deptno;
20)给任职日期超过10年的人加薪10%
UPDATE emp SET sal=sal*1.1
WHERE (MONTHS_BETWEEN(SYSDATE,hiredate)/12)>10;
Oracle从零开始3——复杂查询相关推荐
- Oracle从零开始2——简单查询
2.1 所需要的表 雇员表(EMP) No 字段 类型 描述 1 EMPNO NUMBER(4) 表示雇员编号,是唯一编号 2 ENAME VARCHAR2(10) 表示雇员姓名 3 JOB VARC ...
- oracle主从关系表查询,Oracle 主从表联合查询解决方法
Oracle 主从表联合查询 表A id type name 1 E AA 2 F 表B id Aid name 1 2 BB 2 2 ...
- [推荐推荐][提供下载]ORACLE SQL:经典查询练手系列文章收尾(目录篇)
[推荐推荐][提供下载]ORACLE SQL: 经典查询练手系列文章收尾(目录篇) --通过知识共享树立个人品牌. 通过近一个月的努力,<经典查询练手系列>也快告一段落,但并不代表结束,以 ...
- Oracle数据库日期范围查询的两种实现方式
Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通过一个实例来介绍这一过程.我们假设要查询2011-05-02到2011-05-30之间的数据,实现方式如下 ...
- oracle多表关联查询报表,oracle多表关联查询和子查询
oracle多表关联查询和子查询 一.多表关联查询 例子: sql> create table student1 ( sid varchar(3), sname varchar(6), sage ...
- oracle按时间要求查询
一 按时间查询 格式: 1,当时间条件字段为字符串类型的时候,通过以下方法查询数据: 1.1.SELECT * FROM 表名 t WHERE 条件1 AND to_date(t.表名,'yyyy/ ...
- Oracle数据库之子查询
Oracle数据库总结: Oracle数据库之基本查询 Oracle数据库之过滤和排序 Oracle数据库之单行函数 Oracle数据库之多行函数 Oracle数据库之多表查询 SQL> 注意的 ...
- Oracle数据库之基本查询
oracle安装参照: Oracle数据库之安装教程 Oracle数据库总结: Oracle数据库之基本查询 Oracle数据库之过滤和排序 Oracle数据库之单行函数 Oracle数据库之多行函数 ...
- oracle数据库分层,Oracle数据库的分层查询(一)
我们知道关系数据库不是以分层形式存储数据的,那么我们又该如何以分层方法获取数据呢?本文将为你介绍由Oracle提供的分层查询特性,告诉你分层查询的概念,并迎合你的需要构建一个分层查询. 使用分层查询时 ...
最新文章
- mybatis完整增删改查入门实例
- React开发中使用fetch进行异步请求
- YbtOJ#853-平面标记【整体二分,凸壳】
- 浙江工业大学计算机应用基础,浙江工业大学期终考试命题稿-浙江大学人文学院.doc...
- LIST函数JAVA特点_Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)...
- Hibernate→ORM、简介、第一个Hibernate实现、核心XML配置、Hibernate执行流程、操作数据库对象session、事务、映射XML配置、单例CRUD、get与load
- 5198.丑数III
- 中航信Eterm协议解析,解包,封包源码
- 5G牌照发放了,但需要购买5G手机的用户应等明年再购买
- VMWare ESXi上传iso镜像文件
- PanDownload 复活了!60MB/s!附下载地址
- matlab模块封装端口位置,simulink模块端口位置
- simpledateformat怎么改变格式 SimpleDateFormat 的使用及其 注意事项
- MATLAB画图中图形对象、文字标注、希腊字母显示等
- DCDC电源SW波形负压以及轻载振荡问题
- 手把手教你R语言做k均值聚类分析
- INCONEL 617 耐腐蚀性能
- 普元 AppServer 7.0 执行startServer.cmd启动,命令行一直启动中,server.log报错:com.primeton.appserver.l7e.exception.Impr
- c#垂直投影法_c#求点到直线的投影点坐标
- 服务器怎么和网站接入,网站服务器的带宽怎么接入呢?