DB - SQL SELECT문_JOIN

윤지영·2024년 4월 17일

JOIN

  • INNER JOIN
  • OUTER JOIN (외부 조인)
    • LEFT OUTER JOIN,
    • RIGHT OUTER JOIN,
    • FULL OUTER JOIN
  • CROSS JOIN (교차 조인)
  • SELF JOIN (자기 조인)

INNER JOIN

두 테이블의 교집합만을 반환. 즉, 두 테이블에서 조인 조건을 만족하는 행만 선택됨.

SELECT * FROM 테이블1, 테이블2
WHERE 테이블1.공통필드 = 테이블2.공통필드;

이 경우, 테이블1과 테이블2는 공통필드가 같은 행에 대해서만 결합되며, SQL 서버는 WHERE 절의 조건을 충족하는 행들만 결과로 반환한다. 이 방식은 INNER JOIN과 동일한 결과를 생성하지만, JOIN 키워드를 사용하는 현대적인 SQL 작성법에 비해 가독성이 떨어지고 오해의 여지가 있기 때문에 권장되지 않는다.

더 명확하고 현대적인 방법으로 같은 결과를 얻기 위해, INNER JOIN 키워드를 사용하여 조인 조건을 ON 절에 명시하는 것이 좋다.

SELECT * FROM 테이블1
INNER JOIN 테이블2 ON 테이블1.공통필드 = 테이블2.공통필드;

OUTER JOIN

  • LEFT OUTER JOIN (LEFT JOIN)

    왼쪽 테이블의 모든 행오른쪽 테이블에서 조인 조건을 만족하는 행을 반환한다.
    조인 조건을 만족하지 않는 왼쪽 테이블의 행은 NULL로 채워진 오른쪽 테이블의 열과 함께 반환된다.

    SELECT A.학번, A.이름, B.과목명
    FROM 학생 A
    LEFT OUTER JOIN 수강 B ON A.학번 = B.학번;
    
  • RIGHT OUTER JOIN (RIGHT JOIN)

    오른쪽 테이블의 모든 행왼쪽 테이블에서 조인 조건을 만족하는 행을 반환한다. 조인 조건을 만족하지 않는 오른쪽 테이블의 행은 NULL로 채워진 왼쪽 테이블의 열과 함께 반환된다.

    SELECT A.학번, A.이름, B.과목
    FROM 학생 A
    RIGHT OUTER JOIN 성적 B ON A.학번 = B.학번;
  • FULL OUTER JOIN (FULL JOIN)

    왼쪽 테이블과 오른쪽 테이블의 모든 행을 반환하며, 어느 한쪽 테이블에서만 조건을 만족하는 행은 다른 테이블의 해당 필드가 NULL로 채워져 반환된다.

    SELECT A.학번, A.이름, B.과목
    FROM 학생 A
    FULL OUTER JOIN 성적 B ON A.학번 = B.학번;

CROSS JOIN

두 테이블의 모든 행이 서로 결합되는 조인으로, 특정 조인 조건을 명시하지 않는다. (ON 절 | WHERE 절이 없거나, WHERE절이 있더라도 조인조건 명시하지 않음)
두 테이블 간의 모든 가능한 조합을 결과로 반환한다.

  • ON 절, WHERE 절이 없음(특정 조인 조건 없음)

    // 테이블 A의 필드와 레코드 수는 각각 2,5개
    // 테이블 B의 필드와 레코드 수는 각각 3,5개일 때
    // 아래 SQL문을 실행하면 레코드와 필드의 수는?
    SELECT * FROM A, B
    
    // 필드 수 : 5, 레코드 수 : 25, 
    
  • 특별한 조인 조건(ON 절) 없이 WHERE 절을 사용하여 추가적인 필터링을 수행하는 쿼리

    SELECT COUNT(*) AS CNT FROM T1 CROSS JOIN T2
    WHERE T1.NAME LIKE T2.RULE
    ``

SELF JOIN

테이블이 자기 자신과 조인되는 경우. 주로 테이블 내에서 계층적 또는 순차적 데이터 관계를 조회할 때 사용된다. 자기 조인은 테이블의 복사본을 만들고 서로 다른 별칭을 사용하여 같은 테이블을 조인한다.

profile
쑥쑥쑥쑥 레벨업🌱🌼🌳

0개의 댓글