1-2. Rows 필터링

타키탸키·2020년 12월 14일
0

LEARN SQL

목록 보기
2/3

저번 시간에는 데이터베이스의 구조와 테이블에서 필요한 필드를 선택하는 간단한 SQL에 대해 배워봤습니다.

이번 시간에는 테이블에서 조건을 만족하는 행을 필터링하는 방법에 대해 알아보겠습니다 😊😊😊

🌸 WHERE

WHERE 명령문은 조건을 지정할 때 사용합니다. WHERE는 수와 문자 데이터에 활용할 수 있습니다.

저번 시간에 활용했던 테이블을 다시 한 번 활용해 봅시다

만약 이 테이블에서 2016년에 발매된 게임만을 추출하고 싶다면 어떤 쿼리문이 필요할까요? 정답은 다음과 같습니다.

SELECT *
FROM games
WHERE release_year = 2016

이 쿼리문은 발매년도가 2016년인 행을 추출합니다. 따라서 다음과 같은 결과가 추출됩니다.

2010년도 이후에 나온 게임들을 함께 추출할 수 있을까요? 가능합니다!

SELECT COUNT(*)
FROM games
WHERE release_year > 2000

이처럼 WHERE문에는 등호와 부등호 모두 사용이 가능합니다 ✌✌✌

그렇다면 이번에는 문자 데이터 타입을 추출해 봅시다. 주어진 테이블에서 한국어를 지원하는 게임들만 추출해 보고자 할 때, 쿼리문을 어떻게 작성해야 할까요? 정답은 다음과 같습니다.

SELECT *
FROM games
WHERE language = 'Korean'

이처럼 문자 데이터의 경우 작은 따옴표로 데이터를 감싸줘야 합니다. 이 때, 대소문자를 구분하므로 정확히 입력해주는 것이 중요합니다. 🧐🧐🧐 결과를 한 번 볼까요?

🌸 WHERE... AND

때로는 여러 개의 조건이 필요한 경우가 있습니다. WHERE 명령문은 AND/OR와 함께 사용이 가능합니다. AND/OR를 활용해 봅시다!

우선, 한국어를 지원하는 게임 중 2010년 이후에 출시한 게임을 추출해봅시다.

SELECT title, release_year
FROM games
WHERE language = 'Korean'
  AND release_year > 2010

결과는 다음과 같습니다.

마찬가지로 OR를 활용한 사례를 봅시다. 출시년도가 2011년이거나 2016년인 데이터를 추출하려면 다음과 같은 쿼리문이 필요합니다.

SELECT title, release_year
FROM games
WHERE release_year = 2011
   OR release_year = 2016

결과를 볼까요?

주의할 것은 같은 필드명을 사용한다고 해서 하나의 필드에 두 가지 조건을 넣으면 안 된다는 점입니다. 두 가지 조건이 필요한 경우 각각의 필드를 제시해야 합니다.

SELECT title, release_year
FROM games
WHERE release_year = 2011 OR 2016 (이렇게 하면 아니되오❌❌❌)

AND와 OR를 함께 사용할 수도 있습니다! 이때, 괄호에 따라 결과가 달라질 수 있으므로 유의해야 합니다.

SELECT title
FROM games
WHERE (release_year = 2011 OR release_year = 2016)
  AND (language = 'Korean' OR language = 'English') 

해당 쿼리는 출시년도가 2011이거나 2016이면서 동시에 언어가 한국어거나 영어인 게임의 타이틀을 추출합니다. 따라서, 결과는 다음과 같습니다.

🌸 BETWEEN

2000년에서 2010년에 출시한 게임을 추출하고자 하면 어떤 쿼리를 작성해야 할까요? 앞서 배운 바에 따르면, 이런 쿼리가 필요할 것입니다.

SELECT title
FROM games
WHERE release_year >= 2000
  AND release_year <= 2010

여러분은 이와 같은 쿼리를 흔하게 접하게 될 것입니다. 하지만 매번 같은 필드명을 중복해서 사용하는 것이 불편하지 않으신가요? SQL은 이러한 불편을 해소하기 위해 범위를 지정할 때 사용되는 BETWWEN이라는 명령문을 제공합니다.

SELECT title
FROM games
WHERE release_year
BETWEEN 2000 AND 2010

두 쿼리문 모두 같은 결과를 추출합니다. 중요한 것은 BETWEEN은 조건의 시작점과 끝점을 모두 포함한다는 점입니다. 따라서 2000년과 2010년을 모두 포함한 기간의 결과를 추출합니다.

BETWEEN은 앞서 제시한 AND, OR의 조건과 함께 사용할 수 있습니다.

🌸 WHERE... IN

때로는 여러 개의 조건이 동시에 필요할 때가 있습니다. 예를 들어, 출시년도가 2003년도거나 2011년도, 2017년도인 게임을 추출하고 싶다면 어떻게 해야 할까요? 물론 일일히 OR 조건을 달아 쿼리를 만들 수도 있습니다. 하지만, 항상 코드는 심플해야 합니다. 이럴 때, 사용할 수 있는 구문이 바로 WHERE... IN입니다.

SELECT title, release_year
FROM games
WHERE release_year IN (2003, 2011, 2017)

문자열을 입력할 경우, 작은 따옴표를 꼭 넣어야 합니다. 예를 들어, 언어 조건을 넣고 싶다면 IN('Korean', 'English')으로 작성해주세요.

🌸 NULL / IS NULL / IS NOT NULL

SQL에서 NULL은 빠졌거나 알 수 없는 값을 의미합니다. 쿼리에서 NULL을 찾을 때, IS NULL 구문을 사용합니다. 예컨대, 앞서 제시한 표에서 새로운 게임 CyberPunk가 추가되었다고 가정해봅시다.

위와 같이, CyberPunk의 contry는 NULL로 표기되어 있습니다. IS NULL 구문을 통해 이 데이터를 찾아봅시다.

SELECT title, language
FROM games
WHERE country IS NULL

그럼 다음과 같은 결과가 나옵니다.

그러나 실제 업무에서는 NULL값을 찾을 때보다 NULL값을 제외한 데이터들을 추출하는 경우가 더 많습니다. NULL값이 없는 데이터만을 뽑고 싶다면 IS NOT NULL구문을 사용하면 됩니다.

SELECT title, language
FROM games
WHERE country IS NOT NULL

🌸 LIKE / NOT LIKE

지금까지 WHERE 구문을 사용하여 조건을 추출할 때, 정확한 값만을 입력했습니다. 하지만 실제 업무에서는 이러한 명확한 조건만을 가지고 데이터를 추출하기보다는 모호한 조건을 활용하여 필요한 데이터를 뽑는 경우가 종종있습니다. 예컨대, OVERWATCH라는 온전한 타이틀이 아닌 WATCH만을 기억하고 있는 상태에서 데이터를 뽑아야 하거나 혹은 WATCH라는 이름을 가진 다른 게임들도 함께 추출하고 싶다면 LIKE 구문이 필요합니다.

SELECT id, title
FROM games
WHERE title LIKE '%watch'

LIKE는 두 가지 와일드 카드(%, _)와 함께 사용됩니다. '%'는 0에서부터 온전한 단어에 이르기까지 '%' 전후의 단어와 일치한 모든 단어를 추출합니다. 앞서 제시한 '%watch'의 경우 'Goldwatch', 'Zwatch', '21watch' 등 watch로 끝나는 모든 단어를 추출해 줍니다.

'_'는 단일한 문자가 일치한 결과만을 추출합니다. 예를 들어 'Overw_tch'라는 조건을 붙였다면 'Overwotch' 혹은 'Overwitch', 'Overwytch' 등의 단어들이 추출됩니다. 단, 이러한 단어들이 테이블에 있을 때만 가능하다는 것을 잊지 마세요!


지금까지 테이블에서 원하는 행을 필터링하는 여러 가지 구문들을 배웠습니다. 데이터 추출은 SQL의 기본입니다. 이러한 구문들의 사용에 익숙해지면 더 효율적인 데이터 추출이 가능해집니다. 반복 연습을 통해 여러 번 구문을 활용해보시고 익혀보시길 바랍니다.

profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글