SQL JOIN 심화 & 서브쿼리(Subquery) 정리

My Pale Blue Dot·2025년 3월 27일
0

DBMS

목록 보기
9/10
post-thumbnail

📅 날짜

2025-03-26

📝 학습 내용


1️⃣ NATURAL JOIN (자연 조인)

✅ 개념 설명

  • NATURAL JOIN은 두 테이블에서 동일한 이름을 가진 모든 컬럼을 기준으로 자동 동등 조인을 수행한다.
  • ON 절 없이도 자동으로 조인 조건이 생성된다.
  • 공통 컬럼이 여러 개일 경우, 모든 컬럼이 조인 조건으로 사용된다.

✅ 구문

SELECT 컬럼1, 컬럼2, ...
FROM 테이블A
NATURAL JOIN 테이블B;

✅ 예제

-- userTbl과 buyTbl의 userID 컬럼을 자동으로 기준으로 잡아 조인
SELECT *
FROM userTbl u
NATURAL JOIN buyTbl b;

🔁 아래와 동일한 결과:

SELECT *
FROM userTbl u
JOIN buyTbl b
ON u.userID = b.userID;

⚠️ 주의 사항

  • 두 테이블에 동일한 컬럼명이 없거나, 데이터 타입이 다르면 오류 발생
  • 조인 조건이 명시적으로 드러나지 않아 예상치 못한 결과를 만들 수 있음 → 실무에선 잘 사용하지 않음

2️⃣ USING 절 조인

✅ 개념 설명

  • USING(공통컬럼) 구문은 JOIN ON A.col = B.col의 축약형으로, 동일한 이름을 가진 컬럼을 명시적으로 지정하여 조인할 수 있다.

✅ 구문

SELECT 컬럼1, 컬럼2, ...
FROM 테이블A
JOIN 테이블B USING (공통컬럼);

✅ 예제

-- userID 컬럼을 기준으로 userTbl과 buyTbl을 조인
SELECT *
FROM userTbl u
JOIN buyTbl b USING (userID);

🔁 동일 결과 (일반 ON 사용):

SELECT *
FROM userTbl u
JOIN buyTbl b
ON u.userID = b.userID;

⚠️ 주의 사항

  • USING 절에 명시된 컬럼은 별칭(Alias)을 붙일 수 없음
  • 일부 구형 DBMS에서는 지원하지 않거나 제한적으로 지원될 수 있음

3️⃣ 서브쿼리(Subquery)

✅ 개념 설명

  • 서브쿼리는 SQL 문장 내에 포함된 또 다른 SQL 문이다.
  • 메인 쿼리 실행 전에 서브쿼리가 먼저 실행되고, 그 결과를 기반으로 메인 쿼리가 처리된다.

🔹 공통 특징

  • () 괄호로 감싼다.
  • SELECT / FROM / WHERE / HAVING 절 등에 사용할 수 있다.
  • ORDER BY는 서브쿼리 내에서 단독 사용 불가 (TOP, ROWNUM과 함께 사용하는 경우 제외)

✅ 서브쿼리 유형별 정리


3-1️⃣ 단일 행 서브쿼리

-- '김경호'보다 키가 큰 사용자 조회
SELECT userID, name, height
FROM userTbl
WHERE height > (
  SELECT height FROM userTbl WHERE name = '김경호'
);

📌 설명:

  • 서브쿼리의 결과가 1행 1열이므로 > 연산자와 함께 사용 가능

3-2️⃣ 다중 행 서브쿼리

-- 경남 지역 사용자와 같은 키를 가진 사용자 조회 (IN)
SELECT userID, name, addr, height
FROM userTbl
WHERE height IN (
  SELECT height FROM userTbl WHERE addr = '경남'
);
-- ANY: 경남 중 아무나보다 크면 OK (OR 연산자처럼 작동)
SELECT userID, name, addr, height
FROM userTbl
WHERE height >= ANY (
  SELECT height FROM userTbl WHERE addr = '경남'
);
-- ALL: 경남 모두보다 커야 OK (AND 연산자처럼 작동)
SELECT userID, name, addr, height
FROM userTbl
WHERE height >= ALL (
  SELECT height FROM userTbl WHERE addr = '경남'
);

3-3️⃣ 다중 컬럼 서브쿼리

-- 주소별로 키가 가장 큰 사람 조회
SELECT *
FROM userTbl
WHERE (addr, height) IN (
  SELECT addr, MAX(height)
  FROM userTbl
  GROUP BY addr
);

3-4️⃣ 스칼라 서브쿼리 (SELECT 절 내부에서 사용)

-- 각 사용자의 총 구매 금액 조회
SELECT u.userID, u.name,
       (SELECT SUM(price * amount)
        FROM buyTbl b
        WHERE b.userID = u.userID) AS 총구매액
FROM userTbl u;

📌 설명:

  • 서브쿼리가 1개의 행과 열만 반환하므로 SELECT 절 안에서도 사용 가능
  • 스칼라 서브쿼리는 계산식처럼 작동

🔥 정리

항목설명
NATURAL JOIN공통 컬럼으로 자동 조인 (명시적 조건 없음)
USING 절 JOIN공통 컬럼을 명시적으로 지정하여 조인
서브쿼리SQL 내부에 포함된 또 다른 쿼리
서브쿼리 유형단일/다중 행, 다중 컬럼, 스칼라 서브쿼리 등
주의점결과 개수와 위치에 따라 사용 가능 연산자가 달라짐

🔗 참고 자료


✅ 느낀 점

이번 학습을 통해 NATURAL JOINUSING조건 지정 방식에 따라 결과가 완전히 달라질 수 있음을 알게 되었다.

또한 서브쿼리는 WHERE 조건뿐 아니라 SELECT 절 안에서도 활용 가능한 매우 강력한 도구이며,

서브쿼리의 위치와 결과 형식(단일/다중)에 따라 적절한 연산자를 선택하는 것이 핵심임을 확실히 깨달았다.


🧠 요약 (Summary)

  • NATURAL JOIN: 공통 컬럼 자동 매칭 (주의 필요)
  • USING 절 JOIN: 명시적 공통 컬럼 지정 (가독성 높음)
  • 서브쿼리: 쿼리 안의 쿼리! 강력한 조건 필터링 도구
  • 스칼라/다중/다중 컬럼 서브쿼리: 상황에 따라 다양하게 활용됨
profile
Here, My Pale Blue.🌏

0개의 댓글