mysql에서는 그룹화된 데이터를 필터링하려면 has 키워드를 SELECT 문과 함께 사용해야 합니다. 구문은 "SELECT {*|필드 열 이름} FROM 데이터 테이블 이름 HAVING 쿼리 조건;"입니다.
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
MySQL에서는 HAVING 키워드를 사용하여 그룹화된 데이터를 필터링할 수 있습니다.
HAVING 키워드를 사용하는 구문 형식은 다음과 같습니다.
HAVING 查询条件;
HAVING 키워드와 WHERE 키워드 모두 데이터 필터링에 사용할 수 있으며 HAVING은 WHERE 키워드의 모든 연산자와 구문을 지원합니다.
그러나 WHERE 키워드와 HAVING 키워드 사이에는 다음과 같은 차이점도 있습니다.
일반적으로 WHERE는 데이터 행을 필터링하는 데 사용되는 반면 HAVING은 그룹을 필터링하는 데 사용됩니다.
집계 함수는 WHERE 쿼리 조건에서는 사용할 수 없지만, HAVING 쿼리 조건에서는 집계 함수를 사용할 수 있습니다.
WHERE는 데이터 그룹화 전 필터이고, HAVING은 데이터 그룹화 후 필터입니다.
WHERE는 데이터베이스 파일을 필터링하고, HAVING은 쿼리 결과를 필터링합니다. 즉, WHERE는 데이터 테이블의 필드를 기반으로 직접 필터링하는 반면, HAVING은 이전에 쿼리된 필드를 기반으로 필터링합니다.
WHERE 쿼리 조건은 필드 별칭을 사용할 수 없지만 HAVING 쿼리 조건은 필드 별칭을 사용할 수 있습니다.
다음 예는 WHERE와 HAVING 키워드 간의 유사점과 차이점을 보다 직관적으로 이해할 수 있도록 도와줍니다.
예제 1
tb_students_info 테이블에서 키가 150 이상인 학생의 이름, 성별, 키를 각각 HAVING 및 WHERE 키워드를 사용하여 쿼리합니다. SQL 문과 실행 결과는 다음과 같습니다.
mysql> SELECT name,sex,height FROM tb_students_info -> HAVING height>150; +--------+------+--------+ | name | sex | height | +--------+------+--------+ | Dany | 男 | 160 | | Green | 男 | 158 | | Henry | 女 | 185 | | Jane | 男 | 162 | | Jim | 女 | 175 | | John | 女 | 172 | | Lily | 男 | 165 | | Susan | 男 | 170 | | Thomas | 女 | 178 | | Tom | 女 | 165 | +--------+------+--------+ 10 rows in set (0.00 sec) mysql> SELECT name,sex,height FROM tb_students_info -> WHERE height>150; +--------+------+--------+ | name | sex | height | +--------+------+--------+ | Dany | 男 | 160 | | Green | 男 | 158 | | Henry | 女 | 185 | | Jane | 男 | 162 | | Jim | 女 | 175 | | John | 女 | 172 | | Lily | 男 | 165 | | Susan | 男 | 170 | | Thomas | 女 | 178 | | Tom | 女 | 165 | +--------+------+--------+ 10 rows in set (0.00 sec)
위 예에서는 SELECT 키워드 다음에 높이 필드를 쿼리했기 때문에 HAVING과 WHERE를 모두 사용할 수 있습니다. 그러나 SELECT 키워드 다음에 높이 필드가 쿼리되지 않으면 MySQL은 오류를 보고합니다.
예제 2
HAVING 및 WHERE 키워드를 사용하여 tb_students_info 테이블에서 키가 150보다 큰 학생의 이름과 성별을 쿼리합니다(예제 1과 비교하여 이번에는 키 필드가 쿼리되지 않음). SQL 문과 실행 결과는 다음과 같습니다.
mysql> SELECT name,sex FROM tb_students_info -> WHERE height>150; +--------+------+ | name | sex | +--------+------+ | Dany | 男 | | Green | 男 | | Henry | 女 | | Jane | 男 | | Jim | 女 | | John | 女 | | Lily | 男 | | Susan | 男 | | Thomas | 女 | | Tom | 女 | +--------+------+ 10 rows in set (0.00 sec) mysql> SELECT name,sex FROM tb_students_info HAVING height>150; ERROR 1054 (42S22): Unknown column 'height' in 'having clause'
결과를 보면 SELECT 키워드 이후에 HAVING 쿼리 조건에 사용된 height 필드를 쿼리하지 않으면 MySQL에서 "having 절"의 "height" 열을 알 수 없습니다"라는 오류 메시지가 표시되는 것을 알 수 있습니다.
예제 3
tb_students_info 테이블의 데이터를 키 필드에 따라 그룹화하고 HAVING 및 WHERE 키워드를 사용하여 평균 키가 170 이상인 학생의 이름, 성별, 키를 쿼리합니다. SQL 명령문 및 실행 결과는 다음과 같습니다
mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info -> GROUP BY height -> HAVING AVG(height)>170; +--------------------+------+--------+ | GROUP_CONCAT(name) | sex | height | +--------------------+------+--------+ | John | 女 | 172 | | Jim | 女 | 175 | | Thomas | 女 | 178 | | Henry | 女 | 185 | +--------------------+------+--------+ 4 rows in set (0.00 sec) mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info WHERE AVG(height)>170 GROUP BY height; ERROR 1111 (HY000): Invalid use of group function
결과에서 알 수 있듯이 WHERE 쿼리 조건에 집계 함수가 사용되면 MySQL은 다음과 같은 오류 메시지를 표시합니다. 그룹 함수의 사용이 잘못되었습니다
[관련 권장 사항: mysql 동영상 튜토리얼]
위 내용은 mysql have 키워드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!