[ DB & SQL(RDBMS, NoSQL) ] 데이터 베이스 기초 이해_05.:SQL JOIN 종류와 차이점

0
post-thumbnail

[ DB & SQL(RDBMS, NoSQL) ] 데이터 베이스 기초 이해_05.:SQL JOIN 종류와 차이점

▽ 데이터 베이스 기초 이해_05 :SQL JOIN 종류와 차이점

4. SQL JOIN 종류와 차이점


💬 면접 예상 질문(기본 개념 위주).

1. SQL JOIN이란 무엇인가요?

JOIN은 두 개 이상의 테이블을 연결해서 관련 데이터를 함께 조회하기 위한 SQL 기능입니다.
주로 공통 컬럼을 기준으로 데이터를 매칭합니다.

  • SQL JOIN은 서로 다른 테이블 간 데이터를 관계 지어서 하나의 결과로 결합하는 기능입니다.

  • 주로 Pk(FK) 같은 공통 키를 기준으로 데이터를 합치며, 원하는 결과에 따라 다양한 JOIN 종류가 존재합니다.

  • JOIN을 쓰면 중복데이터를 제거하거나 여러 테이블 정보를 한 번에 조회할 수 있어서 실무에서 매우 중요합니다.

2. INNER JOIN의 정의와 동작 방식은?

INNER JOIN은 두 테이블에서 조건이 일치하는 행만 결과로 가져옵니다.
즉, 매칭되지 않으면 결과에 포함되지 않습니다.

  • INNER JOIN은 조인 조건에 맞는 레코드만 반환합니다.

  • ex)

SELECT * FROM A INNER JOIN B ON A.id = B.a_id;
  • A와 B는 모두 조건을 만족해야 결과에 포함됩니다.
  • 불필요한 데이터가 결과에 안 나오기 때문에 효율적입니다.
  • 조인 시 가장 기본적으로 많이 사용하는 방식입니다.

3. LEFT OUTER JOIN의 정의와 동작 방식은?

LEFT OUTER JOIN은 왼쪽 테이블의 모든 행을 결과에 포함하고, 오른쪽 테이블에 매칭되는 값이 없으면 NULL로 채웁니다.

  • LEFT OUTER JOIN은 기준 테이블(왼쪽)의 모든 데이터를 출력하고,
  • 오른쪽 테이블(비 기준 테이블)에 매칭되지 않으면 NULL로 표시합니다.
SELECT * FROM A LEFT OUTER JOIN B ON A.id = B.a_id;
  • A의 모든 행이 유지됩니다.
  • 주로 기준 테이블의 데이터를 보존해야 하는 리포트, 통계 등에서 자주 사용됩니다.

4. RIGHT OUTER JOIN의 정의와 동작 방식은?

RIGHT OUTER JOIN은 오른쪽 테이블(기준 테이블) 의 데이터를 모두 가져오고,
왼쪽 테이블에 매칭이 없으면 NULL로 채웁니다.

  • RIGHT OUTER JOIN은 LEFT OUTER JOIN과 반대 개념입니다.

ex)

SELECT * FROM A RIGHT OUTER JOIN B ON A.id = B.a_id;
  • B 테이블의 모든 데이터를 보장합니다.
  • 실무에서는 LEFT JOIN으로 방향만 바꿔 쓰는 경우가 많아서, 상대적으로 사용 빈도는 낮습니다.

5. FULL OUTER JOIN은 어떤 경우에 사용하나요?

두 테이블의 모든 데이터를 보존하고 싶은 경우에 , FULL OUTER JOIN을 사용합니다.
서로 매칭되지 않는 데이터 역시 모두 결과에 포함됩니다.

  • FULL OUTER JOIN은 두 테이블 모두의 데이터를 가져오며, 매칭되지 않는 것은 NULL로 채워집니다.

ex)

SELECT * FROM A FULL OUTER JOIN B ON A.id = B.a_id;
  • 두 테이블 모두 중요한 경우에 사용합니다.
  • MYSQL 등 일부 DB에서는 직접 지원하지 않기 때문에, UNION으로 구현하기도 합니다.
SELECT * FROM A LEFT JOIN B ON ... 
UNION
SELECT * FROM A RIGHT JOIN B ON ...
WHERE A.id IS NULL OR B.id IS NULL

6. CROSS JOIN이란 무엇인가요?

CROSS JOIN은 두 테이블 간의 모든 가능한 조합을 반환하게 되는데,
조건 없이 곱집합을 만든다고 생각하면 됩니다.

  • CROSS JOIN은 곱집합(Cartesian Product)을 반환합니다.

ex)

SELECT * FROM A CROSS JOIN B;
  • A가 3행, B가 2행이면 결과는 3 * 2 = 6행
  • 실무에서는 주로 테스트나 통계 계산에 일부러 사용하거나,
  • 조건 없이 JOIN을 걸었을 때 의도치 않게 발생하게 됩니다.

7. SELF JOIN이란 무엇인가요?

SELF JOIN은 같은 테이블을 두 번 불러서 서로 연결하는 방식입니다.
예를 들어 사원의 상사 관계를 찾을 때 자주 사용합니다.

  • SELF JOIN은 같은 테이블을 여러 번 참조하여 관계를 표현합니다.
SELECT A.id, A.name, B.name as manager_name
FROM Employee A
LEFT JOIN Employee B ON A.manager_id = B.id;
  • 계층 구조(조직도, 카테고리) 표현 시 매우 유용
  • 별칭(alias)를 사용하여 구분하는 것이 중요.

8. OUTER JOIN과 INNER JOIN의 차이점은?

INNER JOIN은 조건에 맞는 데이터만 가져오지만, OUTER JOIN은 조건에 맞지 않아도 한쪽(기준) 테이블의 데이터를 모두 포함합니다.

  • OUTER JOIN과 INNER JOIN의 차이는 '결과 집합의 범위'에 있습니다.

    • INNER JOIN : '조건 만족' 데이터만 반환.

    • OUTER JOIN : '조건 미충족' 시에도 NULL 포함하여 한쪽 테이블 유지.

      • LEFT OUTER JOIN -> 좌측 테이블 기준
      • RIGHT OUTER JOIN -> 우측 테이블 기준
      • FULL OUTER JOIN -> 양쪽 모두 유지.

9. NATURAL JOIN이란 무엇인가요?

NATURAL JOIN은 동일한 이름의 컬럼을 자동으로 기준으로 잡아서 조인하는 방식입니다.
하지만 실무에서는 명시적으로 ON 조건을 적는 것이 안전합니다.

  • NATURAL JOIN은 동일한 이름을 가진 컬럼을 자동으로 매칭해 조인합니다.

ex)

SELECT * FROM A NATURAL JOIN B;
  • 단점 : 어떤 컬럼으로 조인될지 명확하지 않음.
  • 유지보수 측면에서 가독성이 떨어지기에, 실무에서는 잘 쓰지 않는 편
  • 명시적 on 조건 사용 권장

10. JOIN 조건을 WHERE 절과 ON 절 중 어디에 작성하나요?

명확하게 JOIN 조건은 ON 절에 쓰고, 필터링 조건은 WHERE 절에 두는 것이 좋습니다.
OUTER JOIN에서 WHERE에 조건을 쓰면 결과가 달라질 수 있기 때문에 주의해야 합니다.

  • JOIN 조건 작성 규칙 !

    • ON 절 -> 조인 조건 작성 ( 두 테이블 연결 )

    • WHERE 절 -> 필터링 조건 작성

    • OUTER JOIN에서는 특히 중요.

      • WHERE 에서 조건 걸면, OUTER 효과 사라져 INNER JOIN 처럼 될 수 있음.

ex)

-- 올바른 방법
SELECT * 
FROM A
LEFT JOIN B ON A.id = B.a_id
WHERE A.status = 'ACTIVE';

-- 잘못된 예시 (OUTER JOIN 효과 상실)
SELECT *
FROM A
LEFT JOIN B ON A.id = B.a_id
WHERE B.id IS NOT NULL;

11. USING 절은 언제 사용되며 어떤 역할을 하나요?

12. 조인 시 중복 컬럼(column name)을 어떻게 처리하나요?

13. INNER JOIN과 WHERE 절을 같이 사용할 경우 주의할 점은?

14. 조인 순서가 실행 계획에 영향을 줄 수 있나요?

15. JOIN을 사용할 때 NULL 값은 어떻게 처리되나요?

16. JOIN에서의 카티전 곱(Cartesian Product)이란 무엇인가요?

17. JOIN과 서브쿼리(Subquery)의 차이점은?

18. 3개 이상의 테이블을 조인할 수 있나요? 방법은?

19. 동등 조인(equi join)과 비동등 조인의 차이는?

20. SQL JOIN과 관계형 모델의 관계는 무엇인가요?

💬 면접 예상 질문(실무적인 요소 위주).

1. 실무에서 가장 자주 사용하는 JOIN은 무엇인가요?

2. INNER JOIN과 LEFT JOIN을 선택할 때의 기준은 무엇인가요?

3. JOIN 시 성능 이슈가 발생한다면? 어떤 케이스일지? 해결법은?

4. 복잡한 다중 JOIN 쿼리의 성능을 개선하는 케이스는?

5. JOIN 순서 변경이 성능에 미치는 영향은?

6. JOIN을 통한 조회 대신 View 또는 서브쿼리를 사용하는 케이스는?

7. 조인 시 필요한 컬럼만 가져오기 위한 전략은?

8. 인덱스를 고려한 조인 성능 최적화 전략은?

9. N+1 문제와 JOIN의 관계는 무엇인가요?

10. ORM (예: JPA, Sequelize)에서 JOIN 처리는 어떻게 하시나요?

11. LEFT JOIN 결과가 예상과 다를 때 디버깅 방법은?

12. JOIN 대상 테이블이 너무 커서 성능이 떨어질 때 해결 전략은?

13. OUTER JOIN이 꼭 필요한 시나리오는?

14. JSON 컬럼을 가진 테이블 간의 JOIN을 수행한다면?

15. NoSQL에서 JOIN이 불가능한 경우, 어떤 방식으로 관계를 표현해야 할까요?

16. BI 리포트 생성 시 JOIN 사용에서 주의할 점은?

17. 비즈니스 로직상 LEFT JOIN을 INNER JOIN으로 바꾸었을 때의 영향은?

18. JOIN이 너무 많을 경우 발생하는 쿼리 최적화 전략은?

19. 실제 개발에서 SELF JOIN을 사용할 케이스는?

20. 실시간 API 응답에서 JOIN 쿼리 대신 캐싱 또는 Pre-join View를 사용하는 경우는?

0개의 댓글