-
1.自连接存在的问题:不适合操作大表 解决办法:层次查询 层次查询某些情况下,可以替代自连接 本质上,是一个单表查询 比如: select empno,ename,sal,mgr from emp connect by prior empno=mgr start with empno=7839; 翻译过来就是connect by上一层的员工号=老板号 start with empno=根的号 因为根节点并没有老板,那么我们可以把start with这一句这样表示 start with mgr is null;就表示他的老板是空值. 2.层次查询中提供一个伪列:level,来表示树的深度,我们要想查树的伪列,必须在select中显式的写出来,就像这样: select level,empno,ename,sal,mgr from emp connect by prior empno=mgr start with mgr=null order by 1; 3.自连接的优缺点:结果直观,但不适合操作大表 层次查询的优缺点:是一个单表查询,不会产生笛卡尔集,但是他得到的结果并没有自连接那么直观 需要根据实际问题来选择用自连接还是层次查询。查看全部
-
e1表中的rownum是伪列,不能用>=号, 而e2表中的rownum是e1表中的第一列,所以可以用>=号查看全部
-
a not in(10,20,null)相当于a!=10 and a!=20 and a!=null,然而a!=null永远为假, 所以要排除空值,判断是否是null值,只能用is or is not而不能用= 或者!=。 select * from emp where empno not in (select mgr from emp where mgr is not null);查看全部
-
单行子查询:查询结果返回一条查询记录 多行子查询:查询结果返回两条及以上的查询记录查看全部
-
相关子查询查看全部
-
rownum 行号 伪列查看全部
-
当然当中还有伪列level 最后根据伪列排列查看全部
-
关键的地方是把where换成,connect by prior 条件 start with 条件查看全部
-
子查询注意问题6-10查看全部
-
子查询注意问题1-5查看全部
-
select empno,ename,sal,mgr from emp //层次查询只涉及一张表 connect by prior empno=mgr //层次查询的条件不用where表示,而用connect by表示,上一层的员工号=当前曾的老板号 start with mgr is null或者start with empno=7839; //stsrt with表示从何处开始遍历查询,只有从根节点开始时才可以使用 xxx is null 的格式,其余节点都只能使用第二种格式。 此外层次查询的树的深度用level表示,可以在select语句中加入level就可以得到深度的查询结果,还可以对查询结果进行排序如order by 1;查看全部
-
select e.ename 员工姓名,b.ename 老板姓名 from emp e,emp b where e.mgr=b.empno; 核心:通过表的别名,将同一张表看成多个表查看全部
-
外连接: 写法与叫法相反,右外连接在等号左上加上(+) select d.deptno,d.dname,count(e.empno) from emp e,dept d where e.deptno=d.deptno group by d.deptno,d.name; 注意这样得出的结果不完全正确,因为40号部门在员工表中不存在但是在部门表中存在,为了在结果中显示40号部门,要使用外连接!外连接的作用就是把对于连接条件不成立的记录仍然包含在最后的结果中,分为左外连接和右外连接。 特别注意左外连接和右外连接的写法,位置与名字相反,符号用括号内加号表示: 左外连接where e.deptno=d.deptno(+); 右外连接where e.deptno(+)=d.deptno; 此例中是右外连接!查看全部
-
get 路径:获取sql文件内容 @路径:设置路径下文件内容 set pagesize 10:设置页面大小查看全部
-
1.使用ttitle命令设置报表的名称,col表示列的意思,15表示空15列显示“我的报表”这个标题,然后再空35个列,显示sql.pno,sql.pno表示报表的页码。 2.col也可以用来设置列的别名,比如第二行把deptno标题设置为部门号 3.break on deptno skip 1,在上一节课程已经介绍过,表示遇见重复的部门号就只显示一次,不同的部门号之间空一行查看全部
举报
0/150
提交
取消