>데이터 베이스 >MySQL 튜토리얼 >MySQL 쿼리: WHERE와 HAVING – 언제 사용자 정의 열에 HAVING을 사용해야 합니까?

MySQL 쿼리: WHERE와 HAVING – 언제 사용자 정의 열에 HAVING을 사용해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-19 22:32:14615검색

MySQL Queries: WHERE vs. HAVING – When Should I Use HAVING for Custom Columns?

MySQL 쿼리의 사용자 정의 열 위치: WHERE 및 HAVING

질문:

MySQL에서 SELECT 문에서 생성된 열을 WHERE 절 뒤가 아니라 HAVING 절 뒤에 배치해야 하는 이유는 무엇입니까? 또한 열의 전체 정의를 지정하는 대신 WHERE 1을 사용하면 단점이 있습니까?

정답:

이 주제에 대한 다른 답변이 다루어졌지만 주요 차이점은 다음과 같습니다.

WHERE 절: 선택하기 전에 데이터를 필터링하여 모든 테이블 열을 허용합니다. 별칭이나 집계 함수를 사용할 수 없습니다.

HAVING 절: 선택한 열, 별칭 또는 집계 함수를 사용할 수 있도록 선택 후 데이터를 필터링합니다.

위치:

사용자 정의 열은 다음과 같은 이유로 HAVING 절 뒤에 배치되어야 합니다.

  • HAVING은 맞춤 열을 포함하여 선택한 결과 데이터를 필터링합니다.
  • WHERE는 맞춤 열을 제외하고 선택하기 전에 결과 데이터를 필터링합니다.

효율성:

대규모 데이터 세트를 필터링하는 경우 WHERE 절을 사용하면 선택을 수행하기 전에 관련 없는 행을 제거하므로 더 효율적입니다.

예:

다음 형식을 고려하세요.

<code class="language-sql">CREATE TABLE `table` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `value` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 KEY `value` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8</code>

10개 행의 데이터가 포함되어 있으며 ID 및 값 값은 1부터 10까지입니다.

쿼리:

<code class="language-sql">SELECT `value` v FROM `table` WHERE `value`>5; -- 获取 5 行
SELECT `value` v FROM `table` HAVING `value`>5; -- 获取 5 行</code>

결과:

두 쿼리 모두 동일한 결과를 반환하며, 이는 HAVING 절이 GROUP BY 절 없이도 작동할 수 있음을 보여줍니다.

설명:

<code class="language-sql">EXPLAIN SELECT `value` v FROM `table` WHERE `value`>5;</code>
<code>+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
| id | select_type | table | type  | possible_keys | key   | key_len | ref  | rows | Extra                    |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
|  1 | SIMPLE      | table | range | value         | value | 4       | NULL |    5 | Using where; Using index |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+</code>
<code class="language-sql">EXPLAIN SELECT `value` v FROM `table` having `value`>5;</code>
<code>+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys | key   | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+
|  1 | SIMPLE      | table | index | NULL          | value | 4       | NULL |   10 | Using index |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+</code>

보시다시피 WHERE와 HAVING 모두 인덱스를 사용하지만 반환되는 행 수가 다릅니다. WHERE는 선택 전 데이터를 필터링하여 행 수를 줄이는 반면, HAVING은 선택 후 행을 필터링합니다.

결론:

  • 선택한 데이터를 필터링하려면 HAVING 절 뒤에 맞춤 열을 추가하세요.
  • WHERE 절을 사용하면 관련 없는 행을 제외하여 대규모 데이터 세트를 효율적으로 필터링할 수 있습니다.

위 내용은 MySQL 쿼리: WHERE와 HAVING – 언제 사용자 정의 열에 HAVING을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.