如何编写我的SQL查询(如果正确)

时间:2016-09-24 13:06:39

标签: sql select

大家好我刚刚写了两个查询给了我相同的结果我想问你是否重要我是怎么写的:

1)

select First_Name, monthly_discount, pack_id, main_phone_num
from customers
where pack_id  in(select p.pack_id
from packages p JOIN sectors s
on s.sector_id = p.sector_id where s.sector_name = 'business')

2)

SELECT first_name , monthly_discount , pack_id , main_phone_num ,
                    secondary_phone_num
FROM customers
WHERE pack_id IN
            (SELECT pack_id
                FROM packages
                WHERE sector_id IN
                        (   SELECT sector_id
                            FROM sectors
                            WHERE sector_name = 'Business'))

2 个答案:

答案 0 :(得分:2)

你的写作方式是否重要?

是。首先,仅仅因为两个查询在数据上返回相同的结果集并不意味着它们在逻辑上做同样的事情。例如,select 2*2select 1 + 3返回相同的值,但它们没有进行相同的计算。 SQL查询也是如此。

在您的情况下,查询 相同。对于任何数据集,它们将返回相同的结果集。

其次,即使查询在功能上相同,数据库也可以以不同方式实现版本。这通常采用不同的基础算法的形式(您可能会对有多少种方法join感到惊讶)。这可能适用于您的情况,因为injoin通常有不同的算法。

第三点可能是最重要的。应该编写查询,以便可以阅读,理解和维护它们。大多数人发现嵌套的in有点难以理解(嵌套的not in对于凡人而言是非常难以理解的)。另一方面,join更通用,需要理解为有效使用SQL。

您首要考虑的问题应该是查询是否真的符合您的要求。非常接近的一点是可读性,清晰度和可维护性。

答案 1 :(得分:0)

两个查询都提供了相同的结果,但是在 在SQL的情况下,您将获得性能问题。 使用WHERE子句会增加执行时间 加入在第一个查询中,您使用了JOIN和WHERE子句 与第二个查询相比,它会获取结果fasetr。运用 在第一个查询中连接每个where而不是WHERE条件会更快地获取数据 比以下提供的两个查询

SELECT C.First_Name, C.monthly_discount, C.pack_id, C.main_phone_num 
    FROM customers C
    INNER JOIN packages P
    ON P.pack_id  = C.pack_id  
    INNER JOIN sectors S
    ON S.sector_id = P.sector_id
AND S.sector_name = 'business'