SQL 스터디 - LIKE(검색, 패턴매칭)

이재문·2022년 2월 21일
0
post-thumbnail

8강 - 패턴매칭에 의한 검색

참조 : MySQL :: MySQL 8.0 Reference Manual :: 3.3.4.7 Pattern Matching

LIKE 패턴 매칭

  • = 는 완전 일치하는 데이터 값을 비교
  • 문자나 문자열을 포함하는지 검색 할 때 사용
  • 패턴매칭, 부분 검색
  • 메타문자(%_)로 검색

LIKE로 포함된 데이터 검색

  • % 를 이용한 임의의 문자열 패턴 정의
  • _를 이용한 임의의 문자 하나 패턴 정의
    mysql> select * from test1(테이블명) where text(컬럼명) like **'_____'**
    mysql> select * from test1(테이블명) where text(컬럼명) like **'keyword'**
    mysql> select * from test1(테이블명) where text(컬럼명) like **'%keyword'**
    mysql> select * from test1(테이블명) where text(컬럼명) like **'keyword%'**
    mysql> select * from test1(테이블명) where text(컬럼명) like **'%keyword%'**

  • %,_를 함께 이용한 임의의 문자열 패턴 정의
    mysql> select * from test1(테이블명) where text(컬럼명) like **'_keyword%'**
  • ‘’, %, _ 의 이스케이프 (SQL문 전체 적용)
  • 문자열은 ‘’(따옴표)안에 작성 - 기본적인 SQL문법
  • 문자열 내에 (따옴표)하나가 들어가야 할 경우 ‘’이나 \’로 작성 (정상 작동)
  • 문자열 내에 %_가 들어가야 할 경우 \%\_로 작성
    → 근데 \없이 작성해도 작동함

💡 --partial--revokes[={OFF|ON}]
OFF 이스케이프를 사용하지 않을 경우
ON 이스케이프를 사용해야 할 경우
Mysql Server System Variables : https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_partial_revokes

  • 예시
mysql> ··· like '나는 ''SQL_첫걸음''를 100% 이해한다..'

REGEXP_LIKE (정규식 일치)

  • 문자열을 비교하는 LIKE와 정규식을 합쳐, 정규식을 비교하여 출력하는 함수
  • 정규식 패턴 활용한 검색 코드
mysql> select * from test1(테이블명) where regexp_like(**컬럼명**,'정규식');
  • 대소문자 구분없이 결과를 보려면 (컬럼명, '조건', 'i'); 로 작성
  • (컬럼명, '조건'|'조건'); 으로 여러 조건으로 검색 가능

사용 예시

  • 테이블 내 데이터
mysql> select * from test1;
        +----+----------------------------------------------+
        | id | text                                         |
        +----+----------------------------------------------+
        |  1 | 서울시 강남구                                   |
        |  2 | 대전시 유성구                                   |
        |  3 | 서울시 강동구                                   |
        |  4 | 미국 서울시                                    |
        |  5 | 서울시 강서구                                   |
        |  6 | 부산시 연제구                                   |
        |  7 | 대한민국 서울시                                  |
        |  8 | 부산시 강서구                                   |
        |  9 | 서울시 강서구                                   |
        | 10 | 대한민국 서울시 강남구 언주로                       |
        | 11 | 시청                                          |
        | 12 | 나는 'SQL 첫걸음'100% 이해한다.                |
        | 13 | 1 '2' 3                                      |
        +----+----------------------------------------------+
        13 rows in set (0.00 sec)
        
  • 결과
    
    mysql> select * from test1(테이블명) where regexp_like(text,'구$');
    
    +----+------------------+
    | id | text             |
    +----+------------------+
    |  1 | 서울시 강남구       |
    |  2 | 대전시 유성구       |
    |  3 | 서울시 강동구       |
    |  5 | 서울시 강서구       |
    |  6 | 부산시 연제구       |
    |  8 | 부산시 강서구       |
    |  9 | 서울시 강서구       |
    +----+------------------+
    7 rows in set (0.00 sec)
    
    -------------------------------------------------------------------
    mysql> select * from test1 where regexp_like(text,'^강');
    
    +----+---------------------+
    | id | text                |
    +----+---------------------+
    |  1 | 서울시 강남구          |
    |  3 | 서울시 강동구          |
    |  5 | 서울시 강서구          |
    |  9 | 서울시 강서구          |
    +----+---------------------+
    4 rows in set (0.00 sec)
    
    -------------------------------------------------------------------
    mysql> select * from test1 where regexp_like(text,'강서|대전');
    +----+---------------------+
    | id | text                |
    +----+---------------------+
    |  2 | 대전시 유성구          |
    |  5 | 서울시 강서구          |
    |  8 | 부산시 강서구          |
    |  9 | 서울시 강서구          |
    +----+---------------------+
    4 rows in set (0.00 sec)
profile
이제부터 백엔드 개발자

0개의 댓글