使用Union子句的简单Oracle SQL查询

时间:2013-10-10 18:34:44

标签: sql oracle union

是否可以编写SQL查询来检索名为'roxy'的动物的人名?如果是这样,请告诉我如何编写查询。我不知道Oracle所以我对这个外键的参考感到困惑。

另外,我们不应该为person_id添加索引,否则以后会在联合时创建速度问题?如何编写查询来添加该索引?或者引用是否也创建了索引?

  create table person (
    person_id   integer,
    name        varchar(50)
  );

  create table animal(
    owner_id    integer,
    name        varchar(50),
    foreign key (owner_id) references person (person_id)
  );

2 个答案:

答案 0 :(得分:2)

Oracle使用与SQL Server相同的连接语法。

select * from person p inner join animal a on p.person_id = a.owner_id

此外,您应该在表上设置主键,并在其上添加索引。

当您希望从“左”表中获取所有元素时,使用

左连接,即使它们在连接表上没有匹配。

在oracle上,您将按如下方式创建主键:

CREATE UNIQUE INDEX XPKperson ON person(person_id)

答案 1 :(得分:1)

您可以使用以下查询

SELECT p.name
FROM   person p,
       animal a
WHERE  p.person_id = a.owner_id
AND    a.name = 'roxy';

您应该在表上创建主键,因为它唯一地定义了一条记录。

创建索引的语法

CREATE INDEX index_name ON TABLE_NAME(column_name);

请参阅this link以了解有关创建索引的更多信息。

相关问题