연산자 우선 순위
- 괄호()
- NOT 연산자
- 비교 연산자, SQL 연산자
- AND
- 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 |