조건문, JOIN

Date:     Updated:

카테고리:

태그:

조건문

1. 여러 조건 : CASE WHEN

  • 여러 조건을 분기할 수 있는 다중 조건문
  • SQL에서 가장 범용적이며 가독성이 좋음
-- 기본 형식
SELECT
  CASE 
    WHEN 조건1 THEN 조건1이 참일 경우 결과
    WHEN 조건2 THEN 조건2가 참일 경우 결과
    ELSE 그 외 조건일 경우 결과
END AS 새로운_컬럼_이름

-- ex) 결과 : B
SELECT
  CASE
    WHEN score >= 90 THEN 'A'
    WHEN score >= 80 THEN 'B'
    WHEN score >= 70 THEN 'C'
    ELSE 'F'
  END AS grade
FROM (SELECT 85 AS score);



2. 하나의 조건 : IF

  • 단순한 조건 분기에 적합
-- 기본 형식
IF(조건문, True일 때의 값, False일 때의 값)

-- ex) 결과: 'PASS'
SELECT IF(score >= 60, 'PASS', 'FAIL') AS result
FROM (SELECT 75 AS score);



3. NULL 조건 : IFNULL

  • expression이 NULL이면 default_value 반환, 아니면 그대로 반환
  • NULL 처리에 자주 사용
-- 기본 형식
IFNULL(expression, default_value)

-- ex) 
SELECT IFNULL(NULL, 'default');  -- 결과: 'default'
SELECT IFNULL('value', 'default');  -- 결과: 'value'



4. 값이 같을 때 NULL 반환 : NULLIF

  • expr1expr2가 같으면 NULL, 아니면 expr1 반환
  • 주로 0으로 나누기 방지 등 비교에서 사용
-- 기본 형식
NULLIF(expr1, expr2)

-- ex) 
SELECT NULLIF(100, 100);  -- 결과: NULL
SELECT NULLIF(100, 200);  -- 결과: 100



5. NULL이 아닌 첫 번째 값 반환 : COALESCE

  • 인자 중 NULL이 아닌 첫 번째 값을 반환
  • 여러 개의 대체값을 순서대로 확인할 때 유용
-- 기본 형식
COALESCE(expr1, expr2, ..., exprN)

-- ex) 결과: 'value'
SELECT COALESCE(NULL, NULL, 'value', 'other');



JOIN

1. JOIN이란

  • 서로 다른 데이터 테이블을 연결하는 것
  • 두 개 이상의 테이블을 특정 조건으로 연결해서 하나의 결과 테이블로 합치는 것

2. 다양한 JOIN 방법

  • (INNER) JOIN : 두 테이블의 공통 요소만 연결
  • LEFT/RIGHT (OUTER) JOIN : 왼쪽/오른쪽 테이블 기준으로 연결
  • FULL (OUTER) JOIN : 양쪽 모두 포함. 한쪽에 없으면 NULL로 채움
  • CROSS JOIN : 모든 조합 (카티션 곱)
--- 기본 형식
SELECT *
FROM table1
JOIN table2
  ON table1.key = table2.key



(1) INNER JOIN

  • 공통된 키 값이 있는 행만 반환
-- ex) student_id가 둘 다 존재하는 경우에만 결과에 포함
SELECT *
FROM students s
JOIN scores sc
  ON s.student_id = sc.student_id;



(2) LEFT JOIN

  • 왼쪽 테이블은 모두 반환, 오른쪽에 없으면 NULL
-- ex) scores에 데이터가 없는 학생도 조회됨 (score는 NULL)
SELECT *
FROM students s
LEFT JOIN scores sc
  ON s.student_id = sc.student_id;



(3) FULL JOIN

  • 두 테이블 모두 포함 (없는 값은 NULL)
-- ex) students나 scores 중 한쪽에만 있는 데이터도 포함됨
SELECT *
FROM students s
FULL JOIN scores sc
  ON s.student_id = sc.student_id;



(4) CROSS JOIN

  • 모든 행 조합 (조심해서 사용)
-- ex) students나 scores 중 한쪽에만 있는 데이터도 포함됨
SELECT *
FROM colors
CROSS JOIN sizes;



3. USING 절

  • JOIN문에서 ON table1.col1 = table2.col1를 간단하게 작성할 수 있음
  • USING 컬럼명만 작성하면 됨
  • 두 테이블에 컬럼 이름이 같을 때만 사용 가능
-- ex)
SELECT *
FROM students
JOIN scores
USING(student_id);



SQL 카테고리 내 다른 글 보러가기

댓글 남기기