Basic SQL
- 'Movie' 테이블에서 studioName이 'Disney'이고 year가 1990인 데이터를 구하라
select * from Movie where studioName='Disney' and year=1990;
- 'Movie' 테이블에서 studioName이 'Disney'이고 year가 1990인 행의 title과 length를 구하라
select title, length from Movie where studioName='Disney' and year=1990;
Comparison of String
- 문자열 비교는 <, <=, >, >=, !=, = 로 할 수 있음
- 비교는 사전순으로 진행됨
Pattern match
- %, _, \(backslash)로 할 수 있음
- % : 0개 또는 1개 이상의 문자
- _ : 1개의 문자
- \ : 이스케이프 문자로, 특수문자 사용 시 이용함
// 'Star ' 이후 문자가 있거나 없는 title과 매칭됨
select title from movie where title like 'Star %';
// 'Star ' 이후 4개의 문자가 있는 title과 매칭됨
select title from movie where title like 'Star ____';
// title에서 'of'를 중간에 포함한 title과 매칭됨
select title from movie where title like '%of%';
// 'Big_Fish'와 매칭됨
// x를 이스케이프 문자로 대체함. x 뿐 아니라 모든 문자도 대체 가능
select title from movie where title like 'Bigx_Fish' ESCAPE 'x';
PostgreSQL Regular Expression
패턴 매치는 모든 문자열이 매칭되어야만 원하는 데이터를 얻을 수 있음
정규표현식은 일부분만 매칭되더라도 데이터를 얻을 수 있음
일반적으로 POSIX-style로 많은 DB가 지원함
사용법
- ~, ~*, !~, !~*로 사용 가능
- ~ : 대소문자 구분 패턴
- ~* : 대소문자 미구분 패턴
- !~ : 매치가 되지 않으면 true인 대소문자 구분 패턴
- !~* : 매치가 되지 않으면 true인 대소문자 미구분 패턴
- 정리
- .(dot) : 문자 한 개를 의미
- ?, *, + : 앞에 있는 문자에 대해 매칭
- : 앞에 있는 문자가 최소 m번, 최대 n번 반복되는 패턴과 매칭
- : 앞에 있는 문자가 m번 반복되는 패턴과 매칭
- ^, & : 줄의 시작과 끝의 패턴과 매칭
- () : 그룹핑
- | : or 연산과 같은 패턴
- [list] : 괄호 내의 문자들과 매칭
- [^list] : 괄호 내의 문자들과 포함되지 않는 문자들과 매칭
- \n : 앞서 나온 연산을 재사용하는 고급 사용법. 앞서 사용했던 패턴을 1부터 순서대로 사용 가능함
Dates and Times
- date: DATE '1948-05-14'
- time: TIME '15:00:02', TIME '15:00:02.12345', TIME '12:00:00+09:00'
- 시, 분, 초를 나타냄
- 시, 분, 초에 밀리초까지 표현
- 국제표준시 기준 시간
- 위 경우 우리나라와 일본의 12시를 나타냄
- 즉, 영국에선 오전 3시가 됨
- timestamp: TIMESTAMP '1948-05-14 12:00:00'
- 날짜와 시간까지 모두 포함한 표현 방법
- 운영체제별로, 국가별로 다를 수 있음
- 날짜와 시간의 비교는 과거가 더 작음
// true DATE '1998-10-03' < DATE '2000-02-30'
Null
- NULL과 산술 연산을 하면 NULL이 반환됨
- NULL과 비교 연산을 하면 UNKNOWN이 반환됨
- NULL은 직접적으로 사용할 수 없음(테이블, 속성 이름 등에)
- NULL을 체크하려면 'IS NULL, IS NOT NULL'로 확인해야 함
- 'is not distinct from'으로 자세하게 비교해볼 수도 있음
// true
select 10 is null;
// null
select null = null;
// true
select null is null;
// true
select 10 is not distinct from 10;
// false
select 10 is not distinct from null;
// true
select null is not distinct from null;
// length가 null인 튜플을 제외한 모든 튜플을 가져오는 질의
select * from movie where length <= 120 or length > 120;
// null을 포함한 모든 튜플을 가져오는 질의
select * from movie;
Order
- ORDER BY <속성> 을 통해 속성 기준으로 정렬 가능
- ASC, DESC를 통해 오름차순, 내림차순으로 정렬 가능
- 속성을 여러 개 지정 시
- 먼저 나온 속성 기준으로 우선정렬
- 속성값이 같아 정렬이 되지 않은 경우 다음 속성 기준으로 정렬
// title 기준 내림차순으로 정렬한 genre가 drama인 튜플을 가져오는 질의
select * from movie where genre='drama' order by title desc;
Uploaded by Notion2Tistory v1.1.0