我是sql的新手。我在数据库中有以下表格。
table : person
columns : id, first_name, last_name, age
values : 0, 'Zed', 'Shaw', 50
table : pet
columns : id, name, age, dead
values : 0, 'Dog', 2, 0
1, 'Cat', 2, 1
table : person_pet
columns : person_id, pet_id
values : 0, 0
0, 1
现在我需要找到Zed拥有的宠物。我写了一些选择声明来找到Zed拥有的宠物,如下所示。
SELECT pet_id, pet_name, pet_age, pet_dead FROM person, pet, person_pet WHERE person.first_name = 'Zed' and person.id = person_pet.person_id and pet.id = person_pet.pet_id;
作者写的如下。
SELECT pet_id, pet_name, pet_age, pet_dead FROM person, pet, person_pet WHERE pet.id = person_pet.pet_id AND person_pet.person_id = person.id AND person.first_name = 'Zed';
两个SELECT语句都正常工作。所以它说WHERE子句中的条件顺序无关紧要。我的理解是否正确,2个SELECT语句是否有任何性能差异?
答案 0 :(得分:4)
where
子句中的顺序无关紧要,将由查询编译器进行优化。
但是现在使用了显式连接语法:
SELECT pet_id, pet_name, pet_age, pet_dead
FROM person
JOIN person_pet ON person.id = person_pet.person_id
JOIN pet ON pet.id = person_pet.pet_id
WHERE person.first_name = 'Zed'
这样,您可以在on
子句中的表链接和where
子句中的实际数据过滤之间进行区分。并且您可以使用与默认inner join
不同的联接。
顺便说一下 - 不要使用0
als id
。它通常从1
开始。