들어가기에 앞서
본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다.
이번 게시물에서는 대표 문자를 이용하여 지정된 속성의 값이 패턴과 일치하는 데이터를 검색하는 'LIKE'에 대해서 알아보겠습니다.
LIKE - 지정된 속성의 값이 대표 문자의 패턴과 일치하는 데이터를 검색
# student 테이블의 전체 속성에 대해서 sex 값이 'F'로 시작하는 데이터를 모두 검색
mysql> SELECT * FROM student WHERE sex LIKE 'F%';
+--------+---------+-------------+--------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+---------------+
| 101 | Hong | biology | Female | 1990-02-24 | 010-1234-5323 |
| 104 | Mong | engineering | Female | 1993-02-24 | 010-9462-8814 |
+--------+---------+-------------+--------+------------+---------------+
2 rows in set (0.00 sec)
# student 테이블의 전체 속성에 대해서 major 값이 'ics'로 끝나는 데이터를 모두 검색
mysql> SELECT * FROM student WHERE major LIKE'%ics';
+--------+---------+-----------+------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-----------+------+------------+---------------+
| 102 | Song | physics | Male | 1996-02-24 | 010-3322-8813 |
| 103 | Dong | economics | Male | 1995-02-24 | 010-5667-9315 |
+--------+---------+-----------+------+------------+---------------+
2 rows in set (0.00 sec)
# student 테이블의 전체 속성에 대해서 sex 값의 중간에 'al'이 존재하는 데이터를 모두 검색
mysql> SELECT * FROM student WHERE sex LIKE '%al%';
+--------+---------+-------------+--------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+---------------+
| 101 | Hong | biology | Female | 1990-02-24 | 010-1234-5323 |
| 102 | Song | physics | Male | 1996-02-24 | 010-3322-8813 |
| 103 | Dong | economics | Male | 1995-02-24 | 010-5667-9315 |
| 104 | Mong | engineering | Female | 1993-02-24 | 010-9462-8814 |
+--------+---------+-------------+--------+------------+---------------+
4 rows in set (0.00 sec)
'%'는 모든 문자를 대표합니다.
# student 테이블의 전체 속성에 대해서 stdname의 값이 'Don'+문자인 데이터를 모두 검색
mysql> SELECT * FROM student WHERE stdname LIKE 'Don_';
+--------+---------+-----------+------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-----------+------+------------+---------------+
| 103 | Dong | economics | Male | 1995-02-24 | 010-5667-9315 |
+--------+---------+-----------+------+------------+---------------+
1 row in set (0.00 sec)
# student 테이블의 전체 속성에 대해서 stdname의 값이 문자+'ong'인 데이터를 모두 검색
mysql> SELECT * FROM student WHERE stdname LIKE '_ong';
+--------+---------+-------------+--------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+---------------+
| 101 | Hong | biology | Female | 1990-02-24 | 010-1234-5323 |
| 102 | Song | physics | Male | 1996-02-24 | 010-3322-8813 |
| 103 | Dong | economics | Male | 1995-02-24 | 010-5667-9315 |
| 104 | Mong | engineering | Female | 1993-02-24 | 010-9462-8814 |
+--------+---------+-------------+--------+------------+---------------+
4 rows in set (0.00 sec)
'_'는 문자 하나를 대표합니다.
# student 테이블의 전체 속성에 대해서 모든 데이터를 검색
mysql> SELECT * FROM student WHERE stdname LIKE '%';
mysql> SELECT * FROM student WHERE stdname LIKE '%%%%%%%%%%%%%%%%%%%%%';
mysql> SELECT * FROM student WHERE stdname LIKE '%_';
mysql> SELECT * FROM student WHERE stdname LIKE '_%';
mysql> SELECT * FROM student WHERE stdname LIKE '%_%';
+--------+---------+-------------+--------+------------+---------------+
| stdnum | stdname | major | sex | birthdate | phonenum |
+--------+---------+-------------+--------+------------+---------------+
| 101 | Hong | biology | Female | 1990-02-24 | 010-1234-5323 |
| 102 | Song | physics | Male | 1996-02-24 | 010-3322-8813 |
| 103 | Dong | economics | Male | 1995-02-24 | 010-5667-9315 |
| 104 | Mong | engineering | Female | 1993-02-24 | 010-9462-8814 |
+--------+---------+-------------+--------+------------+---------------+
'%'는 모든 문자를 대표하며 문자가 존재하지 않는 경우도 있으므로 위처럼 쿼리를 입력하면 모든 데이터가 검색됩니다.
반면에 '_'는 문자 하나만 대표하며 문자가 존재하지 않는 경우는 없으므로 '_'만으로는 데이터를 검색할 수 없습니다.
하지만 stdname 속성에 대해서 모든 값의 길이가 4이므로 'LIKE ____'만 예외적으로 전체 데이터를 보여줍니다.
댓글