MySQL에서의 위치 vs

Mehvish Ashiq 2024년2월15일
  1. MySQL의 ‘WHERE’ 대 ‘HAVING’
  2. MySQL의 WHERE
  3. MySQL의 HAVING
  4. MySQL의 WHERE 절과 HAVING 절의 차이점
MySQL에서의 위치 vs

오늘은 MySQL의 WHERE 절과 HAVING 절의 차이점에 대해 알아보겠습니다. 코드 예제를 통해 절을 개별적으로 이해하고 차이점을 강조하기 위해 표 형식으로 비교합니다.

MySQL의 ‘WHERE’ 대 ‘HAVING’

WHEREHAVING 절은 매우 유사합니다. 이러한 절의 주요 차이점은 GROUP BY와 함께 사용될 때 발생합니다.

집계된 데이터에는 WHERE 절을 사용할 수 없지만 HAVING은 사용할 수 있습니다.

WHERE는 그룹화 전에 레코드(행)를 필터링하지만 HAVING 절은 그룹화 후 레코드(행)를 제외한다고 말할 수 있습니다.

이 기사를 단계별로 계속하려면 테이블이 있어야 합니다.

따라서 ID, Product, MonthOfTransactionAmountInUSD라는 네 가지 속성을 포함하는 transactions 테이블을 만듭니다.

예제 코드:

#create a table
CREATE TABLE `ms20`.`transactions` (
    `ID` INT NOT NULL AUTO_INCREMENT,
    `Product` VARCHAR(45) NOT NULL,
    `MonthOfTransaction` VARCHAR(20) NOT NULL,
    `AmountInUSD` INT NOT NULL,
    PRIMARY KEY (`ID`));

#insert data into a table
INSERT INTO ms20.transactions(Product, MonthOfTransaction, AmountInUSD) VALUES
('Air Conditioner', 'January', 500),
('Television', 'January', 600),
('Refrigerator', 'January', 550),
('Television', 'March', 600),
('Air Conditioner', 'March', 500),
('Juicer Machine', 'March', 200);

#select all data from the table
SELECT * FROM ms20.transactions;

출력:

mysql에서 vs. 트랜잭션 데이터

MySQL의 WHERE

MySQL에서는 WHERE 절을 사용하여 레코드를 필터링하고 지정된 조건을 충족하는 행(레코드)만 추출합니다. SELECT 문과 UPDATE, INSERTDELETE 명령과 함께 사용할 수 있습니다.

WHERE 절은 JOIN 절을 사용하여 단일 또는 여러 테이블에서 레코드를 검색하는 동안 선택한 열에 배치된 특정 조건과 관련됩니다. WHERE 절에서 논리 연산을 수행할 수 있습니다(예: AND, NOT, OR.

테이블(관계라고도 함)에서 정보를 검색하는 동안 true여야 하는 부울 조건이라고 부를 수도 있습니다. 이러한 논리 연산자는 <, >, <=, >=, =<>를 비롯한 비교 연산자를 사용합니다.

예제 코드:

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
WHERE Product in ( 'Television', 'Refrigerator')
GROUP BY Product;

출력:

where 대 mysql에 있는 것 - where 절 출력

MySQL의 HAVING

MySQL에서 HAVING 절은 GROUP BY 절과 결합됩니다. 이 절을 사용하는 목적은 열 연산을 수행하고 주어진 조건에 따라 집계된 데이터 또는 그룹에 적용하는 것입니다.

HAVING 절은 특정 조건을 충족하는 그룹의 결과만 반환합니다. WHEREHAVING 절이 함께 사용되는 경우 WHERE는 개별 레코드(행)를 필터링합니다.

그런 다음 레코드(행)가 그룹화되고 집계 계산이 수행되며 마지막으로 HAVING이 그룹을 필터링합니다. HAVING 절은 GROUP BY 절이 생성한 그룹의 상태를 확인합니다.

GROUP BY절이 없으면 HAVING절은 WHERE절처럼 작동합니다.

HAVING 절과 SELECT 문을 결합하여 다양한 집계 함수를 사용할 수도 있습니다. 집계(그룹) 방법에는 SUM, MAX, MIN, COUNTAVG가 포함됩니다.

HAVING 절과 함께 집계 함수를 쉽게 사용할 수 있지만 WHERE 절과 함께 사용하면 잘못된 그룹 함수 사용 오류가 발생합니다.

예제 코드(집계 함수 없음):

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING Product in ('Television', 'Refrigerator');

출력:

where vs. mysql에서 - 절 출력 1을 가짐

예제 코드(집계 기능 포함):

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING sum(AmountInUSD) > 800;

출력:

where 대 mysql에서 - 절 출력 2를 가짐

하나의 쿼리에 여러 절이 있는 경우 실행 순서를 아는 것이 중요합니다. F = FROM, W = WHERE, G = GROUP BY, H = HAVING에서 실행 순서를 알기 위해 FWGHSOL 순서(F에서 시작하여 L로 끝남)를 기억해야 합니다. , S = SELECT, O = ORDER BYL = LIMIT.

MySQL의 WHERE 절과 HAVING 절의 차이점

데이터를 조작하는 쿼리를 작성할 때 다음 사항을 고려해야 합니다.

WHERE HAVING 조항
행(레코드) 작업에서 구현됩니다. 열(속성) 작업에서 구현됩니다.
집계 계산 전에 개별 행에 대해 필터 작업을 수행합니다. 집계(그룹) 데이터에 대해 필터 작업을 수행합니다.
주어진 조건을 만족하는 특정 행에서 특정 데이터를 검색합니다. 먼저 모든 데이터를 검색한 다음 지정된 조건에 따라 분리합니다.
이 절에는 집계 메서드를 사용할 수 없습니다. 이 절과 함께 집계 메서드를 쉽게 사용할 수 있습니다.
사전 필터처럼 작동하며 GROUP BY 절 앞에 옵니다. 포스트 필터처럼 작동하며 GROUP BY 절 뒤에 옵니다.
DELETE, SELECTUPDATE 문과 함께 사용할 수 있습니다. SELECT 문과만 사용할 수 있습니다.
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - MySQL Query