SQL(2)(like, in, between, is null, and, or, not)

 LIKE

Like는 논리 연산자로 정확한 값이 아닌 유사한 값을 일치시킬 수 있다.

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE "group" LIKE 'Snoop%'
cs

위와 같이 실행하면 'group'에 'Snoop'로 시작하고 그 뒤에 임의의 수와 문자가 오는 행이 나타난다.







1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE "group" ILIKE 'snoop%'
cs

대소문자를 구분하고 싶지 않다면 위와 같이 ilike를 사용하면 된다.

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE artist ILIKE 'dr_ke'
cs

위와 같이 _를 사용하여 개별문자를 대체 할 수도 있다. 







연습문제

Ludacris가 그룹의 구성원인 모든 행을 반환하는 쿼리

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE "group" ilike '%ludacris%'
cs







그룹에 나열된 첫 번째 아티스트의 이름이 "DJ"로 시작하는 모든 행을 반환하는 쿼리

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE "group" LIKE 'DJ%'
cs







IN

In은 결과에 포함 할 값 목록을 지정한 수 있는 논리 연산자이다. 목록의 값 중 하나와 동일한 결과를 반환한다.

숫자

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank IN (123)
cs










문자

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE artist IN ('Taylor Swift''Usher''Ludacris')
cs







연습문제

Elvis 및 MC Hammer에 대한 모든 항목을 표시하는 쿼리

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE artist IN ('M.C. Hammer''Hammer''Elvis Presley')
cs







BETWEEN

특정 범위 내에있는 행만 선택할 수 있는 논리 연산자이다. and연산자와 짝을 이루어야 한다.

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank BETWEEN 5 AND 10
cs

위와 같이 작성하면 'year_rank'열이 5에서 10사이의 값을 가진 행만 추출된다.







1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank >= 5 AND year_rank <= 10
cs

위와 같이 작성할 수도있다.

연습문제

1985년 1월 1일부터 1990년 12월 31일까지의 모든 상위 100곡을 표시하는 쿼리

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year BETWEEN 1985 AND 1990
cs







IS NULL

Is Null은 결과에서 누락 된 데이터가 있는 행을 선택할 수 있는 논리 연산자이다.

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE artist IS NULL
cs







연습문제

song_name이 null인 모든 행을 표시하는 쿼리

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE song_name IS NULL
cs







AND

And는 두 조건을 만족하는 행만 선택할 수 있는 논리 연산자이다.

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2012 AND year_rank <= 10
cs

위 코드는 2012년 상위 10개에 대한 모든 행을 반환한다.







and연산자를 추가 and문이나 다른 비교 연산자와 함께 원하는 만큼 사용할 수 있다.

1
2
3
4
5
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2012
   AND year_rank <= 10
   AND "group" ILIKE '%feat%'
cs

위 코드는 그 위의 코드에 'group'열이 feat가 포함된 모든 행을 반환한다.







연습문제

Ludacris가 그룹의 일부인 상위 10개에 대한 모든 행을 표시하는 쿼리

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank <= 10
   AND "group" ILIKE '%ludacris%'
cs







1990년, 2000년 및 2010년에 최상위 기록을 표시하는 쿼리

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank = 1
   AND year in (199020002010)
cs







제목에 'love'가 포함 된 1960년대의 모든 노래를 나열하는 쿼리

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year BETWEEN 1960 AND 1969
   AND song_name ilike '%love%'
cs







OR

or은 두 조건 중 하나를 만족하는 행을 선택할 수 있는 논리 연산자이다. and와 동일한 방식으로 작동한다.

1
2
3
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank = 5 OR artist = 'Gotye'
cs

위 코드는 'year_rank'가 5거나 'artist'가 Gotye인 모든 행을 반환한다.







괄호 and를 or로 사용하여 결합 할 수 있다.

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND ("group" ILIKE '%macklemore%' OR "group" ILIKE '%timberlake%')
cs

위 코드는 연도가 2013년이면서 'group'에 'macklemore'가 포함되거나 'timberlake'가 포함되는 모든 행을 반환한다.







연습문제

Katy Perry 또는 Bon Jovi가 등장하는 상위 10곡의 모든 행을 반환하는 쿼리

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank <= 10
   AND ("group" ILIKE '%katy perry%' OR "group" ILIKE '%bon jovi%')
cs







1970년대 또는 1990년대에 'California'라는 단어가 포함 된 제목의 모든 노래를 반환하는 쿼리

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE song_name LIKE '%California%'
   AND (year BETWEEN 1970 AND 1979 OR year BETWEEN 1990 AND 1999)
cs






2001년 이전 또는 2009년 이후에 Dr.Dre가 등장하는 모든 상위 100개 기록을 나열하는 쿼리

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE "group" ILIKE '%dr. dre%'
   AND (year <= 2000 OR year >= 2010)
cs







NOT

not은 조건문 앞에 해당 명령문이 거짓인 행을 선택할 수 있는 논리 연산자이다.

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND year_rank NOT BETWEEN 2 AND 3
cs

위 코드는 연도가 2013년이고, 'year_rank'가 2,3이 아닌 모든 행을 반환한다.







1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND "group" NOT ILIKE '%macklemore%'
cs

위 코드는 연도가 2013이고, 'group에 'macklemore'가 포함되지 않는 모든 행을 반환한다.







not으로 null이 아닌 행을 식별하는데 자주 사용되지만 구문이 다소 특별하므로 is를 포함해야 한다.

1
2
3
4
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND artist IS NOT NULL
cs

위 코드는 연도가 2013년이고 artist가 null이 아닌 모든 행을 반환한다.







연습문제

2013년 차트에 포함되었고 문자 "a"를 포함하지 않는 노래의 모든 행을 반환하는 쿼리

1
2
3
4
5
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE song_name NOT ILIKE '%a%'
   AND year = 2013









댓글

이 블로그의 인기 게시물

SQL(9)(performance tuning queries, pivoting data)

데이터 크롤링(3주차)

SQL(8)(writing subqueries, window functions)