Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL IN()으로 대소문자를 구분하지 않는 SELECT 쿼리 수행하는 방법

개요

MySQL에서 IN() 조건과 함께 조회할 때 기본적으로 대소문자가 다르면 일치하지 않는 것으로 처리될 수 있습니다. 이럴 때 UPPER() 또는 LOWER() 함수를 활용하면 대소문자를 구분하지 않고 데이터를 조회할 수 있습니다.

이 글에서는 예제 테이블을 만들고, IN()UPPER()를 조합해 대소문자와 관계없이 원하는 레코드를 검색하는 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1460
    -> (
    -> Name varchar(20)
    -> );
Query OK, 0 rows affected (0.91 sec)

2단계: 데이터 삽입

INSERT 명령어를 사용해 테이블에 샘플 데이터를 추가합니다.

mysql> insert into DemoTable1460 values('Chris');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1460 values('David');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1460 values('Bob');
Query OK, 1 row affected (0.52 sec)
mysql> insert into DemoTable1460 values('Robert');
Query OK, 1 row affected (0.11 sec)

3단계: 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1460;

위 쿼리는 다음과 같은 결과를 출력합니다.

+--------+
| Name   |
+--------+
| Chris  |
| David  |
| Bob    |
| Robert |
+--------+
4 rows in set (0.00 sec)

4단계: 대소문자를 구분하지 않는 SELECT 실행

핵심은 IN() 앞에 UPPER() 함수를 사용하는 것입니다. 컬럼 값과 비교할 문자열을 모두 대문자로 변환한 뒤 비교하기 때문에, 저장된 값이 'Chris'든 'CHRIS'든 동일하게 매칭됩니다.

mysql> select * from DemoTable1460 where UPPER(Name) IN('CHRIS','BOB');

실행 결과는 다음과 같습니다.

+-------+
| Name  |
+-------+
| Chris |
| Bob   |
+-------+
2 rows in set (0.00 sec)

추가 팁

대소문자 변환은 LOWER()를 사용해 소문자 기준으로 통일할 수도 있습니다. 이 경우 컬럼 값과 비교값을 모두 소문자로 맞추면 됩니다.

select * from DemoTable1460 where LOWER(Name) IN('chris','bob');

또한, MySQL의 기본 콜레이션(예: utf8mb4_general_ci) 중 일부는 이름 끝의 _ci(case insensitive)처럼 자체적으로 대소문자를 구분하지 않습니다. 이런 콜레이션을 사용 중이라면 별도의 함수 없이도 대소문자 무관 비교가 가능하지만, 대소문자를 엄격히 구분하는 콜레이션(_cs 또는 _bin) 환경에서는 위와 같이 UPPER()/LOWER() 방식이 유용합니다.