고려해야 할 두 가지 측면이 있습니다 : 성능 및 유지 보수성 / 가독성 .
유지 보수성 / 가독성
나는 당신이 게시 한 원래의 쿼리보다 더 나은 / 나쁜 예라고 생각하는 다른 쿼리를 선택했습니다.
당신에게 더 좋아 보이고 더 읽기 쉬운 것은 무엇입니까?
select
e.LoginID,
DepartmentName = d.Name
from HumanResources.Employee e
inner join HumanResources.EmployeeDepartmentHistory edh
on e.BusinessEntityID = edh.BusinessEntityID
inner join HumanResources.Department d
on edh.DepartmentID = d.DepartmentID
where d.Name = 'Engineering';
또는...
select
e.LoginID,
DepartmentName = d.Name
from HumanResources.Employee e,
HumanResources.EmployeeDepartmentHistory edh,
HumanResources.Department d
where e.BusinessEntityID = edh.BusinessEntityID
and edh.DepartmentID = d.DepartmentID
and d.Name = 'Engineering';
개인적으로, 첫 번째 것은 꽤 읽을 수 있습니다. 우리는을 사용하여 테이블을 조인 INNER JOIN
하고 있음을 알 수 있습니다. 즉, 후속 조인 절에서 일치하는 행을 가져옵니다 (예 : "BusinessEntityID에서 EmployeeDepartmentHistory를 사용하여 Employee에 참여하고 해당 행 포함").
후자는 쉼표가 아무 의미가 없습니다. 모든 WHERE
절 술어로 무엇을하고 있는지 궁금합니다 .
전자는 내 뇌가 생각하는 것처럼 더 많이 읽습니다. 매일 매일 SQL과 조인을 위해 쉼표를 봅니다. 다음 단계로 안내합니다.
실제로 이러한 종류의 쿼리를 "조인"이라고하는 다른 방법이 있습니다.
그들은 모두 조인입니다. 쉼표도 조인입니다. 저자가 실제로 그들을 몰락이라고 부르지 않는다는 사실은 분명하지 않습니다. 분명해야합니다. 당신은 당신이 지정 여부, 관계형 데이터를 결합하고 JOIN
나 ,
.
공연
이것은 RDBMS에 따라 달라집니다. Microsoft SQL Server를 대표해서 만 말할 수 있습니다. 성능 측면에서 이들은 동등합니다. 당신은 어떻게 알 수 있습니까? 실행 후 계획을 캡처하고 이러한 각 명령문에 대해 SQL Server가 정확히 수행하는 작업을 확인하십시오.
위의 이미지에서 위의 두 쿼리를 모두 사용하고 있으며 조인에 대한 명시 적 문자 ( JOIN
vs ,
) 만 다릅니다 . SQL Server는 똑같은 일을합니다.
개요
쉼표를 사용하지 마십시오. 명시 적 JOIN
진술을 사용하십시오 .