집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 쿼리: WHERE와 HAVING – 언제 사용자 정의 열에 HAVING을 사용해야 합니까?
MySQL 쿼리의 사용자 정의 열 위치: WHERE 및 HAVING
질문:
MySQL에서 SELECT 문에서 생성된 열을 WHERE 절 뒤가 아니라 HAVING 절 뒤에 배치해야 하는 이유는 무엇입니까? 또한 열의 전체 정의를 지정하는 대신 WHERE 1을 사용하면 단점이 있습니까?
정답:
이 주제에 대한 다른 답변이 다루어졌지만 주요 차이점은 다음과 같습니다.
WHERE 절: 선택하기 전에 데이터를 필터링하여 모든 테이블 열을 허용합니다. 별칭이나 집계 함수를 사용할 수 없습니다.
HAVING 절: 선택한 열, 별칭 또는 집계 함수를 사용할 수 있도록 선택 후 데이터를 필터링합니다.
위치:
사용자 정의 열은 다음과 같은 이유로 HAVING 절 뒤에 배치되어야 합니다.
효율성:
대규모 데이터 세트를 필터링하는 경우 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은 선택 후 행을 필터링합니다.
결론:
위 내용은 MySQL 쿼리: WHERE와 HAVING – 언제 사용자 정의 열에 HAVING을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!