SQL 조건 중에는 특정 값과 일치하는 데이터를 찾고자 할 때 '=' 비교 연산자를 사용한다. 잠깐! 그전에 ANSI를 알아야 한다. ANSI SQL을 알고 이것을 정독하느냐, 마느냐의 차이는 크기 때문이다. ANSI는 ISO/IEC 9075:2016은 SQL 데이터베이스 쿼리 언어에 대한 ISO 및 ANSI 표준 8번째 개정판으로 2016년 12월 공식적으로 채택된 바 있다. PostgreSQL은 전체 179 항목 중 170 항목인 약 95%의 SQL 표준을 지원한다. (???: ?) 누군가는 ANSI는 구시대적 표기라고 하는데 전혀 그렇지 않다.
ANSI는 공톡적으로 사용할 수 있도록 고안한 표준 SQL문 작성 방법이다. 표준 SQL을 사용하는 이유는 거의 대부분의 DBMS에서도 동작 가능한 SQL이기 때문에 가능하면 ANSI SQL을 사용하는 것이 좋고, 각 DBMS의 특성을 활용하는 것 외에는 ANSI를 따르는 것이 좋다. 특히 JOIN 절에서 WHERE 절과 분리를 제대로 작성하면서 가독성을 높여 보다 질 좋은 쿼리를 작성할 수 있기 때문이다. (끝? OK.. SQL 느낌이지.. Driving 과 Driven 만 잘 구분하시오..)
비교 연산자 조건 중에 '=' 조건은 탐색하고자 하는 특정 값에 대해 조회하는 것을 말한다. SQL 자체는 대소문자를 구분하지 않으나 ='value' 안에는 대소문자를 구분한다.
-- '=' 조건 SQL.
SELECT
*
FROM employees
WHERE department_name='SKD-a1-DD3'
AND age = 27;
범위 조건을 지정하는 건 >,< 를 사용한다. 특정 값과 정확히 일치하는지 여부를 검증하는 것으로 특정 값의 데이터를 조회할 때 사용한다. 예를 들면 30,000을 초과하는 데이터와 3,000 이하인 데이터를 찾아 출력한다.
-- >,< SQL
SELECT
department_id = 'sd338'
,department_name = 'SKD-a1-DD3'
,salary
FROM employees
WHERE salary > 30000;
SELECT
department_id = 'sd338'
,department_name = 'SKD-a1-DD3'
,salary
FROM employees
WHERE salary < 3000;
SELECT
department_id = 'sd338'
,department_name = 'SKD-a1-DD3'
,salary
FROM employees
WHERE salary <> 3000;
SELECT
department_id = 'sd338'
,department_name = 'SKD-a1-DD3'
,salary
FROM employees
WHERE salary != 3000;
LIKE 조건 사용 예시를 보자. LIKE는 특정 문자를 포함한 데이터를 찾을 때는 LIKE 연산자를 사용하여 찾을 수 있다. LIKE 연산자를 씀으로 찾고자 하는 문자를 보다 빠르게 탐색할 수 있다. 그중에 찾을 문자열이 맨 처음 포함된 단어인가 맨 끝인가 단어와 단어 사이의 문자열인지를 참고한다.
-- LIKE SQL
SELECT
department_id
,department_name
,department_email
,salary
FROM department
WHERE department_name LIKE 'SKD%';
SELECT
department_id
,department_name
,department_email
,salary
FROM department
WHERE department_name LIKE '%DD3';
SELECT
department_id
,department_name
,department_email
,salary
FROM department
WHERE department_name LIKE 'S_D3%';
SELECT
department_id
,department_name
,department_email
,salary
FROM department
WHERE department_name LIKE 'S_%';
SELECT
department_id
,department_name
,department_email
,salary
FROM department
WHERE department_name LIKE '^_D3%' ESCAPE '^';
이와 비슷하게 BETWEEN 조건이 있다. "WHERE a BETWEEN 1 AND 10"은 a 칼럼의 값이 1에서 10 사이인 데이터를 찾는 뜻이다. 이는 >=1과 <=10 조건을 합친 것과 같다. 문자열 비교도 가능한데 이 범위 조회를 사용할 경우 ABC 순서 또는 ㄱㄴㄷ 순서로 정렬이 된다. A 문자열 앞을 기준으로 둔다. A > AB > B > BC > C 순서로 정렬이 된다.
-- BETWEEN SQL
SELECT
department_id
,department_name
FROM
department
WHERE salary BETWEEN 30000 AND 33000 ;
SELECT
department_id
,department_name
FROM
department
WHERE department_grade BETWEEN 'A' AND 'C' ;
IN 조건 사용에 있어 IN 조건의 가장 중요한 점은 조건에 있는 값 중에 하나라도 true (참) 이면 데이터를 반환한다. 보통 여러 값을 리스트로 제공하여 데이터를 추출하는데 이 부분을 잘 고려하고 사용하면 좋다.
-- IN SQL
SELECT
department_id
,department_name
FROM department
WHERE department IN ('Park','Kim','Kang') ;
PostgreSQL에서 NULL조건은 중요하다. 문자, 숫자, 날짜 등 자료형 데이터는 데이터베이스에서 NULL 값을 표시한다. NULL은 아직 정해지지 않는 값으로 PostgreSQL에서는 길이가 0인 문자열 ' '이 있는데, 출력 결과는 유사하지만 데이터의 성격이 다르므로 주의할 필요가 있다. 공백 (Empty)이 있다는 것은 값이 정해져 있지만 내용이 비어있는 것이다. RDBMS에서 조금 헷갈리는 부분이다. 누군가 조국의 미래를, 아니 누군가 공백과 NULL의 차이를 묻는다면 이렇게 답변하는 게 좋다. Empty에 반대로 NULL은 값도 내용도 없는 값으로 NULL이라 한다. 따라서 어떤 값과 사칙, 비교 연산을 하더라도 결과는 NULL이다. NULL 데이터를 조회할 때는 IS NULL과 IS NOT NULL을 사용하면 된다.
-- NULL SQL
SELECT
*
FROM department
WHERE department_name = NULL;
SELECT
*
FROM department
WHERE department_name != NULL;
SELECT
*
FROM department
WHERE department_name <> NULL;
-- NULL 데이터는 IS NULL과 IS NOT NULL 조건을 통해 조회한다.
-- = NULL 은 0 이다.
SELECT
*
FROM department
WHERE department_name IS NULL;
SELECT
*
FROM department
WHERE department_name IS NOT NULL;
NULL 조건 정의는 SQL에서 데이터를 추출하는 업무를 하다 보면 제법 실수하기 쉬운 부분이므로 잘 알아둘 필요가 있다.
'PostgreSQL' 카테고리의 다른 글
PostgreSQL 날짜 함수 (2) | 2024.10.01 |
---|---|
PostgreSQL 기본 문법 SQL 다루기 (4) | 2024.09.28 |