9. use SQL

2021. 5. 16. 19:09Computer Sciences/Database

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'
    1. 시, 분, 초를 나타냄
    1. 시, 분, 초에 밀리초까지 표현
    1. 국제표준시 기준 시간
      • 위 경우 우리나라와 일본의 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;

'Computer Sciences > Database' 카테고리의 다른 글

11. Set and Subquery  (0) 2021.05.16
10. Join  (0) 2021.05.16
7. Conversion to Relations  (0) 2021.05.02
6-4. Weak Entity Sets  (0) 2021.05.02
6-3. 제약조건  (0) 2021.05.02