MySQL 테이블에서 모든 문자가 대문자로 되어 있는 문자열만 조회하려면 BINARY 키워드와 UPPER() 함수를 함께 사용해야 합니다. 기본적인 문법은 다음과 같습니다.
SELECT * FROM yourTableName WHERE yourColumnName = BINARY UPPER(yourColumnName);
여기서 BINARY를 사용하는 이유는 중요합니다. MySQL은 기본적으로 문자열 비교 시 대소문자를 구분하지 않기 때문에, 단순히 UPPER() 함수와 비교만 하면 소문자가 포함된 값도 함께 반환될 수 있습니다. BINARY 키워드를 추가하면 바이너리(대소문자 구분) 방식으로 정확하게 비교할 수 있습니다.
예제 테이블 생성하기
문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 테이블을 생성합니다.
mysql> create table FindUpperCaseDemo
-> (
-> Id int,
-> FirstName varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (1.04 sec)샘플 데이터 삽입하기
INSERT 명령을 사용해 테스트용 레코드를 입력합니다. 의도적으로 대문자만 있는 값과 대소문자가 섞인 값을 함께 넣었습니다.
mysql> insert into FindUpperCaseDemo values(1,'John',23); Query OK, 1 row affected (0.17 sec) mysql> insert into FindUpperCaseDemo values(2,'CAROL',21); Query OK, 1 row affected (0.29 sec) mysql> insert into FindUpperCaseDemo values(3,'JoHN',23); Query OK, 1 row affected (0.11 sec) mysql> insert into FindUpperCaseDemo values(4,'JOHN',26); Query OK, 1 row affected (0.22 sec) mysql> insert into FindUpperCaseDemo values(5,'sAM',26); Query OK, 1 row affected (0.18 sec) mysql> insert into FindUpperCaseDemo values(6,'SAM',28); Query OK, 1 row affected (0.18 sec) mysql> insert into FindUpperCaseDemo values(7,'MIKE',29); Query OK, 1 row affected (0.17 sec) mysql> insert into FindUpperCaseDemo values(8,'BOB',20); Query OK, 1 row affected (0.45 sec) mysql> insert into FindUpperCaseDemo values(9,'LARRY',22); Query OK, 1 row affected (0.39 sec) mysql> insert into FindUpperCaseDemo values(10,'LARRy',22); Query OK, 1 row affected (0.14 sec)
전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from FindUpperCaseDemo;
실행 결과는 다음과 같습니다.
+------+-----------+------+ | Id | FirstName | Age | +------+-----------+------+ | 1 | John | 23 | | 2 | CAROL | 21 | | 3 | JoHN | 23 | | 4 | JOHN | 26 | | 5 | sAM | 26 | | 6 | SAM | 28 | | 7 | MIKE | 29 | | 8 | BOB | 20 | | 9 | LARRY | 22 | | 10 | LARRy | 22 | +------+-----------+------+ 10 rows in set (0.00 sec)
대문자 문자열만 조회하는 쿼리 실행
이제 MySQL 테이블에서 대문자로만 이루어진 문자열을 찾는 핵심 쿼리를 실행해 보겠습니다.
mysql> select *from FindUpperCaseDemo where FirstName=BINARY UPPER(FirstName);
실행 결과는 다음과 같습니다.
+------+-----------+------+ | Id | FirstName | Age | +------+-----------+------+ | 2 | CAROL | 21 | | 4 | JOHN | 26 | | 6 | SAM | 28 | | 7 | MIKE | 29 | | 8 | BOB | 20 | | 9 | LARRY | 22 | +------+-----------+------+ 6 rows in set (0.09 sec)
결과를 보면 'John', 'JoHN', 'sAM', 'LARRy'처럼 대소문자가 섞인 값은 제외되고, 'CAROL', 'JOHN', 'SAM', 'MIKE', 'BOB', 'LARRY'처럼 모든 글자가 대문자인 값만 정확히 필터링되어 반환된 것을 확인할 수 있습니다.