【问题标题】:confusion with multiple conditions in where clause of select statement与 select 语句的 where 子句中的多个条件混淆
【发布时间】:2015-03-25 18:44:03
【问题描述】:

我是 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 拥有的宠物。我已经编写了 select 语句来查找 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 语句是否存在性能差异?

【问题讨论】:

    标签: sql


    【解决方案1】:

    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 不同的连接。

    顺便说一句 - 不要使用 0id。正常从1开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 2023-03-15
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      相关资源
      最近更新 更多