Sql 高效地查找具有多个值的两个表之间的匹配项

Sql 高效地查找具有多个值的两个表之间的匹配项,sql,join,db2,Sql,Join,Db2,我正在寻找从一个表返回记录的最有效方法,这些记录在另一个表中具有匹配的编号 我想做的是这样的: SELECT * FROM CARS WHERE MODEL IN (SELECT MODEL FROM CAR_MAKES WHERE YEAR = 2018) 所以,基本上,我有一年的时间,我想从CAR_MAKES表中获取2018年的所有车型(n个),我想从CARS表中返回每种退回车型的所有产品(n个) 我只想返回CARS表的内容,其他什么都不想返回 我知道有几

我正在寻找从一个表返回记录的最有效方法,这些记录在另一个表中具有匹配的编号

我想做的是这样的:

SELECT *
FROM CARS
WHERE MODEL IN (SELECT MODEL FROM CAR_MAKES 
                WHERE YEAR = 2018)
所以,基本上,我有一年的时间,我想从CAR_MAKES表中获取2018年的所有车型(n个),我想从CARS表中返回每种退回车型的所有产品(n个)

我只想返回CARS表的内容,其他什么都不想返回

我知道有几种方法来看待这个问题。从我所看到的情况来看,“WHERE IN”语句效率不高,因此最好使用连接

欢迎提出任何意见,谢谢

更新:

这就是我现在得到的:

SELECT C.* FROM CARS AS C
JOIN CAR_MAKES CM ON
C.MODEL = CM.MODEL
WHERE CM.YEAR = 2018

您使用的是哪种数据库管理系统?(不同的产品进行不同的优化)这是在IBM DB2上进行的。请尝试左连接并从左表中选择全部1)您无法猜测查询的效率;您必须比较备选方案的查询计划,并衡量客观答案的实际性能。2) 您的左连接在
中无效,其中CM.YEAR=2018
I'已删除连接中的“左”。在对我编写的不同查询进行了一些简短的比较之后,我可以看到连接是最快的,只差一小部分。一个更大的数据集将显示WHERE子句中的all-through.LEFT-JOIN和right-side表条件。。。为什么呢?对你的答案进行解释是一种很好的做法。
SELECT *
  FROM CARS C
  LEFT OUTER JOIN CAR_MAKES CM ON C.id = CM.carsId
 WHERE CM.YEAR = 2018