Back-end/DATABASE / / 2024. 7. 8. 20:58

[SQL] where 사용법 알아보기

반응형

SQL에서 데이터를 조회하는데 있어 가장 중요한 것 중 하나가 where이다. 이번 포스팅에서는 where 사용법에 대해서 알아보도록 하겠다.

 

이번 포스팅은 mysql에서 제공하는 샘플 데이터로 진행하도록 하겠다. 다운로드 주소는 아래 링크이다.

https://dev.mysql.com/doc/index-other.html

 

MySQL :: Other MySQL Documentation

Other MySQL Documentation This page provides additional documentation. There's even more available on these extra pages: MySQL Server Doxygen Documentation Title HTML Online MySQL Server (latest version) View Expert Guides Example Databases Title DB Downlo

dev.mysql.com

 

 

 

 

 where 

where 절은 검색하고 싶은 데이터의 범위를 지정하고 싶을때 사용하는 문법이다.

위에서 다운한 데이터 중 world.city를 보면 아래와 같다.

select * from world.city

위의 데이터는 도시의 이름, 국가코드, 관할구역, 인구가 나와있다. 나는 여기서 서울의 데이터만 필요할때 사용하는 것이 바로 where 이다.

 

 

1개를 검색할 때

where 절에서 한개의 키워드를 컬럼값으로 갖는 행을 찾는 방법은 간단하다. 바로 "내가 찾는 컬럼" = "내가 찾는 키워드"를 입력해주면 된다. 아래는 world.city에서 CountryCode(국가)가 KOR(한국)인 행을 찾는 방법이다.

select * from world.city where CountryCode ='KOR'

이렇게 where 절을 이용하면 내가 원하는 국가 코드(한국)만 선택적으로 데이터를 볼 수 있다.

 

 

2개를 검색할 때

그렇다면 2개 이상의 키워드를 찾고 싶을 때는 어떻게 해야할까?

 

 A and B 를 찾을 때(and)

위의 데이터를 예로 들어 "국가" = "한국" 이면서 "관할구역"="경기"인 항목을 찾으려하면 and를 이용하면 된다.

select * from world.city where CountryCode ='KOR' and District ='Kyonggi'

 

 A or B 를 찾을 때(or, in)

만약 국가가 "한국"이거나 "미국"인 행을 찾으려면 어떻게 해야할까? 바로 or을 이용하면 된다.

select * from world.city where CountryCode ='KOR' or CountryCode ='USA'

 

이때 and 대신에 in이라는 연산자를 사용해도 된다.

select * from world.city where CountryCode in ('KOR','USA')

결과를 출력해보면 위와 동일한 결과가 출력됨을 확인 할 수 있다.

 

 

 

like

그렇다면 내가 찾아야할 키워드가 일부만 생각나면 어떻게 해야할까? 이때까지 사용한 "="은 전부가 일치해야만 하지만 like를 이용하면 일부 글자로도 탐색이 가능하다. 단, 리소스는 커지므로 단어를 명확히 알고 있다면 권하지는 않는다.

select * from world.city where CountryCode like 'KO%'

 

KO만 입력을 했지만 KOR을 찾은 모습을 확인할 수 있다. 여기서 자세히 보면 "KO" 다음에 "%"가 붙는데 %는 "KO" 다음에 다른 글자가 올 수도 있는 단어를 찾아 달라는 의미이다.

  • "KO%" : KO로 시작하는 값을 찾아줘
  • "%KO" : KO로 끝나는 단어를 찾아줘
  • "%KO%" : 중간에 KO가 있는 단어를 찾아줘
  • "KO" : %가 없을 경우 = "KO"만 찾을 수 있다.

 

 

between

between은 둘 사이의 범위를 검색할 때 사용하며 주로 날짜나 숫자를 기준으로 검색할 때 사용한다. 물론 문자열을 넣어도 아스키코드로 변환되어 범위 검색을 진행할 수는 있지만 일반적이지는 않다.

 

여기서는 인구가 100~200인 경우를 검색하기 위해 between을 이용해 보겠다.

select * from world.city where Population between 1000000 and 2000000

 

 

복합 문제

위에서는 where 절의 사용에 대해서 배워보았다. 하지만 실생활에서의 where은 위의 예시보다 조금 복잡하게 사용되는게 일반적이다. 그럴경우 where을 어떻게 활용해서 검색 하는지 연습해보도록 하겠다. 

 

문제 : 국가가 (KOR, JPN, USA) 중 하나면서 인구가 50만~80만명 사이에 있고 ID가 3820 이상인 도시의 이름을 찾으시오. 

 

 

정답 :

select Name from world.city where CountryCode in ('KOR', 'JPN', 'USA') and Population between 500000 and 800000 and ID >= 3820

 

물론 그렇게 어려운 문제는 아닐 수 있다. 하지만 나중에 집계함수나 윈도우 함수, join의 개념이 추가된 상황에서 where은 아주 중요하면서도 강력한 역할을 하는 것임에는 틀림없다.

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유