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

MySQL에서 하위 쿼리 없이 WHERE 절에 실제 행 수(COUNT(*))를 활용하는 방법

WHERE 절을 활용한 실제 행 수 조건 처리

MySQL에서는 WHERE 절 안에 COUNT(*)를 포함하는 하위 쿼리를 사용하여 테이블의 실제 행 수를 조건으로 활용할 수 있습니다. 이 방식을 사용하면 테이블의 전체 행 수가 특정 값일 때만 결과를 반환하도록 쿼리를 제어할 수 있습니다.

기본 문법

SELECT yourColumnName1,yourColumnName2,...N FROM yourTableName
WHERE
(
    SELECT COUNT(*) FROM yourTableName
)=2;

위 쿼리는 테이블의 전체 행 수가 정확히 2개일 때만 모든 행을 반환하며, 그렇지 않은 경우에는 빈 결과 집합(Empty Set)을 출력합니다.

예제 테이블 생성

개념을 쉽게 이해하기 위해 먼저 테이블을 하나 생성해 보겠습니다.

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

INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into CountWithSubqueryDemo(EmployeeName) values('John');
Query OK, 1 row affected (0.54 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values(NULL);
Query OK, 1 row affected (0.36 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Carol');
Query OK, 1 row affected (0.23 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('');
Query OK, 1 row affected (0.31 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Bob');
Query OK, 1 row affected (1.24 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values(NULL);
Query OK, 1 row affected (0.30 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Mike');
Query OK, 1 row affected (0.18 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('James');
Query OK, 1 row affected (0.26 sec)

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

mysql> select *from CountWithSubqueryDemo;

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

+----+--------------+
| Id | EmployeeName |
+----+--------------+
|  1 | John         |
|  2 | NULL         |
|  3 | Carol        |
|  4 |              |
|  5 | Bob          |
|  6 | NULL         |
|  7 | Sam          |
|  8 | Mike         |
|  9 | James        |
+----+--------------+
9 rows in set (0.19 sec)

WHERE 절에서 행 수 사용하기

다음은 WHERE 절에서 실제 행 수를 사용하는 방법입니다.

mysql> select Id,EmployeeName from CountWithSubqueryDemo
    - > where
    - > (
    - > select count(*) from CountWithSubqueryDemo
    - > )=2;
Empty set (0.03 sec)

위 쿼리에서 빈 결과 집합이 반환된 이유는, 테이블에 정확히 두 개의 레코드가 있을 때만 행을 반환하도록 조건을 설정했기 때문입니다. 현재 테이블에는 9개의 레코드가 존재하므로 아무런 결과도 반환되지 않습니다.

따라서 테이블의 모든 레코드를 삭제한 후, 2개의 레코드만 다시 삽입해 보겠습니다.

mysql> truncate table CountWithSubqueryDemo;
Query OK, 0 rows affected (1.95 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('James');
Query OK, 1 row affected (0.15 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values(NULL);
Query OK, 1 row affected (0.46 sec)

변경된 테이블의 전체 레코드를 다시 조회합니다.

mysql> select *from CountWithSubqueryDemo;
+----+--------------+
| Id | EmployeeName |
+----+--------------+
|  1 | James        |
|  2 | NULL         |
+----+--------------+
2 rows in set (0.00 sec)

행 수 조건이 적용된 최종 쿼리 실행

이제 다시 WHERE 절에서 행 수를 사용하는 쿼리를 실행해 보겠습니다.

mysql> select Id,EmployeeName from CountWithSubqueryDemo
    - > where
    - > (
    - > select count(*) from CountWithSubqueryDemo
    - > )=2;

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

+----+--------------+
| Id | EmployeeName |
+----+--------------+
|  1 | James        |
|  2 | NULL         |
+----+--------------+
2 rows in set (0.00 sec)

테이블의 전체 행 수가 정확히 2개이므로, 이번에는 모든 행이 정상적으로 반환되었습니다. 이처럼 WHERE 절 내의 하위 쿼리에서 COUNT(*)를 비교하면, 테이블의 실제 행 수에 따라 쿼리 결과를 유연하게 제어할 수 있습니다.