반응형
해당 글에서는 PostgreSQL에서 조건식과 연산자에 대한 이해를 돕기 위해 작성한 글입니다.
1) 조건식과 연산자(CONDITIONAL EXPRESSIONS & OPERATORS)
💡 조건식과 연산자(CONDITIONAL EXPRESSIONS & OPERATORS)
- 데이터를 필터링하거나 쿼리 결과를 제한하는 데 사용됩니다.
- 조건식은 데이터베이스에서 특정 조건을 충족하는 행만 선택하도록 지정합니다. 다양한 연산자를 사용하여 조건식을 작성할 수 있습니다.
💡 [참고] 일반적인 데이터베이스 연산자에는 다음과 같은 것들이 있습니다:
연산자 | 설명 |
등호 (=) | 값이 같은지 확인합니다. |
부정 등호 (!= 또는 <>) | 값이 같지 않은지 확인합니다. |
크다 (>), 작다 (<), 크거나 같다 (>=), 작거나 같다 (<=) | 값의 대소를 비교합니다. |
BETWEEN | 값이 범위 내에 있는지 확인합니다. |
IN | 값이 주어진 목록에 있는지 확인합니다. |
LIKE | 특정 패턴과 일치하는지 확인합니다. |
2) 조건식과 연산자 : CASE 문
💡 CASE 문
- 조건부 논리를 수행하는 데 사용되는 함수이며 일련의 조건을 평가하고 첫 번째로 충족되는 조건에 따라 결과를 반환하는 함수입니다.
- SELECT, WHERE, GROUP BY, HAVING 표현식 등 모든 위치에서 사용할 수 있습니다.
- CASE문은 일반형(General Expression)과 단순형(Simple Expression)으로 나누어집니다.
1. 일반형(General Expression) CASE 문 구조
💡 일반형(General Expression) CASE 문
- 다양한 조건을 평가하고 각 조건에 따라 결과를 반환합니다.
- 각 조건은 WHEN 절로 시작하며, 조건이 참일 때 실행할 문장들을 지정합니다. ELSE 절은 모든 조건이 거짓일 때 실행할 문장을 지정합니다.
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
[WHEN ...]
[ELSE else_result]
END (반환 컬럼명)
💡 일반형(General Expression) CASE 문 구조
1. CASE
- CASE문의 시작
2. WHEN condition_1, condition_2
- 평가하려는 ‘조건’을 의미합니다.
- 조건이 true로 평가가 되면 해당하는 result_1, result_2 값이 반환됩니다.
- 조건이 충족되지 않으면 ELSE 절의 result_n 값이 반환됩니다
3. THEN result_1, result_2
- 조건에 만족하는 경우 해당 컬럼에 반환하는 ‘결과’를 의미합니다.
4. 반환 컬럼명
- CASE문 결과로 반환되는 컬럼 명을 의미합니다.
5. END
- CASE문의 종료
6. (선택) 반환 컬럼명
- 해당 CASE문을 통해서 반환되는 컬럼 명을 지정합니다.
💡 사용 예시
- users 테이블에서 name, age, category 컬럼을 조회합니다.
- 그중 category 컬럼을 조회하는 데는 CASE문으로 조건이 주어집니다.
1. age가 18 미만인 경우 category 컬럼은 ‘Minor’의 값을 가집니다.
2. age가 18 이상이고 65 미만인 경우 category 컬럼은 ‘Adult’라는 값을 가집니다.
3. 그 외에는 컬럼은 category ‘Senior’라는 값을 반환합니다
SELECT name, age,
CASE
WHEN age < 18 THEN 'Minor'
WHEN age >= 18 AND age < 65 THEN 'Adult'
ELSE 'Senior'
END AS category
FROM users;
2. 단순형 (Simple Expression) CASE 문 구조
💡 단순형 (Simple Expression) CASE 문
- 하나의 변수를 평가하여 조건에 따라 결과를 반환합니다. 변수를 평가하는 부분을 CASE 표현식이라고 하며, 표현식의 값을 비교하여 WHEN 절에 해당하는 문장을 실행합니다.
- ELSE 절은 선택사항이며, 표현식의 값이 WHEN 절에 해당하는 조건이 없을 때 실행됩니다.
CASE expression
WHEN value_1 THEN result_1
WHEN value_2 THEN result_2
[WHEN ...]
ELSE
else_result
END (반환 컬럼명)
💡 단순형 (Simple Expression) CASE 문 구조
1. CASE
- CASE문의 시작
2. expression
- 하나의 변수
3. WHEN condition_1, condition_2
- 평가하려는 ‘조건’을 의미합니다.
- 조건이 true로 평가가 되면 해당하는 result_1, result_2 값이 반환됩니다.
- 조건이 충족되지 않으면 ELSE 절의 result_n 값이 반환됩니다
4. THEN result_1, result_2
- 조건에 만족하는 경우 해당 컬럼에 반환하는 ‘결과’를 의미합니다.
5. END
- CASE문의 종료
6. 반환 컬럼명
-CASE문 결과로 반환되는 컬럼 명을 의미합니다.
💡 사용 예시
- film 테이블에서 title, rating, rating_description 컬럼을 조회합니다. 그중에서 하나의 변수 인 rating 컬럼의 값에 따라 결과를 반환합니다.
1. rating 값이 ‘G’이면 'General Audiences'를 반환합니다.
2. rating 값이 ‘PG’이면 ‘Parental Guidance Suggested’를 반환합니다.
3. rating 값이 ‘PG-13’이면 ‘Parents Strongly Cautioned’를 반환합니다.
4. rating 값이 ‘R’이면 ‘Restricted’를 반환합니다.
5. rating 값이 ‘NC-17’이면 ‘Adults Only’를 반환합니다.
SELECT title,
rating,
CASE rating
WHEN 'G' THEN 'General Audiences'
WHEN 'PG' THEN 'Parental Guidance Suggested'
WHEN 'PG-13' THEN 'Parents Strongly Cautioned'
WHEN 'R' THEN 'Restricted'
WHEN 'NC-17' THEN 'Adults Only'
END rating_description
FROM film
ORDER BY title;
[ 더 알아보기 ]
💡그래서 일반형과 단순형에 대해 차이가 뭔가?
- 일반형(CASE 문)
- 다양한 조건을 평가하고 각 조건에 따라 결과를 반환합니다. 즉, WHEN 절로 시작하여 조건이 참일 때 실행할 문장들을 지정하고, ELSE 절은 모든 조건이 거짓일 때 실행할 문장을 지정합니다.
- 단순형(CASE 문)
- 하나의 변수를 평가하여 조건에 따라 결과를 반환합니다. WHEN 절에 해당하는 조건이 없을 때 ELSE 절의 문장이 실행될 수 있습니다.
🔥 결론적으로 일반형의 경우는 조건을 기준으로 값을 찾습니다. 단순형의 경우는 값을 기준으로 값을 변환해 줍니다.
- 일반형 : WHEN 조건 THEN 값,
- 단순형: WHEN 컬럼 값 THEN 값
3. 사용구조
💡 각각 CASE문을 활용하여 사용하는 예시를 확인해 봅니다.
3.1. SELECT 문에서 조건부 컬럼 조회
💡 SELECT 문에서 컬럼에 대한 조건부 조회가 가능합니다.
SELECT column_name,
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result3
END
FROM table_name;
3.2. SELECT 문에서 조건부 컬럼 조회 : 약어 지정
💡 SELECT 문에서 컬럼에 대한 조건부 조회 후 약어(Alias)를 지정합니다.
SELECT column_name,
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result3
END AS case_result
FROM table_name;
3.3. WHERE 절에서 조건부 조건값 조회
💡WHERE 절에서 조건부 조건값으로 사용이 가능합니다.
SELECT column_name(s)
FROM table_name
WHERE CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END;
3.4. ORDER BY 절에 조건부 조회 방법
💡 ORDER BY절에서 조건부 정렬이 가능합니다.
SELECT *
FROM orders
ORDER BY
CASE
WHEN status = 'completed' THEN price
WHEN status = 'pending' THEN -price
END DESC
3) 조건식과 연산자 : COALESCE
💡 COALESCE
- 표현식 목록 중에서 첫 번째로 null이 아닌 표현식을 반환하는 데 사용이 됩니다. 주로 null 값을 지정된 기본값으로 대체하는 데 사용이 됩니다.
💡 COALESCE 구조
COALESCE(표현식1, 표현식2, ..., 표현식N)
💡 [참고] 사용예시
- column1이 null이라면, COALESCE 함수는 new_column의 값으로 'N/A'를 반환합니다.
SELECT COALESCE(column1, 'N/A') AS new_column
FROM table_name;
4) 조건식과 연산자 : NULLIF
💡 NULLIF
- 두 개의 인수를 받아서 첫 번째 인수와 두 번째 인수가 같으면 NULL을 반환하고 다르면 첫 번째 인수를 반환하는 함수입니다.
💡 NULLIF 기본구조
NULLIF(argument_1,argument_2);
💡 [참고] 사용예시
- 첫 번째 예시에서는 10과 10이 같기 때문에 NULL을 반환합니다.
- 두 번째 예시에서는 'apple'과 'banana'가 다르기 때문에 'apple'을 반환합니다.
SELECT NULLIF(10, 10) AS Result; -- NULL
SELECT NULLIF('apple', 'banana') AS Result; -- 'apple'
5) 조건식과 연산자 : CAST
💡 CAST
- 데이터베이스에서 데이터 유형을 변환하는 데 사용되는 함수입니다. 일반적으로 데이터 유형이 다른 두열을 비교하거나 연결해야 할 때 유용하게 사용됩니다.
1. CAST 함수를 이용한 타입 변환
💡 CAST 함수를 이용한 기본구조
- expression : 변환해야 하는 값 또는 열을 의미합니다.
- data_type : 표현식을 변환할 원하는 데이터 유형을 의미합니다.
CAST(expression AS data_type)
2. operator를 이용한 타입 변환
💡 operater를 이용한 기본구조
- expression : 변환해야 하는 값 또는 열을 의미합니다.
- type : 표현식을 변환할 원하는 데이터 유형을 의미합니다.
expression::type
💡 [참고] PostgreSQL의 데이터 타입
데이터 타입 | 설명 |
BOOLEAN / BOOL | 논리 값 (참 또는 거짓) |
CHAR | 고정 길이 문자열 |
VARCHAR | 가변 길이 문자열 |
TEXT | 가변 길이 텍스트 |
SMALLINT | 2바이트 정수 |
INT | 4바이트 정수 |
SERIAL | 자동 생성되는 고유 식별자 |
INTEGER | 4바이트 정수 |
FLOAT | 부동 소수점 숫자 |
FLOAT8 | 8바이트 부동 소수점 숫자 |
REAL | 부동 소수점 숫자 |
DATE | 날짜 |
TIME | 시간 |
TIMESTAMP | 날짜 및 시간 |
TIMESTAMPZ | 타임존이 포함된 날짜 및 시간 |
INTERVAL | 시간 간격 |
UUID | 고유 식별자 |
ARRAY | 배열 |
JSON | JSON 데이터 |
JSONB | 이진 형식의 JSON 데이터 |
HSTORE | 키-값 쌍으로 이루어진 데이터 |
BOX | 사각형 |
LINE | 선 |
POINT | 점 |
LSEG | 선분 |
POLYGON | 다각형 |
INET | IPv4 또는 IPv6 주소 |
MACADDR | MAC 주소 |
반응형
'DB > 이론 및 문법' 카테고리의 다른 글
[DB/Postgres] 저장 프로시저(Stored Procedure) 매개변수 사용방법 : IN, OUT, INOUT (1) | 2024.01.27 |
---|---|
[DB/Postgres] SERIAL 데이터 타입 이해하기 : Auto Increment Column (0) | 2024.01.23 |
[DB] 관계형 데이터베이스(RDBMS) 구조 : DDL, DML, DCL, TCL (1) | 2023.11.14 |
[DB/mongo] Document DB 이해하기 -2 : MongoDB 및 Robo 3T 설치 및 사용예시 (0) | 2023.09.24 |
[DB/mongo] Document DB 이해하기 -1 : MongoDB 이론 및 주요 메서드 (0) | 2023.09.24 |