是否可以编写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)
);
答案 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以了解有关创建索引的更多信息。