-
select rownum,empno,ename,sal from (select * from emp order by sal desc) where rownum<=3查看全部
-
rownum默认生成行号,即使用order by排序,也不会打乱rownum默认生成行号的顺序 行号只能用< <= 不能用> >=查看全部
-
select * from emp where deptno=(select deptno from dept where dname='SALES'); 使用多表查询: select e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES' ; 理论上应该尽量使用多表查询,因为上面的子查询有两个from语句,所以要对数据库访问查询两次,而下面的多表查询只访问了一次!这是理论上的结论,并没有考虑实际比如多表查询中产生的笛卡尔积的大小,具体情况还是要具体对待。查看全部
-
示例一: select * from (select empno,ename,sal from emp); 示例二: select * from (select empno,ename,sal,12*sal 年薪 from emp);查看全部
-
group by后面不能跟子查询!查看全部
-
where后面的子查询中不能有分组函数 having后面的子查询中可以有分组函数 select后面的子查询得到的结果必须是单条记录 from后面的子查询得到的结果必须是多条记录查看全部
-
121查看全部
-
子查询注意查看全部
-
子查询的使用查看全部
-
子查询概述查看全部
-
自连接存在的问题: (1)自连接不适合操作大表,也就是记录多的表,原因是自连接至少有两张表参与,并进行笛卡尔全集,连接之后的记录数就是单张表记录数的平方(笛卡尔积行数是两张表行数的乘积),如果有三张表记录数就是原来的三次方,如果原来的表包含的记录数过多,连接之后的结果就会很大,所以自连接不适合操作大表。解决办法:层次查询。注意层次查询是单表查询,不存在第二张表!因为只有在一张表的情况下才不会产生笛卡尔积,才能解决这个问题。 层次查询在某些情况下可以替代自连接,本质上是单表查询。 例: 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表示从何处开始遍历查询,只有从根节点开始时才可以使用 * is null 的格式,其余节点都只能使用第二种格式。 此外层次查询的树的深度用level表示,可以在select语句中加入level就可以得到深度的查询结果,还可以对查询结果进行排序如order by 1; 比较自连接和层次查询的优劣: 自连接得到的查询结果比较直观但是不适合操作大表; 层次查询只涉及一张表,不产生笛卡尔积,但是得到的结果不够直观。 所以不同的查询语句有不同的特点,不是万能的!查看全部
-
1.自连接<br> 优点:查询的结果直观<br> 缺点:是不适合大表查询<br> 解决办法:用层次查询<br> <br> 2.层次查询<br> 优点:属于单表查询,只有单表查询才不会产生笛卡尔积<br> 缺点:查询结果不太直观 层次查询属于单表查询,<br> 使用关键字prior,此关键字代表上一层,<br> 使用start with函数,区别开始于哪一层,<br> 此处可以使用该层的值表示,如果是首层,也可使用上一层为null条件表示。<br> 层次查询中都会有level这个虚拟列,如果要显示,必须在select后面一并查询。查看全部
-
层次查询的原理查看全部
-
层次查询查看全部
-
自连接:通过别名,将同一张表视为多张表 查询员工姓名和员工的老板姓名: select e.ename 员工姓名,b.ename 老板姓名 from emp e,emp b where e.mgr=b.empno; //员工的老板号=老板的员工号查看全部
举报
0/150
提交
取消