10강 SQL이 뭐지? PostgreSQL : BETWEEN operator
PostgreSQL
SQL이 뭐지? 10강 시작합니다.
이번 강의에서는
▶ BETWEEN operator
에 대해서 알아보겠습니다.
BETWEEN operator
BETWEEN 연산자를 사용하여 설정된 범위에 값을 일치시킬 수 있습니다.
다음은 BETWEEN 연산자의 구문을 보여줍니다.
value BETWEEN low AND high;
값이 low 값보다 크거나 같고 high 값보다 작거나 같으면 식이 true를 반환하고, 그렇지 않으면 false를 반환합니다.
다음과 같이 보다 크거나 같거나(>=) 또는 보다 작거나 같은(<=) 연산자를 사용하여 BETWERT 연산자를 다시 쓸 수 있습니다.
value >= low and value <= high
값이 범위를 벗어났는지 확인하려면 다음과 같이 NOT 연산자와 BETWEEN 연산자를 결합합니다.
value NOT BETWEEN low AND high;
다음 식을 사용하면 NOT 및 BETWEEN 연산자를 사용하는 식을 사용할 수 있습니다.
value < low OR value > high
SELECT, INSERT, UPDATE 또는 DELETE 문의 WHERE 절에 BETWEEN 연산자를 자주 사용합니다.
실습 1
다음 쿼리는 BETWEEN 연산자를 사용하여 금액이 8달러에서 9달러 사이인 지급을 선택합니다.
SELECT
customer_id
, payment_id
, amount
FROM payment
WHERE amount BETWEEN 8 AND 9
;
결과를 보여줄 때 마지막 부분을 보여주고 있습니다. SQL 수행하시고 확인해 보시기 바랍니다.
439건이 추출되었습니다.
실습 2
금액이 8과 9의 범위에 없는 지급을 받으려면 다음 쿼리를 사용합니다. 실습 1의 조건과 반대입니다.
SELECT
customer_id
, payment_id
, amount
FROM payment
WHERE amount NOT BETWEEN 8 AND 9
;
14157건입니다.
실제 프로젝트에서 대용량 쿼리를 테스트로 수행할 때는 8강에서 공부한
LIMIT row_count
FETCH FIRST [ row_count ] ONLY
구문을 사용해 보세요.
성능이 안 나오는 대용량 쿼리를 수행했다가 문제가 되는 경우를 종종 봅니다.
실습 3
날짜 범위 값을 확인하려면 ISO 8601 형식의 리터럴 날짜(예: YYY-MM-DD)를 사용해야 합니다. 예를 들어, 지불 날짜가 2007-02-07과 2007-02-15 사이인 지불을 받으려면 다음 쿼리를 사용합니다.
SELECT
customer_id
, payment_id
, amount
, payment_date
FROM payment
WHERE payment_date BETWEEN '2007-02-07' AND '2007-02-15'
;
27건이 나왔습니다. 그런데 2007-02-15 일자 데이터는 1건도 없습니다.
뭔가 이상합니다.
이상한 걸 발견하셨나요?
※※※ 중요 ※※※
payment_date가 date형이라면 위의 쿼리가 맞습니다.
그러나 payment_date는 timestamp형입니다.
where 조건문이 오류입니다. PostgreSQL Tutorial 오류를 발견했네요.
WHERE payment_date BETWEEN '2007-02-07' AND '2007-02-15'는 오류입니다.
조건을 만족하는 다음의 방법이 있습니다.
1) WHERE payment_date BETWEEN '2007-02-07 00:00:00.000000' AND '2007-02-15 23:59:59.999999'
2) WHERE to_char(payment_date, 'YYYY-MM-DD') BETWEEN '2007-02-07' AND '2007-02-15'
3) WHERE date(payment_date) BETWEEN '2007-02-07' AND '2007-02-15'
1번은 timestamp형에 맞게 일자를 set 하였습니다.
2번은 to_char 함수를 사용해서 char로 변경하였습니다.
3번은 timestamp형을 date형으로 변환했습니다.
여기서 2번, 3번 방법은 결과는 나오지만 추천하지 않습니다.
WHERE절에서 테이블의 컬럼에 함수를 사용하는 것은 금기시됩니다.
조건 상수에 함수를 사용하는 것은 가능합니다.
왜냐하면, 조건 상수는 한 번만 변환되지만 칼럼은 행을 가져올 때마다 변환합니다.
쿼리의 성능이 떨어집니다.
위의 쿼리는 초보들이 흔히 하는 실수입니다.
여러분들은 실수하지 않기를 바랍니다.
지금까지 범위에 있는 값을 선택하는 SQL BETWEEN 연산자를 알아 보았습니다.
다음 강의에서 뵙겠습니다.
본 강의는 PostgreSQL Tutorial을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 여러분의 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
12강 SQL이 뭐지? PostgreSQL : NULL and IS NULL operator (2) | 2022.12.16 |
---|---|
11강 SQL이 뭐지? PostgreSQL : LIKE, ILIKE operator (2) | 2022.12.16 |
9강 SQL이 뭐지? PostgreSQL : IN에 대해서 (2) | 2022.12.15 |
8강 SQL이 뭐지? PostgreSQL LIMIT와 FETCH (3) | 2022.12.14 |
7강 SQL이 뭐지? WHERE 절 (3) | 2022.12.13 |
댓글