2013-10-10 32 views
0

是否可以编写SQL查询来检索名为'roxy'的动物的人名?如果是这样,请告诉我如何编写查询。我不认识Oracle,所以我对这个外键感到困惑。简单的Oracle SQL查询与联盟条款

此外,我们不应该为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

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

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

另外,您应该在您的表上设置主键,并在其上放置索引。

左连接用于希望从“左”表中获取所有元素,即使它们没有连接表上的匹配。

甲骨文需要按如下创建一个主键:

CREATE UNIQUE INDEX XPKperson ON person(person_id) 
+0

如何添加索引?请你解释为什么我们在oracle中使用引用。为什么不离开连接而不是内部连接? – fawzib

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了解更多关于创建索引。