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

MySQL에서 특정 값이 포함된 행을 걸러내고 다른 컬럼 값만 조회하는 방법

개요

MySQL에서 특정 값이 들어 있는 행을 찾으면서, 그 값이 저장된 컬럼은 제외하고 나머지 컬럼의 값만 화면에 표시해야 하는 경우가 있습니다. 이럴 때 CASE WHEN 문을 활용하면 간단하게 해결할 수 있습니다.

예를 들어 이름(first_name)과 성(last_name)이 함께 저장된 테ーブル에서 'John'이라는 값이 포함된 행을 조회하되, 'John' 자체는 결과에서 제외하고 다른 쪽 컬럼의 값만 보여주는 상황을 생각해 볼 수 있습니다.

1. 테ーブル 생성

먼저 예제로 사용할 테이블을 만들어 보겠습니다.

mysql> create table demo47
-> (
-> first_name varchar(20),
-> last_name varchar(20)
-> );
Query OK, 0 rows affected (1.57 sec)

first_namelast_name 두 개의 VARCHAR 컬럼을 가진 demo47 테ーブル가 생성되었습니다.

2. 데이터 입력

INSERT 명령어로 몇 개의 레코드를 추가합니다.

mysql> insert into demo47 values('John','Smith');
Query OK, 1 row affected (0.18 sec)

mysql> insert into demo47 values('David','Miller');
Query OK, 1 row affected (0.11 sec)

mysql> insert into demo47 values('John','Doe');
Query OK, 1 row affected (0.12 sec)

mysql> insert into demo47 values('Chris','Brown');
Query OK, 1 row affected (0.12 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블에 저장된 데이터를 확인해 보겠습니다.

mysql> select *from demo47;

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

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| John | Smith |
| David | Miller |
| John | Doe |
| Chris | Brown |
+------------+-----------+
4 rows in set (0.00 sec)

총 4개의 행이 저장되어 있으며, 이 중 'John'은 두 번 등장합니다(John Smith, John Doe).

4. CASE WHEN으로 특정 값 제외하고 조회하기

이제 'John'이 포함된 행을 찾되, 'John'이 있는 컬럼 대신 다른 컬럼의 값을 출력하는 쿼리를 작성해 보겠습니다.

mysql> select case when first_name= 'John' then last_name else first_name end Result
-> from demo47
-> where 'John' in (first_name,last_name);

쿼리의 동작 방식을 살펴보면 다음과 같습니다.

  • WHERE 절: 'John' in (first_name, last_name) 조건으로 두 컬럼 중 하나라도 'John'이 들어 있는 행만 필터링합니다.
  • CASE WHEN 절: first_name이 'John'이면 last_name 값을 출력하고, 그렇지 않으면 first_name 값을 출력합니다.

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

+--------+
| Result |
+--------+
| Smith |
| Doe |
+--------+
2 rows in set (0.00 sec)

결과 분석

결과를 보면 'John'이라는 값 자체는 사라지고, 같은 행에 있던 다른 컬럼의 값인 'Smith'와 'Doe'만 출력된 것을 확인할 수 있습니다. 즉, WHERE 절로 원하는 행을 골라내고, CASE WHEN으로 해당 행에서 제외할 컬럼과 표시할 컬럼을 결정한 것입니다.

이처럼 CASE WHEN 문은 단순한 조건 분기뿐 아니라, 조회 결과에서 특정 값을 치환하거나 숨기고 싶을 때 유용하게 사용할 수 있습니다. 조건에 맞는 행을 걸러내면서 동시에 출력 형태를 제어해야 하는 상황이라면 이 패턴을 적극적으로 활용해 보시기 바랍니다.