Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在这两个SQL查询之间,有一个是#x27;正确';?_Mysql_Sql - Fatal编程技术网

Mysql 在这两个SQL查询之间,有一个是#x27;正确';?

Mysql 在这两个SQL查询之间,有一个是#x27;正确';?,mysql,sql,Mysql,Sql,我正在自学SQL查询。我的问题来自w3resource.com sql练习6中的问题子查询集。为了总结这个问题,我们需要一个显示巴黎为客户服务的销售人员佣金的查询。以下是两个表及其列: 销售人员(销售人员id、姓名、城市、佣金) 客户(客户id、客户姓名、城市、等级、销售员id) 下面是我编写的两个查询,它们以不同的方式实现了解决方案。我的问题是,两个选项中是否有一个更“正确”的选项?考虑到性能、标准等,“正确”还是两者都一样好?我之所以这样问是因为我想象,当我继续处理更复杂的查询时,出于性

我正在自学SQL查询。我的问题来自w3resource.com sql练习6中的问题子查询集。为了总结这个问题,我们需要一个显示巴黎为客户服务的销售人员佣金的查询。以下是两个表及其列:


销售人员(销售人员id、姓名、城市、佣金)

客户(客户id、客户姓名、城市、等级、销售员id)


下面是我编写的两个查询,它们以不同的方式实现了解决方案。我的问题是,两个选项中是否有一个更“正确”的选项?考虑到性能、标准等,“正确”还是两者都一样好?我之所以这样问是因为我想象,当我继续处理更复杂的查询时,出于性能/多功能性的原因,我是否应该坚持使用一个? 谢谢

他们都很好

就风格而言,两者都有各自的优势,例如

  • 使用IN子句简化了主SQL查询(从可读性的角度来看),因为您不必执行连接。如果您有其他几个连接,最好尽可能减少它们,以跟踪正在发生的事情
  • 如果您有一个复合键而不是一个单独的id,则需要使用联接

它们可能会根据您的数据库生成不同的查询计划,但与大多数代码一样,最好从编写可读性和可维护性开始,并只优化需要的位。这类事情不会有什么不同

此外,您还应该尝试解释这两个查询的计划,以便了解mysql是如何解释它们的。这些查询会产生不同的结果。如果有多个巴黎客户拥有相同的销售人员,您将在第二次查询中多次获得该销售人员的佣金。
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'