본문 바로가기
Database/MySQL

[MySQL] 데이터를 검색하는 SELECT 명령어의 응용 및 예제 정리(2) - LIKE

by Blue Developer 2021. 9. 30.

들어가기에 앞서

본 게시물은 '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 ____'만 예외적으로 전체 데이터를 보여줍니다.

댓글