oracle数据库之子查询
来源:互联网 发布:好莱坞一线男星 知乎 编辑:程序博客网 时间:2024/06/09 18:31
/* 本部分内容练习使用到的表格可以参看前面
oracle数据库之常用的函数练习
里面的bbc表 */
/* 子查询 通俗的说法:一个查询中包含其他的查询 */
----查出印度和法国所在洲的所有国家信息------分析:先查出印度和法国所在的洲 select region from bbc where name = '印度' or name = '法国'
------再运用子查询
select * from bbc
where region in (select region from bbc where name = '印度' or name = '法国');
--给出人均GDP超过(英国)的欧洲国家.
select name from bbc
where gdp/population > (select gdp/population from bbc where name = '英国') and region = '欧洲';
--哪些国家的GDP比(法国)多但少于 (日本)? between a and b 查询出的结果包含a,b 相当于范围是 [a,b]
select * from bbc where gdp > (select gdp from bbc where name = '法国')
and gdp < (select gdp from bbc where name = '日本') ;
--查出比欧洲任意国家的gdp都要高的国家
select name from bbc
where gdp > (select max (gdp) from bbc where region = '欧洲') ;
--利用 all 关键字 顾名思义 所有 > all ---> 大于所有
select name from bbc
where gdp > all (select gdp from bbc where region = '欧洲') ;
-- 给出每个地区人口最大的国家。
select name from bbc
where population in (select max(population) from bbc group by region) ;
--上面这种解法是错误解法,如果当所有数据值无重复,即同一个数值不出现多次的情况不会出错,否则有可能查询结果有误
--因为 select max(population) from bbc group by region 查询出的确实是每个洲的最大人口数
--但是前面的 in 的效果是在里面的都查询出来,所以,当某些国家的人口不是该洲的最大,却和其他洲的最大人口数相等的话也会被包含在结果集中
--正确解法:
----对同一个表做两次查询,子查询查出当前记录的国家所在洲的最大人口数,然后外部查询查出人口数等于这个值的国家
----这种解法与上面方法的区别在于:子查询中已经确定洲的范围就是当前记录的洲,所以不会出现查询出因为数值相等,而洲不同的国家
select name from bbc a
where population = (select max(population) from bbc b where a.region = b.region) ;
--这种方法同样可以用all关键字解决
select name from bbc a
where population >= all (select population from bbc b where a.region = b.region) ;
/* ①关于查询的数据涉及多个表时,表连接都可以用子查询替换,但有的子查询却不能用表连接替换;
自己可以试试将前面多表联接的例子全部都用子查询实现一遍
②子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据;
③表连接更适合于查看多个表的数据; */
/* 分页查询 在查询记录有多行的情况下将查询出的记录进行分页显示 */
----思路:给在子查询中查询出前 n 行的记录,然后给这个结果集加一个行数(rownum)的常量列----然后在外部查询中常量列中数值大于 m 的记录,那么查询的结果集就是总体结果集的 (m,n] 行的记录
select * from (select caipiao.*,rownum as rn from caipiao where rownum <=20)
where rn >10 ;
--设每页有 n 行记录 如果要查询 第 p 页的信息
--那么查询公式为
--select 字段名 from (select 表名.*,rownum as rn from 表名 where rownum <= p*n) where rn >(p-1)*n
select a,b,c from (select caipiao.*,rownum as rn from caipiao where rownum <=20)
where rn >10 ;
- oracle数据库之子查询
- Oracle数据库之子查询
- Oracle数据库笔记之子查询
- Oracle数据库的查询之子查询(六)
- Oracle之子查询
- Oracle之子查询
- Oracle之子查询
- Oracle笔记之子查询
- oracle之子查询常用
- Oracle之子查询
- SQL数据库之子查询
- oracle强化练习之子查询
- oracle SQL语句之子查询
- 10-Oracle入门之子查询
- 前端学数据库之子查询
- ORACLE多表查询之子查询
- oracle 基本语句学习 (三)之子查询
- Oracle之子查询(认证考试指南)
- 时间在流逝——上还是不上大学?
- 導入android項目出錯問題解決
- 作为软件工程师,你必须知道的20个常识
- PHP之设计模式—适配器模式
- 用TabControl实现新浪微博客户端样式的面板
- oracle数据库之子查询
- ubuntu设置PATH
- MFC 使用datetimepicker获取时间
- 记录点滴18
- visio中保存vsd文件为高质量的jpg文件
- MANA框架在wap游戏开发中的应用
- 使用UIActionSheet警告用户是否确定执行操作
- 大二下学期学习总结
- request.getParameterValues与request.getParameter的区别