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

MySQL 서브쿼리를 활용해 최대 나이 값을 가진 모든 사용자 조회하는 방법

MySQL에서 서브쿼리(subquery)를 활용하면 특정 컬럼의 최댓값을 가진 모든 행을 손쉽게 조회할 수 있습니다. 이 글에서는 예제 테이블을 만들고, MAX() 함수와 서브쿼리를 조합하여 최대 나이를 가진 모든 사용자를 선택하는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 이름(Name)과 나이(Age) 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable
(
   Name varchar(100),
   Age int
);
Query OK, 0 rows affected (0.46 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('Chris',23);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David',55);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Bob',53);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('Mike',54);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('Sam',55);
Query OK, 1 row affected (0.18 sec)

3. 전체 데이터 확인하기

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

mysql> select *from DemoTable;

실행하면 다음과 같은 결과가 출력됩니다.

+-------+------+
| Name  | Age  |
+-------+------+
| Chris |   23 |
| David |   55 |
| Bob   |   53 |
| Mike  |   54 |
| Sam   |   55 |
+-------+------+
5 rows in set (0.00 sec)

4. 서브쿼리로 최대 나이를 가진 사용자 조회하기

핵심은 WHERE 절 안에서 MAX() 함수를 사용한 서브쿼리를 작성하는 것입니다. 내부 서브쿼리가 먼저 실행되어 테이블 전체의 최대 나이(55)를 구하고, 외부 쿼리는 그 값과 일치하는 모든 행을 반환합니다.

mysql> select *from DemoTable
   where Age=(select max(Age) from DemoTable);

위 쿼리를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

+-------+------+
| Name  | Age  |
+-------+------+
| David | 55   |
| Sam   | 55   |
+-------+------+
2 rows in set (0.00 sec)

동작 원리 정리

이 쿼리의 실행 순서는 다음과 같습니다.

① 서브쿼리 (select max(Age) from DemoTable)가 먼저 실행되어 최대 나이인 55를 반환합니다.
② 외부 쿼리는 Age = 55 조건을 만족하는 모든 행을 조회합니다.
③ 따라서 David와 Sam처럼 동일한 최댓값을 가진 여러 명의 사용자가 한 번에 모두 조회됩니다.

만약 GROUP BY 없이 단순히 ORDER BY Age DESC LIMIT 1을 사용했다면 최대값을 가진 행 중 하나만 반환되었을 것입니다. 이처럼 서브쿼리와 MAX() 함수를 함께 사용하면 최댓값을 공유하는 모든 레코드를 누락 없이 가져올 수 있다는 점이 큰 장점입니다.