본문 바로가기
DB/DB 문법

비교 연산자 및 기타

by oneny 2023. 5. 15.

연산자 우선 순위

  1. 괄호()
  2. NOT 연산자
  3. 비교 연산자, SQL 연산자
  4. AND
  5. OR

 

비교 연산자

  • 모든 자료형에 대해 적용 가능
  • NOT, AND, OR (우선순위: NOT > AND > OR)
  • 다음 SQL문 중 실행 결과가 나머지 두 가지와 다른 것은?
SELECT player_name, position, height FROM player
WHERE position <> 'GK' AND height > 180;

SELECT player_name, position, height FROM player
WEHRE NOT(position = 'GK') AND height > 180;

SELECT player_name, position, height FROM player
WHERE NOT(position = 'GK' AND height > 180); -- == NOT(position = 'GK') OR NOT(height > 180);

 

IN

특정 경우에는 여러 가능한 값을 확인해야 할 수도 있다.

IN 연산자를 사용하여 다중 옵션 목록에 값이 포함되어 있는지 확인하는 조건을 만들 수 있다.

value_1 IN (option1, option2, ..., option_n)

 

LIKE & ILIKE

  • LIKE 연산자를 사용하면 와일드카드 문자를 이용하여 문자열 데이터에 대한 패턴 매칭을 수행할 수 있다.
    • % : 임의의 문자열을 대체한다.
    • _ : 하나의 문자를 대체한다.
  • LIKE는 대소문자를 구분하므로 대소문자를 구분하지 않는 ILIKE를 사용할 수 있다.

 

LIKE 예시

A로 시작하는 모든 이름

WHERE name LIKE 'A%'

a로 끝나는 모든 이름

WHERE name LIKE '%a'

모든 시리즈의 미션 임파서블 영화 조회

WHERE name LIKE 'Mission Impossible _'

'Version#A4', 'Version#B7' 등의 형식으로 버전 문자열 코드 조회

WHERE name LIKE 'Version#__'

패턴 매칭 연산자를 결합하여 더 복잡한 패턴을 생성할 수 있다.

-- Cheryl, Theresa, Sherri
WHERE name LIKE '_her%'

PostgreSQL은 LIKE 및 ILIKE 외에 전체적인 정규표현식 기능을 지원한다.

 

ROW_NUMBER() OVER()

사용자가 아닌 시스템이 관리하는 Pseudo Column으로 출력 개수 지정 등에 활용 가능하다.

Oracle에서 사용하는 ROWNUM을 PostgreSQL에서 ROW_NUMBER() OVER() 함수로 대체해서 사용할 수 있다.

SELECT ROW_NUMBER() OVER() AS rownum, name FROM users;

 

USERS 테이블의 ROW 개수만큼 각 ROW에 순번을 매겨준다.

SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY NAME) AS rownum, name FROM users) T
WHERE rownum % 2 = 0;

행 순서를 나타내려면 ROW_NUMBER() OVER(ORDER BY column) 구분을 사용하면 되고, 서브쿼리를 통해 해당 값에 조건을 매길 수 있다.

위는 짝수 번째 행만 조회하는 쿼리이다.

'DB > DB 문법' 카테고리의 다른 글

JOINS와 집합 연산자  (0) 2023.05.16
서브쿼리(Sub Query)  (1) 2023.05.16
시간 데이터 유형  (0) 2023.05.16
GROUP BY와 집계 함수  (0) 2023.05.15
SELECT  (0) 2023.05.15