[SQL] 조건문 (IF~ELSE / CASE)

Kim Yuhyeon·2023년 11월 27일
0

SQL 

목록 보기
19/21

IF ~ ELSE

IF [조건절 TRUE일 경우 값]
ELSE [조건절 FALSE일 경우 값]
END [컬럼명]

CASE

CASE 
	WHEN [조건절] THEN [TRUE일 경우 값] 
    ELSE [FALSE일 경우 값]
END

차이점

if else 와 case 는 서로 다른 기능을 갖고있습니다. 바로 우선순위 입니다.
if 문에는 우선순위의 개념이 존재합니다.

if,          우선순위 1
else if 우선순위 2
else    우선순위 3

우선순위 1 -> 2 -> 3 check 할 수 있는 로직이 생성됩니다.
case 문에는 우선순위가 없습니다.

switch (변수)
case 1
case 2
default 

case 1, 2, default 를 검사하는데 동시성을 갖습니다. 이는 완벽한 Mux 를 의미합니다.
if else 또한 Mux 를 이용해서 구현이 됩니다만, Mux 의 Chain 형태 (Mux 가 나열된) 로 로직이 합성됩니다.
즉, case 로 표현이 가능하다면 case 가 Logic size 입장에서 적게 사용가능합니다.

만약 CASE문을 사용하기로 선택 했다면, 적어도 CASE 조건이 맞는 하나는 있어야 한다. 그렇지 않을 경우에 에러를 잡기 위한 에러 핸들러(error handler)를 정의 해야할 필요가 있다. IF 문은 그럴 필요가 없다.

같은 조건문을 if~else if문과 case문으로 코드를 만들었을 때 실행 결과가 나오는 시간을 재봤다.
case문이 0.001초 정도 빨랐다.
조건을 만 번 실행해서 말이다.
빠른 이유는 case문의 분기 테이블(점프 테이블) 때문이었다.

  • 분기 테이블 이란 키와 벨류로 저장하는 것이다.

예시

  • if~else
    if문은 su++; 을 읽을 때
    Load su -> add 1-> save su 세 번의 연산이 된다.
  • case문은 비교할 때 두 번의 연산만 필요하다. 키를 찾으면 벨류를 출력하는 것이다. 아주 빠른 연산이다.
    이런 이유로 if else if문은 최소 3번 ~ 4번 실행이 된다. 조건이 길수록 and and and 연산이 더 늘어나는 것이다.
    하지만, 요즘의 컴퓨터 같은 경우는 워낙 성능이 좋기에 case문과 if~else if문 어느 걸 사용하느냐가 문제가 되지 않는다.

참고

0개의 댓글