2016-09-24 2 views
0

인사들 (올바른 경우) 내 SQL 쿼리를 작성하는 방법의 문제를 않습니다내가 그냥 나에게 나는 내가 그것을 작성하는 방법 중요 여부를 물어보고 싶은게 같은 결과를 준이 쿼리를 작성

select First_Name, monthly_discount, pack_id, main_phone_num 
from customers 
where pack_id in(select p.pack_id 
from packages p JOIN sectors s 
on s.sector_id = p.sector_id where s.sector_name = 'business') 

2)

SELECT first_name , monthly_discount , pack_id , main_phone_num , 
        secondary_phone_num 
FROM customers 
WHERE pack_id IN 
      (SELECT pack_id 
       FROM packages 
       WHERE sector_id IN 
         ( SELECT sector_id 
          FROM sectors 
          WHERE sector_name = 'Business')) 
+0

, 더 당신에게 모두 쿼리에 비해 빠른 데이터를 가져 오는 WHERE 당신이 사용하고있는'RDBMS'보다는 어디 를 사용하면 모든 결합합니다. 나는 아마도'EXISTS/JOIN' 조합과 함께 할 것입니다. –

답변

2

은 어떻게 당신의 기록이 중요한가요?

예. 첫째, 데이터에서 동일한 결과 집합을 반환하는 두 개의 쿼리가 논리적으로 동일한 작업을 수행한다는 것을 의미하지는 않기 때문입니다. 예를 들어 select 2*2select 1 + 3은 같은 값을 반환하지만 동일한 계산을 수행하지는 않습니다. SQL 쿼리에 대해서도 마찬가지입니다.

귀하의 경우, 과 동일합니다. 모든 데이터 집합에 대해 동일한 결과 집합을 반환합니다.

둘째, 쿼리가 기능적으로 동일해도 데이터베이스가 버전을 다르게 구현할 수 있습니다. 이것은 대개 다른 기본 알고리즘의 형태를 취합니다 (join을 수행하는 방법이 여러 가지 방법에 놀라실 수 있습니다). injoin에는 서로 다른 알고리즘이있는 경우가 많으므로이 경우에 해당됩니다.

세 번째 요소가 가장 중요합니다. 검색어는 사람으로 읽고 이해하고 유지 관리 할 수 ​​있어야합니다. 대부분의 사람들은 중첩 된 in을 따르기가 약간 어렵다고 판단하고 (중첩 된 not in은 단순한 필사자에게는 이해하기 힘듭니다). 반면에 join은보다 일반적이며 SQL을 효과적으로 사용하기 위해 이해해야합니다.

기본 질문은 쿼리가 실제로 원하는대로 수행되는지 여부입니다. 매우 가까운 순간은 가독성, 명확성 및 유지 보수성입니다.

+0

감사합니다. SQL을 좀 더 이해하는데 많은 도움을주었습니다. –

0

두 쿼리 모두 동일한 결과를 제공하지만 SQL에서는 성능 문제가 발생합니다. WHERE 절을 사용하면 실행 시간이 늘어나고 과 JOINS가 비교됩니다. 첫 번째 쿼리에서 JOIN 및 WHERE 절 을 사용하여 두 번째 쿼리와 비교하여 결과 fasetr을 가져옵니다. 아래에 규정 된 첫 번째 쿼리의 조건이

SELECT C.First_Name, C.monthly_discount, C.pack_id, C.main_phone_num 
    FROM customers C 
    INNER JOIN packages P 
    ON P.pack_id = C.pack_id 
    INNER JOIN sectors S 
    ON S.sector_id = P.sector_id 
AND S.sector_name = 'business' 
+0

당신의 설명에 대해 대단히 감사합니다. –

+0

이것은 질문에있는 두 개의 질문과 같습니다. (동일한 고객이 두 번 이상 선택되는 결과를 가져올 수 있습니다.) 그리고 "where 절의 조건"이 값 비싸다는 생각은 완전한 난센스입니다. IMHO. – wildplasser

관련 문제