在select语句的where子句中混淆多个条件

时间:2015-03-25 18:44:04

标签: sql

我是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语句是否有任何性能差异?

1 个答案:

答案 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开始。