sql中select语句的执行过程,其中WHERE CONDITION子句中指定了相同的表名

Posted

技术标签:

【中文标题】sql中select语句的执行过程,其中WHERE CONDITION子句中指定了相同的表名【英文标题】:the execution process for select statment in sql where same tablename specified in WHERE CONDITION cluase 【发布时间】:2020-05-24 05:40:00 【问题描述】:
Select DISTINCT E.EmpID, E.EmpFname, E.Department 
FROM EmployeesInfo E, Employeesinfo e1
WHERE E.Department = E1.Department AND E.EmpID != E1.EmpID; 

这个命令将如何执行?相关子查询的执行方式是否与自上而下的方式相同?

每当我们在上面的例子中使用select语句的表名时,执行过程就像相关的子查询,即自上而下的方法?

这些命令的执行与正常 select from tablename where condition process 有何不同?

【问题讨论】:

您的 DBMS 是 mysql 还是 SQL-Server?请只标记其中一个。 自上而下 ??你是什​​么意思 ?? SQL 不是一种过程语言,而是一种描述性语言,然后 top donw 不能正确适用..并且您的代码中没有子查询,而只有一个查询。 你为什么选择不使用正确的、明确的、标准的、可读的JOIN语法? 【参考方案1】:

通常连接会比内部查询更快,但实际上它取决于 SQL Server 生成的执行计划。无论您如何编写查询,SQL Server 都会在执行计划上对其进行转换。如果它足够“聪明”,可以从两个查询中生成相同的计划,那么您将得到相同的结果。

对于您的情况:

Select DISTINCT E.EmpID, E.EmpFname, E.Department 
FROM EmployeesInfo E, Employeesinfo e1
WHERE E.Department = E1.Department AND E.EmpID != E1.EmpID; 

这是使用 INNER JOIN 语法的类似方式。所以它工作得更快,而不是在 SUB Query 中使用它。

【讨论】:

以上是关于sql中select语句的执行过程,其中WHERE CONDITION子句中指定了相同的表名的主要内容,如果未能解决你的问题,请参考以下文章

sql语句执行顺序

SQL语句的执行顺序

查询语句中select from where group by having order by的执行顺序

Sql where 子句

SQL执行顺序

可以在 select 语句的 where 部分中使用的 ORACLE SQL 函数