在这两个 SQL 查询之间,其中一个是“正确的”吗? [复制]
Posted
技术标签:
【中文标题】在这两个 SQL 查询之间,其中一个是“正确的”吗? [复制]【英文标题】:Between these two SQL queries, is one of them 'correct'? [duplicate] 【发布时间】:2020-09-02 18:13:39 【问题描述】:我正在自学 SQL 查询。我的问题来自 w3resource.com 的子查询问题集中的 sql 练习 6。总结这个问题,我们需要一个查询来显示在巴黎为客户服务的销售人员的佣金。下面是两个表,并给出了它们的列:
销售员(salesman_id、姓名、城市、佣金)
客户(customer_id、cust_name、city、grade、salesman_id)
以下是我编写的两个查询,它们以不同的方式实现了解决方案。我的问题是两者中是否有一个更“正确”的?考虑到性能、标准等的“正确”,或者两者都一样好?我问是因为我想当我继续进行更复杂的查询时,出于性能/多功能性的原因,我应该坚持使用一个吗? 谢谢
select commission from Salesman
where salesman_id IN
(select salesman_id from Customer
where city = 'Paris')
select commission from Salesman
join Customer on (Salesman.salesman_id = Customer.salesman_id)
where Customer.city = 'Paris'
【问题讨论】:
***.com/questions/1200295/sql-join-vs-in-performance 你也应该尝试为这两个查询解释计划,这样你就会知道 mysql 如何解释它们.. 查询产生不同的结果。如果有多个 Paris-customers 和同一个推销员,您将在第二个查询中多次获得该推销员的佣金。 【参考方案1】:他们都很好。
就风格而言,两者各有优势,例如
使用 IN 子句可以简化主 SQL 查询(从可读性的角度来看),因为您不必进行连接。如果您有其他几个联接,最好尽可能减少它们以跟踪正在发生的事情。 如果您有一个复合键而不是单个 salesman_id,则需要使用 JOIN。它们可能会根据您的数据库生成不同的查询计划,但与大多数代码一样,最好从编写可读性和可维护性开始,并仅优化您需要的部分。这种事情不会有任何区别。
【讨论】:
以上是关于在这两个 SQL 查询之间,其中一个是“正确的”吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当条件全部为空时,查询全部,当其中一个或两个条件为空时,为空的条件不查询,sql怎么写