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

MySQL에서 모음으로 시작하지 않는 도시 이름만 조회하는 쿼리 작성법

MySQL에서 모음(A, E, I, O, U)으로 시작하지 않는 도시 이름 목록을 조회하려면 DISTINCT 키워드와 RLIKE 연산자를 함께 사용하면 됩니다. RLIKE는 정규 표현식 기반의 패턴 매칭 연산자로, 도시 이름의 첫 글자가 모음인지 아닌지를 손쉽게 판별할 수 있습니다.

기본 문법

모음으로 시작하지 않는 도시 이름을 조회하는 기본 문법은 다음과 같습니다.

SELECT DISTINCT yourCityColumnName FROM yourTableName WHERE yourCityColumnName NOT RLIKE '^[AEIOUaeiou].*$';

정규 표현식 ^[AEIOUaeiou].*$는 문자열이 대문자 또는 소문자 모음으로 시작하는 경우를 의미하며, 앞에 NOT을 붙이면 그 반대 조건, 즉 모음으로 시작하지 않는 행만 반환됩니다.

예제 테이블 생성

문법을 실제로 이해하기 위해 도시 이름 컬럼을 포함한 테이블을 먼저 만들어 보겠습니다.

mysql> create table Employee_Information -> ( -> Id int NOT NULL AUTO_INCREMENT, -> EmployeeName varchar(20), -> CityName varchar(20), -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (0.76 sec)

샘플 데이터 입력

INSERT 명령어를 사용해 직원 정보와 도시 이름 데이터를 입력합니다.

mysql> insert into Employee_Information(EmployeeName,CityName) values('Larry','New York'); mysql> insert into Employee_Information(EmployeeName,CityName) values('Sam','Indianapolis'); mysql> insert into Employee_Information(EmployeeName,CityName) values('Carol','El Paso'); mysql> insert into Employee_Information(EmployeeName,CityName) values('John','Austin'); mysql> insert into Employee_Information(EmployeeName,CityName) values('Mike','Denver'); mysql> insert into Employee_Information(EmployeeName,CityName) values('David','Las Vegas'); mysql> insert into Employee_Information(EmployeeName,CityName) values('James','Albuquerque'); mysql> insert into Employee_Information(EmployeeName,CityName) values('Robert','Portland'); mysql> insert into Employee_Information(EmployeeName,CityName) values('Richard','Irvine'); mysql> insert into Employee_Information(EmployeeName,CityName) values('Michael','Garland');

입력된 전체 데이터 확인

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

mysql> select *from Employee_Information;

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

+----+--------------+--------------+ | Id | EmployeeName | CityName     | +----+--------------+--------------+ |  1 | Larry        | New York     | |  2 | Sam          | Indianapolis | |  3 | Carol        | El Paso      | |  4 | John         | Austin       | |  5 | Mike         | Denver       | |  6 | David        | Las Vegas    | |  7 | James        | Albuquerque  | |  8 | Robert       | Portland     | |  9 | Richard      | Irvine       | | 10 | Michael      | Garland      | +----+--------------+--------------+ 10 rows in set (0.00 sec)

모음으로 시작하지 않는 도시 이름 조회 쿼리

이제 본론입니다. 도시 이름의 첫 글자가 A, E, I, O, U 또는 a, e, i, o, u로 시작하지 않는 레코드만 조회하는 쿼리는 다음과 같습니다.

mysql> SELECT DISTINCT CityName FROM Employee_Information -> WHERE CityName NOT RLIKE '^[AEIOUaeiou].*$';

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

+-----------+ | CityName  | +-----------+ | New York  | | Denver    | | Las Vegas | | Portland  | | Garland   | +-----------+ 5 rows in set (0.00 sec)

결과 분석

위 결과에서 New York(N), Denver(D), Las Vegas(L), Portland(P), Garland(G)처럼 첫 글자가 자음인 도시 이름만 출력된 것을 확인할 수 있습니다. 반면 Indianapolis(I), El Paso(E), Austin(A), Albuquerque(A), Irvine(I)처럼 모음으로 시작하는 도시 이름은 정규 표현식 조건에 걸려 제외되었습니다.

추가 팁

대소문자 구분 없이 처리하고 싶다면 정규 표현식에 대문자와 소문자를 모두 포함하는 것이 안전합니다. 또한 MySQL 8.0 이상에서는 REGEXP_LIKE(CityName, '^[AEIOUaeiou]') 함수를 사용해 동일한 결과를 얻을 수 있으며, 가독성 측면에서 더 직관적일 수 있습니다. 중복 제거가 필요 없다면 DISTINCT를 생략해도 무방합니다.