1. 쿼리에 사용되는 연산자와 함수의 종류
- 논리,비교 연산자와 조건문 함수
- 배열 연산자와 함수
- JSON 연산자와 함수
- 날짜 및 시간 연산자와 함수
- 자주 쓰이는 연산자와 함수
1.1 논리,비교 연산자와 조건문 함수
: 논리 연산자는 AND,OR,NOT 3가지로 구성된다.
: 논리연산자에서 사용되는 데이터 타입인 BOOLEAN의 결과값은 TRUE, FALSE, NULL 3가지로 구성된다.
1.2 비교범위 연산자
: 조건문 사용시 어떤 표현이 참인지 거짓인지 알아야 할 때 사용하는 비교술어에는 아래와 같은 종류들이 있다.
- IS TRUE : BOOLEAN 조건이 참인지 거짓인지 알아보는 연산자(참:TRUE, 거짓:FALSE)
- IS NOT TRUE : BOOLEAN 조건이 참인지 거짓인지 알아보는 연산자(참:FALSE, 거짓:TRUE, NULL값인 경우 참이 아니므로 TRUE 값을 가진다.)
- IS FALSE : BOOLEAN 조건이 참인지 거짓인지 알아보는 연산자(참:FALSE, 거짓:TRUE, NULL값인 경우 FALSE 값을 가진다.)
- IS NOT FALSE
- IS NULL : BOOLEAN 조건이 NULL인지 알아보는 연산자(값이 NULL인 경우: TRUE, 값이 NULL이 아닌 경우: FALSE)
- IS NOT NULL
: 비교연산자와 비교술어 사용 시 결과값의 차이
- SELECT NULL = 'false' AS equal_false, NULL IS FALSE AS is_false;
- 첫 번째 NULL = 'false'의 결과값은 NULL의 값을 알 수 없으므로 결과값이 NULL이 된다.
- 두 번째 NULL IS FALSE의 결과값은 결과값이 FALSE가 아니므로 결과값이 FALSE가 된다.
: 아래의 예시와 같이 비교연산자는 범위연산자로 대체할 수 있다.
- SELECT * FROM example_table WHERE 1 <= num_col AND num_col <= 9;
- SELECT * FROM example_table BETWEEN 1 AND 9;
- SELECT * FROM example_table WHERE 1 <= num_col AND num_col <= 9;
- SELECT * FROM example_table NOT BETWEEN 1 AND 9;
2. 조건문 함수
2.1 CASE 함수
: 프로그래밍 언어에서의 IF-ELSE 문과 대응되는 함수
: 아래의 형식에서 모든 조건이 TRUE가 아니고 ELSE 문이 없을 경우 NULL 값을 반환한다.
- CASE
- WHEN < 조건문1> THEN <결과문1>
- WHEN < 조건문2> THEN <결과문2>
- ELSE <결과문3>
- END
2.2 COALESCE 함수
: 데이터를 조회할 경우, NULL 값을 일괄적으로 다른 기본값으로 대체할 때 사용한다.
: 아래와 같은 형식으로 작성되며, 함수 내의 매개변수들의 값을 하나씩 검사해 NULL이 아닌 첫 번째 매개변수 값을 출력해준다.
- COALESCE(<매개변수1>,<매개변수2>,....)
2.3 NULLIF 함수
: 0을 NULL 값으로 바꿀 때 사용하는 함수
: 매개변수1과 매개변수2가 같은 경우 NULL을 반환하고, 서로 다른 경우 매개변수 1을 반환한다.
- NULLIF(<매개변수1>,<매개변수2>)
: 주로 수학계산을 할 때 유용하게 쓰인다.특정 값을 0으로 나눠 에러가 발생하는 경우 아래와 같이 사용할 수 있다.
- SELECT students, COALESCE((12/NULLIF(students,0)):: char,'나눌 수 없음') AS share FROM division_by_zero;
3. 배열 연산자
: 배열 연산자에서 비교 연산자를 사용할 경우, 배열 내부의 모든 값들이 TRUE 값을 지녀야 TRUE 값이 출력된다.예를 들어 아래와 같은 쿼리문은 FALSE가 결과값으로 출력된다.
- SELECT ARRAY[5,3,3] > ARRAY[5,2,4] AS result;
: 배열연산자에서 포함관계, 겹침 유/무를 확인하는 연산자는 아래와 같다.
- <@ 또는 @> (포함관계): ARRAY[1,2,3] @> ARRAY[1,3]- 참
- &&(겹침 유/무): ARRAY[1,2,3,4] && ARRAY[1,5,6]- 참
: 배열끼리 병합하는 연산자로는 '||' 을 사용한다.
- 배열끼리 병합: 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}
cf> 2차원 배열 : ' '사이에 중괄호를 넣는 방법과 ARRAY[]를 활용해 생성한다.
- INSERT INTO td_array(name, schedule) VALUES ('9DAYS','{{1,2,3},{4,5,6},{7,8,9}}');
- INSERT INTO td_array(name, schedule) VALUES ('9DAYS',ARRAY[[1,2,3],[4,5,6],[7,8,9]]');
4. 배열 함수
: array_append() 함수: 배열에 원소를 추가시키는 함수
- array_append(<배열>,<원소>)
- SELECT array_append(ARRAY[1,2],3) AS result; -[1,2,3]
: array_prepend() 함수: 가장 최근에 추가한 원소가 가장 앞으로 위치하도록 추가시켜주는 함수
- array_prepend(<원소>,<배열>)
- SELECT array_prepend(1,ARRAY[2,3]) AS result; -[1,2,3]
: array_remove() 함수: 배열에 원소를 삭제시키는 함수
- array_remove(<배열>,<원소>)
- SELECT array_remove(ARRAY[1,2,3,4],4) AS result; -[1,2,3]
: array_replace() 함수: 배열 속 원소를 다른 원소로 바꾸는 함수
- array_replace(<배열>,<기존의 배열 속 원소>,< 바꿀 원소>)
- SELECT array_replace(ARRAY[1,4,3],4,2) AS result; - [1,2,3]
:array_cat() 함수: 배열과 배열을 합치는 함수
- array_cat(<배열1>,<배열2>);
- SELECT array_cat(ARRAY[1,2],ARRAY[3,4]) AS result; -[1,2,3,4]
5. JSON 연산자와 함수
: JSON에는JSON 데이터 타입과 JSONB 데이터 타입이 존재한다.
: JSON 오브젝트에 저장된 키 값으로 밸류 값을 가지고 오고 싶은 경우 아래와 같은 형식으로 쿼리를 작성한다.
- '{"키 값1":"밸류 값1","키 값2":"밸류 값2"}' -> "키 값1"
- SELECT '{"p":{"1":"postgres"},"s":{"1":"sql"}}' :: json -> 'p' AS result; - {"1":"postgres"}
: 인덱스 번호를 이용해 json 데이터 값 불러오기
- SELECT '[{"p": "postgres"},{"s":"sql"},{"m","mongoDB"}]'::json -> -3 AS result; -{"p": "postgres"}
: JSON 데이터를 모두 텍스트로 불러오기
- SELECT '{"p": {"1":"postgres"},"s":{"1":"sql"}}'::json ->> 'p' AS result; -{"1":"postgres"},( 텍스트 형태의 데이터)
: 다층의 JSON 오브젝트로부터 데이터 불러오기(#>>: 특정경로의 값을 텍스트 형태로 불러옴, #>: 특정경로의 값을 가져옴)
- SELECT '{"i":{"love":{"book":"postgresql"}}}' :: json #>> '{"i","love","postgresql"}' AS result; - postgresql(텍스트 형태의 데이터)
- SELECT '{"post":[{"gre":{"sql":"do it"}},{"t":"sql"}]}' :: json #> '{"post",0,"gre","sql"}' AS result; - "do it"
'도서 > 모두를 위한 postgreSQL' 카테고리의 다른 글
Day9. 쿼리에 사용되는 연산자와 함수3 (0) | 2023.06.27 |
---|---|
Day8. 쿼리에 사용되는 연산자와 함수2 (0) | 2023.06.27 |
DAY6. Alter Table (0) | 2023.06.22 |
DYA5. 데이터의 무결성 (1) | 2023.06.21 |
Day4. 데이터 타입 (0) | 2023.06.20 |