• SQL LIKE & ILIKE연산자

    2021. 5. 30.

    by. Jacob Lee

    728x90

     


     

    Like & ILIKE 연산자

    이전까지는 WHERE first_name = 'John'처럼 문자열에 대한 직접적인 비교 수행을 했었다.

    하지만 아래와 같이 문자열 안의 일반적인 패턴을 매칭 하고 싶다면 어떻게 해야 할까?

    • @gmail.com으로 끝나는 모든 이메일
    • A로 시작하는 모든 이름

     

    SQL의 LIKE 연산자와일드카드 문자를 사용함으로써 문자열 데이터의 패턴 매칭을 수행한다.

    여기서 한 가지 주의할 점은 LIKE는 대소문자를 구분하고, ILIKE는 대소문자를 구분하지 않는다는 점이다.

    두 개의 주요 와일드카드는 다음과 같다.

    • % (Percent)
      문자의 아무 순서나 매칭 한다.
    • _ (Underscore)
      아무 단일 문자를 매칭 한다.

     

    LIKE 연산자의 기본 문법은 다음과 같다.

    SELECT column_name,
    FROM table_name,
    WHERE column_name LIKE pattern;

     

    LIKE 연산자 예제

    LIKE 연산자에서 퍼센트와 밑줄을 사용하면 다음과 같이 많은 조합을 만들어 낼 수 있다.

     

    LIKE Operator Description
    WHERE CustomerName LIKE 'a%' a로 시작하는 모든 값을 찾는다.
    WHERE CustomerName LIKE '%a' a로 끝나는 모든 값을 찾는다.
    WHERE CustomerName LIKE '%or%' 아무 위치에 or을 포함하는 모든 값을 찾는다.
    WHERE CustomerName LIKE '_r%' 두 번째에 r이 위치하는 모든 값을 찾는다.
    WHERE CustomerName LIKE 'a_%' a로 시작하며 길이가 2자 이상인 모든 값을 찾는다.
    WHERE CustomerName LIKE 'a__%' a로 시작하며 길이가 3자 이상인 모든 값을 찾는다.
    WHERE ContactName LIKE 'a%o' a로 시작하고 o로 끝나는 모든 값을 찾는다.

     

    이 뿐만이 아니라 PostgreSQL 공식문서를 참고하면 더 많은 케이스를 확인할 수 있다.

     

    LIKE 연산자 사용하기

    Customer라는 테이블 안의 이름이 두 번째에 her로 시작하는 고객의 이름을 찾는다고 가정해보자.

    LIKE 연산자를 사용해 다음과 같이 요청할 수 있다.

    SELECT * FROM customer
    WHERE first_name LIKE '_her%';

    위 요청의 응답은 다음과 같을 것이다.

    • Cheryl
    • Theresa
    • Sherri

    밑줄을 사용함으로써 첫 글자는 건너 뛰고 퍼센트로 두 번째 문자부터 her로 시작하는 이름을 매칭할 수 있는 것이다.

     

    ILIKE를 사용하면 다음과 같이 대소문자 구분 없이 문자에 매칭하는 모든 데이터를 조회가 가능하다.

    LIKE와 ILIKE의 사용법을 비교해보자.

    <LIKE>
    SELECT * FROM customer
    WHERE first_name LIKE 'J%' AND last_name LIKE 'S%';
    
    <ILIKE>
    SELECT * FROM customer
    WHERE first_name ILIKE 'j%' AND last_name ILIKE 's%';

    위처럼 LIKE는 대소문자 구분을 하기 때문에 대문자를 찾고 싶다면 대문자를 써주어야 하지만 ILIKE는 구애받지 않는 것을 확인할 수 있다.

     

    728x90

    'Back-end > SQL' 카테고리의 다른 글

    SQL GROUP BY절  (0) 2021.05.31
    SQL Aggregate 함수 (AVG, COUNT, MAX, MIN, SUM)  (0) 2021.05.31
    SQL IN 연산자  (0) 2021.05.30
    SQL BETWEEN 연산자  (0) 2021.05.30
    SQL Limit절  (0) 2021.05.30

    댓글