>  기사  >  데이터 베이스  >  mysql have 키워드를 사용하는 방법

mysql have 키워드를 사용하는 방법

青灯夜游
青灯夜游원래의
2022-02-24 19:05:1015949검색

mysql에서는 그룹화된 데이터를 필터링하려면 has 키워드를 SELECT 문과 함께 사용해야 합니다. 구문은 "SELECT {*|필드 열 이름} FROM 데이터 테이블 이름 HAVING 쿼리 조건;"입니다.

mysql have 키워드를 사용하는 방법

이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.

MySQL HAVING: 필터 그룹화

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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