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

MySQL에서 별칭(Alias)을 기준으로 필터링하는 방법 – HAVING 절 완벽 가이드

MySQL에서 SELECT 문으로 계산된 값에 별칭(Alias)을 붙인 후, 그 별칭을 기준으로 결과를 필터링하고 싶은 경우가 있습니다. 이때 WHERE 절 대신 HAVING 절을 사용하면 됩니다.

WHERE 절은 별칭을 인식하지 못하기 때문에, 집계되거나 계산된 컬럼의 별칭으로 조건을 걸 때는 반드시 HAVING 절을 활용해야 합니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable755 (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Score1 int,
    Score2 int
);
Query OK, 0 rows affected (0.62 sec)

2. 샘플 데이터 삽입하기

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

mysql> insert into DemoTable755(Score1,Score2) values(30,23);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable755(Score1,Score2) values(50,60);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable755(Score1,Score2) values(89,90);
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable755(Score1,Score2) values(99,99);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable755(Score1,Score2) values(40,43);
Query OK, 1 row affected (0.14 sec)

3. 전체 레코드 확인하기

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

mysql> select *from DemoTable755;

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

+----+--------+--------+
| Id | Score1 | Score2 |
+----+--------+--------+
|  1 |     30 |     23 |
|  2 |     50 |     60 |
|  3 |     89 |     90 |
|  4 |     99 |     99 |
|  5 |     40 |     43 |
+----+--------+--------+
5 rows in set (0.00 sec)

4. 별칭을 활용한 필터링 쿼리

다음은 MySQL에서 별칭을 기준으로 필터링을 수행하는 쿼리입니다. Score1과 Score2를 더한 값을 Result라는 별칭으로 지정하고, HAVING 절을 사용해 그 값이 83인 레코드만 조회합니다.

mysql> select Score1+Score2 AS Result,DemoTable755.* from DemoTable755 having Result=83;

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

+--------+----+--------+--------+
| Result | Id | Score1 | Score2 |
+--------+----+--------+--------+
|     83 |  5 |     40 |     43 |
+--------+----+--------+--------+
1 row in set (0.00 sec)

핵심 정리

Score1(40) + Score2(43) = 83이므로, 조건에 일치하는 5번 레코드만 반환되었습니다. 이처럼 HAVING 절에 별칭을 사용하면 계산된 결과값을 기준으로 손쉽게 필터링할 수 있습니다. 다만 HAVING 절은 내부적으로 임시 테이블을 생성하기 때문에 대량의 데이터를 다룰 때는 성능에 유의하는 것이 좋습니다.