`
- 浏览:
71763 次
- 性别:
- 来自:
杭州
-
以下是个人对一些常用的高级查询技巧的一番梳理,表很简单,就不提供脚本了。
--1. 使用集合操作符:将两个或多个查询返回的行组合起来
select * from product_types;
select * from products;
select * from more_products;
-- 使用union all操作符:返回查询所检索出的所有行,包括重复行
select product_id, product_type_id, product_name from products
union all
select prd_id, prd_type_id, prd_name from more_products order by 1;
-- 修改数据
update more_products set prd_name = '绿茶' where prd_id = 1;
select * from more_products for update;
-- 使用union 操作符:返回查询所检索出的所有非重复行
select product_id, product_type_id, product_name from products
union
select prd_id, prd_type_id, prd_name from more_products order by 1;
-- 使用intersect操作符:返回两个查询所检索出的共有行
select product_id, product_type_id, product_name from products
intersect
select prd_id, prd_type_id, prd_name from more_products order by 1;
-- 使用minus操作符:返回将第二个查询检索出的行从第一个检索出的行中减去之后剩余的行(即第一个查询检索出的行减去共有行)
select product_id, product_type_id, product_name from products
minus
select prd_id, prd_type_id, prd_name from more_products order by 1;
-- 组合使用集合操作符:集合操作符默认是从上至下求值,最好用括号
(select product_id, product_type_id, product_name from products
union
select prd_id, prd_type_id, prd_name from more_products)
intersect
select product_id, product_type_id, product_name from products_changes;
-- 使用translate(x, from_string, to_string)函数
select translate('select', 'select', 'xwq') from dual;
select product_id, product_name, translate(product_name, '绿茶哇生包' ,'abcdf') from products
-- 使用decode(value,search_value,result,defaul_result)函数:对value和search_value进行比较,若相等返回result,否则返回defaul_result
select prd_id, prd_type_id, available, decode(available, '1', 'available', 'not available')
from more_products;
-- decode()函数:传递多个搜索和结果参数
select prd_id, available, decode(prd_type_id, 1, '饮料', 2, '食品', '其它')
from more_products;
--===============================使用case表达式===============================
-- 使用简单case表达式
select product_id,
product_type_id,
case product_type_id
when 1 then
'饮料'
when 2 then
'食品'
else
'其它'
end as product_type_name
from products;
-- 使用搜索case表达式
select product_id,
product_type_id,
case
when product_type_id = 1 then
'饮料'
when product_type_id = 2 then
'食品'
else
'其它'
end as product_type_name
from products;
-- 在搜索case表达式中可以用操作符
select product_id,product_type_id, price,
case
when price < 30 and price > 0 then '便宜'
when price < 90 and price > 30 then '还好'
else '好贵'
end as price_level
from products;
--===============================层次化查询===============================
-- 使用connect by和start with子句
select emploee_id, manager_id, first_name, last_name
from more_employees
start with emploee_id = 1
connect by prior emploee_id = manager_id;
-- 使用伪列level
select level, emploee_id, manager_id, first_name, last_name
from more_employees
start with emploee_id = 1
connect by prior emploee_id = manager_id
order by level;
-- 查询层次数
select count(distinct level) from more_employees
start with emploee_id = 1
connect by prior emploee_id = manager_id;
-- 格式化层次化查询的结果:用level和lpad函数
select level, lpad(' ', 2*level - 1) || first_name || ' ' || last_name as employee
from more_employees
start with emploee_id = 1
connect by prior emploee_id = manager_id;
-- 从非节点开始遍历
select level, lpad(' ', 2*level - 1) || first_name || ' ' || last_name as employee
from more_employees
start with emploee_id = 3
connect by prior emploee_id = manager_id;
-- 在start with中使用子查询
select level, lpad(' ', 2*level - 1) || first_name || ' ' || last_name as employee
from more_employees
start with emploee_id = (select emploee_id from more_employees where first_name = 'Kevin'
and last_name = 'Black')
connect by prior emploee_id = manager_id;
-- 从下向上遍历树:交换父节点和子节点在connect by prior中的顺序
select level, lpad(' ', 2*level - 1) || first_name || ' ' || last_name as employee
from more_employees
start with emploee_id = (select emploee_id from more_employees where first_name = 'Kevin'
and last_name = 'Black')
connect by prior manager_id = emploee_id;
-- 从层次查询中删除节点和分支:可以利用where字句从查询树中进行过滤
select level, lpad(' ', 2*level - 1) || first_name || ' ' || last_name as employee
from more_employees
where last_name != 'Johnson'
start with emploee_id = 1
connect by prior emploee_id = manager_id;
-- 为了将Johnson下的节点全部删除,可以在connect by prior后接同样的条件
select level, lpad(' ', 2*level - 1) || first_name || ' ' || last_name as employee
from more_employees
where last_name != 'Johnson'
start with emploee_id = 1
connect by prior emploee_id = manager_id
and last_name != 'Johnson';
-- 在层次化查询中加入其它条件
select level, lpad(' ', 2*level - 1) || first_name || ' ' || last_name as employee
from more_employees
where salary < 600000
start with emploee_id = 1
connect by prior emploee_id = manager_id
and salary < 600000;
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
以下是对"Oracle高级查询技巧"的详细阐述。 一、子查询 子查询是嵌套在其他SQL语句中的查询,用于获取主查询所需的值。它可以作为SELECT、FROM或WHERE子句的一部分。例如,你可以使用子查询来找到某个部门薪水最高...
在Oracle数据库管理中,掌握高级技巧对于提升数据库性能和优化查询至关重要。以下将详细阐述文件中提及的一些关键知识点: 1. **删除表数据的注意事项**: - 使用`TRUNCATE TABLE`命令来清空表数据,而非`DROP ...
调优是Oracle高级编程的重要部分,涵盖SQL调优、存储调优、内存调优和并发控制等多个方面。SQL调优主要通过优化查询结构、减少全表扫描、使用索引等方式实现。存储调优涉及到表空间、数据块、段和分区等概念,调整...
在Oracle数据库中,高级查询是SQL语言的重要组成部分,它涵盖了多表联接、子查询...通过熟练掌握这些高级查询技巧,数据库管理员和开发人员可以更高效地处理复杂的数据查询需求,从而提升数据库应用的性能和用户体验。
Oracle数据库作为一种成熟的...内容不仅包括了数据库版本信息的查询、会话管理与控制,还涉及到了在数据查询中如何进行条件判断、使用伪列实现分页等高级技巧。掌握这些内容对于有效地管理和优化Oracle数据库非常重要。
这个名为"Oracle高级数据库大全"的压缩包文件显然包含了丰富的Oracle数据库学习资源和实践案例,旨在帮助用户深入理解并掌握Oracle数据库的高级特性与管理技巧。 首先,Oracle数据库的核心特性包括ACID(原子性、...
10. **高级查询技巧**:例如递归查询、集合成员测试、条件表达式等,帮助开发者解决复杂的数据查询问题。 通过阅读《Oracle SQL高级编程》,读者不仅可以掌握Oracle SQL的高级特性,还能学习到如何在实际项目中应用...
本节将详细探讨Oracle SQL的高级特性、优化技巧以及最佳实践。 一、子查询与连接操作 Oracle SQL支持嵌套子查询,允许在SELECT、FROM和WHERE子句中使用子查询来获取更复杂的数据。同时,通过JOIN操作(如INNER JOIN...
在Oracle数据库中,高级查询技巧往往涉及到复杂的SQL语句,其中分析函数是实现这些复杂查询的关键工具之一。本文将深入探讨分析函数中的`FIRST_VALUE()`和`LAST_VALUE()`函数,这两个函数在处理分组数据时尤其有用,...
本文将详细探讨Oracle数据库在空间管理的三个实用技巧。 首先,我们关注的是表空间的自由空间管理。通过观察表空间的自由空间,DBA可以评估每个表空间的使用情况,判断是否需要进行扩展或优化。如上所述,可以使用...
接着,PPT可能会详细介绍Oracle的高级查询技巧,如联接(JOIN)操作。联接允许将多个表的数据结合在一起查询,包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)和自连接(SELF JOIN)。通过...
在深入探讨《Oracle SQL高级编程》这一主题时,我们应当关注的是Oracle数据库系统中的SQL语言高级应用技巧,以及如何利用这些技巧来优化查询性能、增强数据处理能力,并实现更为复杂的数据分析需求。以下是对该主题...
1. **SQL优化**:SQL是Oracle数据库的主要查询语言,高级编程中会详细讲解如何编写高效的SQL语句,包括使用索引、优化查询结构、避免全表扫描等方法。 2. **存储过程和函数**:Oracle支持创建自定义的存储过程和...
二、Oracle高级特性 1. 触发器和存储过程:如何利用触发器实现数据的自动维护,以及创建和调用存储过程,提高应用程序的性能和逻辑复杂性。 2. 分区技术:介绍分区表和索引的类型(如范围、列表、哈希分区),以及...
Oracle SQL是数据库管理员和开发人员在管理Oracle数据库时...总之,"Oracle SQL 高级编程"涵盖了数据库管理和开发的多个方面,通过学习和实践,你将能够编写出更高效、更灵活的SQL查询,更好地管理和维护Oracle数据库。
在Oracle数据库管理中,查询优化是一项至关重要的任务,它直接影响到数据库系统的性能和效率。...通过阅读《Oracle查询优化改写 技巧与案例.pdf》这样的资料,可以进一步深入了解这些方法,并在实际工作中灵活运用。
8. **高级特性**:涵盖了Oracle的分区、物质化视图、物化子查询、并行执行、LOBs(大型对象)以及高级复制等特性。 9. **数据库架构**:讨论了分布式数据库系统、实时复制、数据 warehousing 和 OLAP 应用的架构...
《Oracle SQL 高级编程》一书的随书脚本集合是学习和深入理解Oracle数据库管理及SQL高级特性的宝贵资源。这些脚本涵盖了从基础查询到复杂的数据操作、存储过程、函数以及触发器等多个方面,旨在帮助读者提升在Oracle...