SQL基础一考试指南:在SQL中使用子查询(一)

2008-12-5    | |
打印本文章
RSS

导读:本文详细阐述如何在SQL中使用子查询,以及子查询所能解决的问题,如星型转换、比较、从SELECT生成表,等等。

关键词:Oracle 11g SQL基础考试 SQL子查询 在SQL中使用子查询

正在加载数据...

【TechTarget中国原创】SQL中有很多地方可以用到子查询的。本章选自《OCA Oracle Database 11g: SQL Fundamentals I Exam Guide》,将详细阐述如何在SQL中使用子查询,以及子查询所能解决的问题,如星型转换、比较、从SELECT生成表,等等。

【TechTarget中国原创】SQL中有很多地方可以用到子查询的。本章选自《OCA Oracle Database 11g: SQL Fundamentals I Exam Guide》,将详细阐述如何在SQL中使用子查询,以及子查询所能解决的问题,如星型转换、比较、从SELECT生成表,等等。

  下面是一些你可能需要将一个查询的结果作为另一个查询的输入的情况:

  用子查询结果集比较

  哪些员工的薪水是少于平均薪水值?这问题可以通过两个语句来回答,或者使用一个带子查询的语句。下面是这两种方法的例子:


select avg(salary) from employees;
select last_name from employees where salary < result_of_previous_query ;

  另一个就是使用一个带子查询的语句:

select last_name from employees
where salary < (select avg(salary)from employees); 

  在这个例子中,一个子查询用于替代父查询的WHERE子句的取值:它返回一个值,然后这个值与父查询接收的记录行进行比较。

  这个子查询可能返回多行记录。比如,你可以使用下面的语句查找所有拥有一个或多个员工的部门:


select department_name from departments where department_id in
(select distinct(department_id) from employees); 

  在上一个例子中,子查询替代了连接的使用。相同的结果可以使用下面的语句实现:


select department_name from departments inner join employees
on employees.department_id = departments.department_id
group by department_name; 

  如果子查询能返回多于一行的记录,那么比较操作符必须是可以接受多个值的。这些操作符包括IN、NOT IN、ANY和ALL。如果比较操作符是EQUAL、GREATER_THAN或LESS_THAN(它们只接受单个值),父查询就会出错。

  星型转换

  用子查询来替代连接操作的一个扩展是使用星型转换,这常用在数据仓库应用中。设想在一个很大的记录销售的表中,每一个卖单都标记为一个买家通过一个特定渠道购买的一个特定的产品。这些属性都通过标记码区分,它们是作为一个相应表的外键使用的,这些表的每一行记录描述了产品、买家和销售渠道。为了确定在德国通过Internet销售一空的所有书本记录,我们可以执行以下的查询:


select … from sales s, products p, buyers b, channels c
where s.prod_code=p.prod_code
and s.buy_code=b.buy_code
and s.chan_code=c.chan_code
and p.product='Books'
and b.country='Germany'
and c.channel='Internet'; 

  这个查询使用WHERE子句来连接这些表,然后再过滤结果。下面是一个可以产生相同结果的替代查询:


select … from sales
where prod_code in (select prod_code from products where product='Books')
and buy_code in (select buy_code from buyers where country='Germany')
and chan_code in (select chan_code from channels where channel='Internet);

  这里第一个语句使用了星型转换进行重写。这样写除了使代码变得更有美感(大多数SQL开发者都会有想同审美观点)之外,还有技术原因来说明为什么数据会更有效率地执行修改源查询代码。此外,星型查询也更容易维护;我们可以非常容易地增加一些查询分支或用一列值来替换一些字面值('Books,' 'Germany,' and 'Internet')。

查看全文
相关的白皮书
 
Oracle OCP DBA认证有哪些过程?首先来看看最受欢迎的适用于DBAs的Oracle OCP认证。Oracle OCP DBA认证是所有Oracle认证中最普及的一种认证,这一认证过程是……
 
Oracle的体系很庞大,要学习它,首先要了解Oracle的框架。在这里,简要的讲一下Oracle的架构,让初学者对Oracle有一个整体的认识。
 
Oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一下,希望让刚刚入门的人对oracle有一个总体的认识,少走一些弯路。
 
为了进一步提高Oracle认证的可选性,Oracle公司现在可以提供4种不同的认证,这些都是专为从事Oracle领域工作的人员包括DBA、开发人员以及管理人员所设计的。
 
要成为一名成功的DBA应该具备哪些实力和技能?作者详细阐述了成为一名成功的DBA所需要的一些软性技能:沟通能力、解决问题的能力、压力管理、人际交际能力以及时间管理。
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录