MySQL のどこにあるのか

Mehvish Ashiq 2024年2月15日
  1. MySQL の WHEREHAVING
  2. MySQL の WHERE
  3. MySQL の HAVING
  4. MySQL の WHERE 句と HAVING 句の違い
MySQL のどこにあるのか

今日は、MySQL の WHERE 句と HAVING 句の違いについて学びます。コード例を使用して句を個別に理解し、表形式で比較して違いを強調します。

MySQL の WHEREHAVING

WHERE 句と HAVING 句は非常によく似ています。これらの句の主な違いは、GROUP BY で使用する場合に発生します。

集合データで WHERE 句を使用することはできませんが、HAVING は使用できます。

WHERE はグループ化する前にレコード(行)をフィルタリングすると言えますが、HAVING 句はグループ化後のレコード(行)を除外します。

この記事を段階的に続けるには、表が必要です。

したがって、IDProductMonthOfTransaction、および AmountInUSD という名前の 4つの属性を含む 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;

出力:

ここで vsmysql にある-トランザクションデータ

MySQL の WHERE

MySQL では、WHERE 句を使用してレコードをフィルタリングし、指定された条件を満たす行(レコード)のみを抽出します。SELECT ステートメントと UPDATEINSERT、および DELETE コマンドで使用できます。

WHERE 句は、JOIN 句を使用して単一または複数のテーブルからレコードを取得するときに、選択した列に配置される特定の条件に関係します。WHERE 句で論理演算を実行できます。たとえば、ANDNOTOR などです。

テーブルから情報を取得するときに 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 句は、特定の条件を満たすグループからの結果のみを返します。WHERE 句と HAVING 句を一緒に使用すると、WHERE は個々のレコード(行)をフィルタリングします。

次に、レコード(行)がグループ化され、集計計算が実行され、最後に HAVING がグループをフィルタリングします。HAVING 句は、GROUP BY 句が作成したグループの状態をチェックします。

GROUP BY 句がない場合、HAVING 句は WHERE 句のように動作します。

HAVING 句を SELECT ステートメントと組み合わせることで、さまざまな集計関数を使用することもできます。集約(グループ)メソッドには、SUMMAXMINCOUNT、および AVG が含まれます。

HAVING 句を使用すると集計関数を簡単に使用できますが、WHERE 句を使用するとグループ関数の無効な使用としてエラーが発生します。

サンプルコード(集計関数なし):

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

出力:

ここで、vs は mysql にあります-句を出力する

サンプルコード(集計関数を使用):

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

出力:

ここで、vs は mysql にあります-句出力 2 を持っています

1つのクエリに複数の句がある場合は、実行順序を知っておくことが重要です。F = FROMW = WHEREG = GROUP BYH = HAVING の実行シーケンスを知るには、FWGHSOLFで始まりLで終わる)の順序を覚えておく必要があります。S = SELECTO = ORDER BY、および L = LIMIT

MySQL の WHERE 句と HAVING 句の違い

データを操作するクエリを作成する際には、次の点を考慮する必要があります。

WHERE 条項 HAVING
行(レコード)操作で実装されます。 列(属性)操作で実装されます。
集計計算の前に、個々の行に対してフィルター操作を実行します。 集約された(グループ)データに対してフィルター操作を実行します。
指定された条件を満たす特定の行から特定のデータを取得します。 最初にすべてのデータを取得し、次に指定された条件に応じて分離します。
この句で集計メソッドを使用することはできません。 この句で集約メソッドを簡単に使用できます。
プレフィルターのように動作し、GROUP BY 句の前にあります。 ポストフィルターのように動作し、GROUP BY 句の後にあります。
DELETESELECT、および UPDATE ステートメントで使用できます。 SELECT ステートメントでのみ使用できます。
著者: Mehvish Ashiq
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