Query 문법 세 번째 where 절 문자열 조건에 대해서 알려드리겠습니다.
예시 데이터는 2019년 미쉐린 가이드 서울에서 별점 1점~3점을 받은 레스토랑 26곳의 테이블입니다.
SELECT 컬럼명 [WHERE 조건식]
조건을 걸고 싶은 열의 데이터가 문자열 데이터일 경우 크게 4가지 문법으로 검색할 수 있습니다.
또한, 문자열 조건은 반드시 ”(작은따옴표)로 감싸줘야 합니다.
- = ‘○○’
- starts with ‘○○’
- ends with ‘○○’
- contains ‘○○’
1. 완벽히 동일한 데이터 검색에는 = ‘○○’
예시 데이터에서 문자열로 되어 있는 지역(C열) 데이터로 조건을 지정해보겠습니다.
지역(C열)이 ‘중구’인 레스토랑을 검색하고 싶은 경우,
select * where C = ‘중구’
여기서 주의하실 점은 = ‘○○’ 로 지정한 조건과 완벽하게 동일한 데이터만 결과값에 표시합니다.
select * where C = ‘강남’ 으로 입력하면 아무 결과값도 얻을 수 없습니다.
‘강남구’라는 지역은 있지만 ‘강남’이라는 지역은 없기 때문입니다.
2. 특정 문자열로 시작하는 데이터 검색 starts with ‘○○’
만약 ‘강남’처럼 특정 문자열로 시작하는 지역구를 검색하고 싶다면 starts with ‘○○’ 를 사용합니다.
지역(C열)이 ‘강남’으로 시작하는 레스토랑을 검색하고 싶은 경우,
select * where C starts with ‘강남’
3. 특정 문자열로 끝나는 데이터 검색 ends with ‘○○’
반대로 특정 문자열로 끝나는 데이터를 검색하고 싶다면 ends with ‘○○’ 를 사용합니다.
전화번호(D열)이 ‘4447’로 끝나는 레스토랑을 검색하고 싶은 경우,
select * where D ends with ‘4447’
여기에서 전화번호(D열)은 언뜻 숫자로만 이루어져있어서 숫자 데이터처럼 보입니디만, 중간에 ‘-‘ (붙임표)가 포함되어 있기때문에 숫자 데이터가 아니라 문자열 데이터가 됩니다.
4.위치에 관계없이 특정 문자열을 포함하는 데이터 검색 contains ‘○○’
마지막으로 위치 관계없이 특정 문자열이 포함하는 데이터를 검색하고 싶다면 contains ‘○○’ 를 사용합니다.
전화번호(D열)에 ’77’을 포함하는 레스토랑을 검색하고 싶은 경우,
select * where D contains ’77’
레스토랑 이름(A열)에 ‘한식’을 포함하는 레스토랑을 검색하고 싶은 경우,
select * where A contains ‘한식’
샘플 스프레드시트: [QUERY] 2019 미쉐린 가이드 서울 > where 문자열
올려주신 자료를 보고 쿼리문을 잘 이해할 수 있었습니다! 그런데 추가로 궁금한 것이 있어서 여쭤봅니다!
특정셀에서 값을 입력 받으면 작동하는 query문은 어떻게 해야할까요?
=QUERY(test, I16, -1)
이렇게 하고
I16 에서 select * where D = ‘김춘수’ 이렇게 하면
김춘수 값을 다 찾아낼 수 있는데 반대로
A1에다가 “김춘수”라고 적으면 쿼리문이 작동할 수 있도록 말이죠!
“select *where D=’A1′”
“select*where D”=’A1′
등등 여러가지로 시도를 해보다가 이렇게 문의를 드리게 되었습니다!!
좋아요좋아요
질문하신 내용은
구글 스프레드시트 사용법 (8) 데이터 필터링하기
https://smartagent.blog/2018/11/01/spreadsheet08/
에서 “Query함수로 필터링” 내용을 참고하시면 해결하실 수 있습니다.
좋아요좋아요
좋은 글 감사합니다.
where 문에서 컬럼 a 나 b 중 contain 되는 값이 있으면 select 해주는 경우는 어떻게 해야 할까요?
select C where A contains ‘값’ or B contains ‘값’ 식으로 만들고 싶은데,
or 위치가 잘못된건지 괄호를 쳐보고 해도 오류가 납니다 ㅜㅜ
구글 쿼리 문법에선 or나 and 예시는 아래와 같은 단순 조건연산자로만 되어있던데, 혹시 contains 연산자는 or 가 사용이 안되는건가요?
where (dept’Eng’ and isSenior=true) or (dept=’Sales’) or seniorityStartTime is null
좋아요좋아요
적어주신 where문은 문제가 없어보입니다. 두 조건중 하나만 맞아도 된다면 or를 사용하는 것이 맞습니다.
혹시 쿼리 구문 앞쪽에 범위가 잘못 지정되어 있지 않은지 확인하시기 바랍니다. A,B열에 조건을 걸고, C열의 값을 가져오는 select문이기때문에 범위에서 최소한 A:C를 지정해줘야 합니다.
좋아요좋아요
답변 감사합니다! 말씀하신대로 데이터값이 오류였습니다 ㅜㅜ
데이터 영역을 고정으로 지정하지 않아서 복붙했더니 다른 영역이 지정된게 문제였습니다…
다시 한번 친절한 답변과 글 감사드립니다.
좋아요좋아요