繁体   English   中英

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

[英]confusion with multiple conditions in where clause of select statement

我是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语句的性能是否有所不同?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM