postgresql 쿼리와 친해지기(작성중)

Yun·2021년 4월 10일
0

postgresql

목록 보기
3/3

조건문 함수

case 함수는 sql에서 가장 기본적인 조건문 함수로 이 함수를 사용하여 컬럼에 특정한 조건을 부여 할수 있다. 특히 다른 프로개르밍 언어에서 IF-ELSE 문과 대응되는 것으로 CASE 로 시작하여 END로 끝나는 형태를 갖는다.

학생의 점수 별로 grade 라는 컬럼에 A 학점 부터 B 학점을 부여 하려고 합니다. 다음과 같은 쿼리문을 작성하면 됩니다.

select id, name, score, CASE
	WHEN score <= 100 AND score >= 90 THEN 'A'
    WHEN score <= 89 AND score >= 80 THEN 'B'
    WHEN score <= 79 AND score >= 70 THEN 'C'
    WHEN score < 70 THEN 'F'
    END grade
FROM student_score;

이처럼 CASE 함수를 이용하여 특정 조건을 갖는 컬럼 및 다양한 오브젝트를 만들 수 있어 가장 기본이 되고 자주 쓰이는 함수 이므로 꼭 기억하기!!

COALESCE 함수

coalesce() 함수는 주로 데이터를 조회할 경우, NULL값을 다른 기본 값으로 대체할 때 자주 사용된다.

예를 들어 student_score 테이블에 학생이 시험을 치르지 않아 모든 NULL 값을 0점으로 바꿔야 할때 CASE 함수를 쓸 수도 있지만 주로 COALESCE() 함수를 이용한다.

coalesce() 함수의 동작원리를 살펴보면 매개변수를 순서대로 평가하여 NULL값이 아닌 첫 번째 매개변수를 반환한다.

SELECT COALESCE(null, null, null, '빈 값') AS column1;

student_score 테이블에 점수 score 값이 NULL 인 학생을 추가하여 보고, COALESCE()함수를 이용하여 NULL 값을 0점으로 바꿔봅시다.

INSERT INTO student_score(name, score)
VALUES ('Youjun', NULL), ('Minjoo', Null)

COALESCE 함수를 이용하여 score 컬럼이 NULL 값을 갖는다면 그값을 0점으로 바꾸고 이후 CASE 함수를 이용하여 다시 등급을 나누기

SELECT id, name, COALESCE (score, 0), CASE
	WHEN score <= 100 AND score >= 90 THEN 'A'
    WHEN score <= 89 AND score >= 80 THEN 'B'
    WHEN score <= 79 AND score >= 70 THEN 'C'
    WHEN COALESCE THEN 'F'
    END grade
FROM student_score;

COALESCE() 함수는 JOIN 문과 더불어 자주 쓰이게 됩니다.

NULLIF 함수

NULLIF() 함수는 NULL을 이용하는 가장 기본적인 조건문 함수이다.
이전에 COALESCE()함수를 이용하여 NULL값을 0으로 바꾸었다. 그렇다면 이제 0을 NULL 값으로 바꾸고 싶을때 사용하는 함수가 바로 NULLIF() 이다.

NULLIF()함수는 다음과 같이 2개의 매개 변수를 필요로 한다.

NULLIF (<매개변수1>, <매개변수2>)

매개변수1 과 매개변수2가 같은 경우 NULLIF() 함수는 NULL을 반환하고 서로 다를 경우 매개변수1을 반환한다.

SELECT NULLIF (20,20) AS column; - NULL 반환

SELECT NULLIF (22,23) AS column2; - 22 반환

NULLIF() 함수의 활용 사례를 찾아보면 주로 어떤 값을 0으로 나눌 때 같은 에러가 나는 수학계산을 할 때 유용하게 쓰인다.
예를 들어 12개의 초콜릿을 여러 명의 학생에게 나눠주려고 한다. 만약 학생수가 4명이라면 다음과 같은 방법으로 몫을 구할 수 있다.

SELECT 12/4 AS share;
SELECT 12/0 AS share; - Error

하지만 서버의 에러가 아닌 "나눌 수 없음" 을 출력하는 것이 목적이니 divison_By_zero 테이블에 있는 students 컬럼과 coalesce()함수를 사용하여 "나눌 수 없음"을 출력합니다.

SELECT students, COALESCE((12/NULLIF(students, 0))::char, '나눌 수 없음') AS share
FROM division_by_zero;

배열 연산자와 함수

배열 데이터 타입은 JSON 데이터 타입과 더불어 중요한 데이터 타입이었다.
따라서 배영을 이용하여 비교, 포함관계, 병합 등 다양하게 응용할 줄 알아야 한다. 배열 연산자와 함수를 함께 배우면서 배열을 더욱 유용하게 사용하게 될 것이다.

배열 연산자

기본적으로 배열도 마찬가지로 비교 연산자를 사용할 수 있다.

SELECT ARRAY[5.1, 1.6, 3]::INTEGER[] = ARRAY[5, 2, 3] as result;

배열 연산자에서는 포함관계를 확인하는 방법으로 다음과 같은 여산자를 사용한다.

  • <@ 또는 @> : 포함관계
    ARRAY[1,2,3] @> ARRAY[1,3]
    TRUE
  • && : 겹칩 유/무
    ARRAY[1,2,3,4] && ARRAY[1,5,6]
    TRUE
  • || : 배열끼리의 병합
    - 배열끼리의 병합:
    ARRAY[1,2,3] || ARRAY[1,3]
    {1,2,3,1,3}
    • 2차원 배열로 병합:
      ARRAY[[1,2,3],[4,5,6]] || ARRAY[7,8,9]
      {{1,2,3},{4,5,6},{7,8,9}}
    • 원소 배열 병합:
      1 || ARRAY[2,3,4]
      {1,2,3,4}
profile
개발 재밌따..ㅎ

0개의 댓글