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子句中指定了相同的表名的主要内容,如果未能解决你的问题,请参考以下文章