【データベース】「SQLの実践」簡単速習‼【⑤UNION, GROUP BY, HAVING/MySQL】

SQL

こんにちはヤク学長です。
データサイエンティスト兼ファーマシストで、アルゴリズムやBI開発を行っています。

本記事の目的は、「SQLの基本操作を知る」ことを目的としています。

【本記事のもくじ】

まず、「SQL」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。

  • 7.UNION
  • 8.GROUP BY
  • 9.HAVING

それでは、上から順番に見ていきます。
なお、本上記の方法を順番に抑えれば成果が出ます。

記事の内容は「転載 & 引用OK」問題ありません。

7.UNION

集合演習

MySQLにおける集合演算子とは、複数のSELECT文の結果を結合するための演算子です。主な集合演算子には、UNION、UNION ALL、INTERSECT、EXCEPTがあります。

  • UNION UNION演算子は、2つのSELECT文の結果を結合し、重複した行を取り除いたものを返します。例えば、以下のようなクエリがあります。
SELECT name FROM table1 UNION SELECT name FROM table2;

このクエリは、table1とtable2のname列の値を結合して、重複した値を除いた結果を返します。

  • UNION ALL UNION ALL演算子は、2つのSELECT文の結果を結合し、重複した行も含めたものを返します。例えば、以下のようなクエリがあります。
SELECT name FROM table1 UNION ALL SELECT name FROM table2;

このクエリは、table1とtable2のname列の値を結合して、重複した値を含めた結果を返します。

  • INTERSECT INTERSECT演算子は、2つのSELECT文の結果のうち、両方に含まれる行を返します。MySQLでは、INTERSECT演算子はサポートされていませんが、同等の処理をすることができます。
SELECT name FROM table1 WHERE name IN (SELECT name FROM table2);

このクエリは、table1とtable2のname列の値のうち、両方に含まれる値を返します。

  • EXCEPT EXCEPT演算子は、1つ目のSELECT文の結果から、2つ目のSELECT文の結果に含まれる行を取り除いた結果を返します。MySQLでは、EXCEPT演算子はサポートされていませんが、同等の処理をすることができます。
SELECT name FROM table1 WHERE name NOT IN (SELECT name FROM table2);

このクエリは、table1のname列の値のうち、table2のname列の値に含まれない値を返します。

集計関数

MySQLには、集計関数と呼ばれるデータを集計するための関数があります。主な集計関数には、SUM、AVG、MAX、MIN、COUNTなどがあります。

  • SUM:SUM関数は、指定した列の合計値を返します。例えば、以下のようなクエリがあります。

SELECT SUM(price) FROM sales;

このクエリは、salesテーブルのprice列の合計値を返します。

  • AVG:AVG関数は、指定した列の平均値を返します。例えば、以下のようなクエリがあります。

SELECT AVG(price) FROM sales;

このクエリは、salesテーブルのprice列の平均値を返します。

  • MAX:MAX関数は、指定した列の最大値を返します。例えば、以下のようなクエリがあります。

SELECT MAX(price) FROM sales;

このクエリは、salesテーブルのprice列の最大値を返します。

  • MIN:MIN関数は、指定した列の最小値を返します。例えば、以下のようなクエリがあります。

SELECT MIN(price) FROM sales;

このクエリは、salesテーブルのprice列の最小値を返します。

  • COUNT:COUNT関数は、指定した列の行数を返します。例えば、以下のようなクエリがあります。

SELECT COUNT(*) FROM sales;

このクエリは、salesテーブルの行数を返します。COUNT関数には、引数を指定することもできます。例えば、以下のようなクエリがあります。

SELECT COUNT(DISTINCT customer_id) FROM sales;

このクエリは、salesテーブルのcustomer_id列の重複を除いた値の数を返します。

8.GROUP BY

GROUP BYは、MySQLのSELECT文で使用されるクエリの一つで、データをグループ化するために使用されます。グループ化されたデータは、そのグループ内で集計されます。GROUP BYを使用することで、データの集計や分析がより容易になります。

GROUP BY句は、SELECT文の最後に記述されます。GROUP BY句には、グループ化する列名が指定されます。例えば、以下のようなクエリがあります。

SELECT category, SUM(price) FROM sales GROUP BY category;

このクエリは、salesテーブルのcategory列をグループ化し、各グループのprice列の合計値を計算します。category列でグループ化されたデータが取得され、各グループのprice列の合計値が表示されます。

GROUP BY句に複数の列名を指定することもできます。例えば、以下のようなクエリがあります。

SELECT category, region, AVG(price) FROM sales GROUP BY category, region;

このクエリは、salesテーブルのcategory列とregion列をグループ化し、各グループのprice列の平均値を計算します。category列とregion列でグループ化されたデータが取得され、各グループのprice列の平均値が表示されます。

9.HAVING

HAVING句は、MySQLのSELECT文で使用されるクエリの一つで、GROUP BY句でグループ化されたデータに対して、条件を指定するために使用されます。WHERE句がGROUP BY句の前に記述されるのに対して、HAVING句はGROUP BY句の後に記述されます。

HAVING句には、GROUP BY句で指定された列名に対して、条件式を記述します。例えば、以下のようなクエリがあります。

SELECT category, AVG(price) FROM sales GROUP BY category HAVING AVG(price) > 1000;

このクエリは、salesテーブルのcategory列でグループ化された各グループのprice列の平均値が1000より大きい場合に、category列とprice列の平均値を取得します。HAVING句にAVG(price) > 1000という条件式が指定されており、平均値が1000より大きいグループのデータのみが取得されます。


というわけで、今回は以上です。大変大変お疲れ様でした。
引き続きで、徐々に発信していきます。

コメントや感想を受け付けています。ちょっとした感想でもいいので嬉しいです。

それでは、以上です。

最新情報をチェックしよう!