查询查询所需的正确术语或样式是什么?

时间:2015-03-30 12:32:00

标签: sql oracle

去年年初,我参与了一个使用Oracle数据库的项目,并引入了一种新的查询格式,您可以在其中查询上一个查询的结果。只有几个星期我们一直在帮助这个项目,所以我不记得究竟是怎么写的。但是,它类似于下面的大纲。请注意我认为的所有查询都是在一个存储过程中编写的,只有一个过程。请原谅我粗鲁的格式,但我不记得事情是如何让我发现查询查询的能力非常棒,并且在一个语句中没有所有嵌套选择。

e.g。 SP:X

select firstName from users where active = true;

select authors from books where authorFirstName in (previous select);

有关这种查询方式的任何指导都可以帮助我研究这一点,我将非常感激,因为我想了解更多内容并更多地遵循格式。

3 个答案:

答案 0 :(得分:2)

您可以使用SQL with子句为子查询指定名称,然后使用该名称。示例:

SQL WITH clause example

答案 1 :(得分:1)

您提到的表单是subquerymay bejoin写的(取决于查询和子查询):

select firstName from users where active = true;

select authors from books where authorFirstName in (previous select);

等于:

select books.authors 
from books 
join users on books.authorFirstName =users.firstName 
where users.active = true;

或等于另一个子查询:

select authors 
from books 
where exists (select firstName 
             from users
             where 
             books.authorFirstName =users.firstName
             and active = true);

您也可以使用with声明:

with cte as (
select firstName from users where active = true)
select authors from books where authorFirstName in (select firtsname from cte);

和其他形式......

答案 2 :(得分:1)

这称为子查询。 语法通常如下:

select authors from books where authorFirstName in (select firstName from users where active = true);

与内联视图类似:

select authors from books join  
(select firstName from users where active = true) users2 on users2.firstname = authors.authorfirstname;

和条款

with (select firstName from users where active = true) as users2
select authors from books where authorsfirstname = users2.firstname;

所有人都有不同的优势和用途。