SQL: 하위 쿼리와 JOIN

Dec 19 2022
하위 쿼리와 조인은 데이터베이스 관리 및 조작을 위한 표준 프로그래밍 언어인 SQL의 두 가지 중요한 개념입니다. 이 블로그에서는 하위 쿼리와 조인이 무엇인지, 어떻게 다른지, SQL 쿼리에서 각 항목을 언제 사용해야 하는지 알아봅니다.

하위 쿼리와 조인은 데이터베이스 관리 및 조작을 위한 표준 프로그래밍 언어인 SQL의 두 가지 중요한 개념입니다. 이 블로그에서는 하위 쿼리와 조인이 무엇인지, 어떻게 다른지, SQL 쿼리에서 각 항목을 언제 사용해야 하는지 알아봅니다.

하위 쿼리는 무엇입니까?

하위 쿼리는 쿼리 내의 쿼리입니다. 다른 SELECT, INSERT, UPDATE 또는 DELETE 문 내부 또는 CREATE VIEW 문 내부에 SELECT 문을 중첩하는 방법입니다. 하위 쿼리는 다음과 같은 다양한 작업을 수행하는 데 사용할 수 있습니다.

  • 조건에 따라 행 필터링
  • 외부 쿼리에서 사용할 값 계산
  • 외부 쿼리의 일부로 단일 값 또는 여러 값 반환

조인은 테이블 간의 관련 열을 기반으로 둘 이상의 테이블에서 행을 결합하는 방법입니다. 조인에는 INNER JOIN, OUTER JOIN, CROSS JOIN 등 여러 유형이 있습니다.

INNER JOIN은 조인 조건과 일치하는 행만 반환합니다.

OUTER JOIN은 조인 조건과 일치하지 않는 항목을 포함하여 두 테이블의 모든 행을 반환합니다. 외부 조인에는 LEFT JOIN과 RIGHT JOIN의 두 가지 유형이 있습니다. LEFT JOIN은 왼쪽 테이블(쿼리의 첫 번째 테이블)의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. RIGHT JOIN은 오른쪽 테이블(쿼리의 두 번째 테이블)의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다.

CROSS JOIN은 두 테이블의 모든 행의 조합인 두 테이블의 데카르트 곱을 반환합니다.

실제 예:

이 시나리오에서는 Hogwarts 데이터베이스가 있으며 다음 테이블이 아래에 나열되어 있습니다.

  • course_table: 이 테이블은 과정 이름에 관한 데이터를 포함하며 고유한 기본 키를 사용하여 식별됩니다.
  • student_table: 이 테이블에는 고유한 기본 키로 식별되는 학생 이름에 관한 데이터가 포함되어 있습니다.
  • registration_table: 이 테이블은 학생과 코스 간의 관계를 설정하는 JOIN 테이블입니다. 학생이 코스에 등록할 때마다 새 레코드가 생성됩니다. course_id는 course_table에서 과정을 식별하기 위한 외래 키이고, student_id는 student_table에서 학생을 식별하기 위한 외래 키입니다.
  • course: 
    +─────+────────────────────────────────+
    | id  | course                         |
    +─────+────────────────────────────────+
    | 1   | Defense against the dark arts  | 
    | 2   | Potions                        | 
    | 3   | History of magic               | 
    +─────+────────────────────────────────+
    
    
    student:
    +─────+────────────────────────────────+
    | id  | student                        |
    +─────+────────────────────────────────+
    | 1   | Harry Potter                   | 
    | 2   | Hermione Granger               | 
    | 3   | Ron Weasly                     |
    | 4   | Voldemort                      |   
    | 5   | Draco Malfoy                   |
    +─────+────────────────────────────────+
    
    enrollment:
    +─────+────────────+─────────────+
    | id  | course_id  | student_id  | 
    +─────+────────────+─────────────+
    | 1   | 1          | 1           | 
    | 2   | 2          | 1           |  
    | 3   | 3          | 2           |  
    | 4   | 2          | 3           | 
    | 5   | 3          | 4           | 
    | 6   | 1          | 5           |
    | 7   | 3          | 1           |   
    | 8   | 1          | 4           |  
    +─────+────────────+─────────────+
    
    
    

아래 목록은 하위 쿼리 접근 방식의 예입니다.

SELECT * FROM enrollment
WHERE enrollment.course_id IN (SELECT * FROM courses WHERE course_id = 1);

가입하다

다음은 조인 접근 방식입니다.

SELECT * FROM course AS c 
  LEFT JOIN enrollment AS e ON c.id = e.course_id
WHERE e.course_id = 1

하위 쿼리 및 조인을 사용하는 경우

하위 쿼리와 조인은 둘 다 여러 테이블에서 데이터를 검색하는 데 사용할 수 있지만 사용 사례가 다릅니다. 하위 쿼리는 일반적으로 외부 쿼리의 WHERE 또는 HAVING 절에서 내부 쿼리의 결과를 사용하려는 경우에 사용됩니다. 외부 쿼리의 일부로 단일 값 또는 여러 값을 반환하려는 경우에도 유용합니다.

조인은 일반적으로 테이블 간의 관련 열을 기반으로 여러 테이블에서 데이터를 검색하려는 경우에 사용됩니다. 조인 조건과 일치하지 않는 항목을 포함하여 두 테이블의 모든 행을 반환하려는 경우에도 유용합니다.

일반적으로 하위 쿼리는 몇 개의 행만 반환해야 할 때 더 효율적인 반면 조인은 많은 수의 행을 반환해야 할 때 더 효율적입니다. 그러나 둘 사이의 성능 차이는 테이블의 크기와 쿼리의 복잡성에 따라 달라질 수 있습니다.

결론적으로 하위 쿼리와 조인은 SQL의 여러 테이블에서 데이터를 검색하는 두 가지 중요한 도구입니다. 하위 쿼리는 외부 쿼리의 일부로 행을 필터링하고 값을 반환하는 데 유용하고 조인은 관련 열을 기반으로 여러 테이블의 행을 결합하는 데 유용합니다. 두 가지 모두 유사한 목표를 달성하는 데 사용할 수 있지만 사용할 선택은 쿼리의 특정 요구 사항에 따라 다릅니다.