我正在查找编写查询的不同方法,我只是想知道您认为哪种方式更适合使用以下选项:
SELECT a.salary
FROM emp a
JOIN emp b ON a.salary < b.salary
WHERE b.id = 200
或
SELECT salary
FROM emp
WHERE salary < (SELECT salary
FROM emp
WHERE id = 200)
我在表格中执行了大约300条记录的执行时间,它们大致相同,所以这更多地是关于偏好和接受的标准。我个人更喜欢第二种方式(更容易阅读给我)。我觉得第一是标准的。你们都在想什么?
答案 0 :(得分:3)
我不认为这个问题有一个明确的答案,因为它实际上取决于查询本身的上下文。 RDMS。
因此,在您的情况下,您已经完成了300条记录的研究。 3,000,000怎么样?这有什么不同吗?
我个人喜欢Joins over Sub-Queries,如果我可以帮助的话,但就像我说的那样,这是根据具体情况确定的。
答案 1 :(得分:1)
SQL是一种声明性语言,广义意味着您告诉数据库您想要什么,以及数据库决定如何最好地获取它。
出于这个原因,编写查询的方式很多,其目的是使其目标最明显/可读(这就是为什么子查询在这里有意义)。
但是,并非所有RDBMS都是相同的,并且查询优化器能够“等同”技术上相同但编写方式不同的查询的能力因db而异。
例如,MySQL只有一个嵌套循环连接算法,在处理大型数据集的子查询时可能会出现问题。您将不得不尝试使用不同的数据集,看看优化器在幕后做了什么。