明日から、身につける。
明日から、身につける。
2016.01.18

【初心者入門編】MySQLのコマンドで数値集計する方法をマスターしよう vol.2

やまと

こんにちは、エンジニアのやまとです。

こちらは、SQLコマンドの基礎を身につけるための初心者入門編シリーズ!
前回の記事では、MySQLのコマンドで単一テーブルから数値集計する方法の基本をご紹介しました。

そして今回は、

  • 書いたコマンドを見やすく管理できる「別名」
  • 複数テーブルを用いた集計の「ジョイン句」「ユニオン句」
  • セレクト文の結果をWHERE条件などに適用する「サブクエリ」

について説明したいと思います。

それでは、実際にそれぞれのコマンドの書き方とイメージ図を見ていきましょう!

※当記事では

  • 「テーブルA」などをサンプルのテーブル
  • 「F1、F2」などをサンプルのフィールド

としています。

MySQLとは?
MySQLは、世界でもっとも使われている、オープンソースのデータベースです。WordPressでも採用されており、弊社の記事でもよく紹介されています。

別名

テーブルやフィールドに別名を付け、簡単に管理します。

テーブル名に別名を付ける

SELECT * FROM テーブルA AS 'テーブル別名';

テーブルAは今後、「テーブル別名」として呼び出せます。

フィールド名に別名を付ける

SELECT F1 AS 'フィールド別名' FROM テーブルA;

F1は今後、「フィールド別名」として呼び出せます。

注意点

一度別名を付けたテーブルやフィールドはその階層のクエリに存在する限り、前の名前では呼び出せなくなりますので気をつけましょう!

ジョイン句

複数のテーブル同士を結合します。

今回は5種類のジョイン句を用途・書き方と共に紹介します。

INNER JOIN

SELECT * FROM テーブル A INNER JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名

INNER_JOIN

両方のテーブルに存在するレコードだけを結合します。

LEFT JOIN

SELECT * FROM テーブル A LEFT JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名

LEFT_JOIN

左側のテーブルのすべてのレコードを含み、それに対応する右側のレコードを結合します。

RIGHT JOIN

SELECT * FROM テーブル A RIGHT JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名

RIGHT_JOIN

右側のテーブルのすべてのレコードを含み、それに対応する左側のレコードを結合します。

FULL OUTER JOIN

SELECT * FROM テーブル A FULL OUTER JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名

FULL_OUTER_JOIN

両方のテーブルに存在するすべてのレコードを取得し、対応するレコードがある場合にはそれらを結合します。

CROSS JOIN

SELECT * FROM テーブル A CROSS JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名

できない

両方のテーブルに存在する、すべてのレコードのすべての組み合わせを結合します。

ユニオン句

二つのSQL文の結果を結合する。

UNION

[SELECT文A] UNION [SELECT文B]

同一データを表示させずに結合することができます。

スクリーンショット 2015-12-10 14.26.43

UNION ALL

[SELECT文A] UNION ALL [SELECT文B]

同一データも表示させた状態で結合することができます。

スクリーンショット 2015-12-10 14.32.53

INTERSECT

[SELECT文A] INTERSECT [SELECT文B]

両方の表に存在する結果レコードのみ取得します。

スクリーンショット 2015-12-10 14.04.05

MINUS

[SELECT文A] MINUS [SELECT文B]

両方の表に存在する結果の差異を取得します。

スクリーンショット 2015-12-10 14.04.16

注意点

ユニオンで結合するには、同じフィールド数を持つSQL文同士でないといけませんので注意しましょう。

サブクエリ

SQL文の中にSELECT文を埋め込み、抽出条件などに利用する。

WHERE句に使う

SELECT F1 FROM テーブルA WHERE F2 [比較演算子](SELECT F1 FROM "テーブルB" WHERE "条件");

()内で作ったサブクエリの結果を、比較演算子を用いてWHERE句の条件にした例です。

サブクエリを結合する

SELECT * FROM テーブルA INNER JOIN (SELECT * FROM "テーブルB" WHERE "条件”) as 'サブクエリ名' ON テーブルA.フィールド名 = 'サブクエリ名’.フィールド名 ;

()内で作ったサブクエリの結果をテーブルAとジョインする例です。この場合は、サブクエリに「別名」をつけて必要があります。

さいごに

MySQLは、世界でもっとも使われているデータベースです。
今回紹介したSQLコマンドを色々組み合わせると、

  • ◯年◯月〜◯年◯月までの自社サイトの会員登録が男女別で知りたい
  • シェアがされやすい自社サイトの記事カテゴリのTOP5をSNS別に調べたい
  • 自社サイトが一番閲覧されている時間帯を調べたい

などなど、様々な数値集計ができますので、MySQLデータベースを取り扱う職場ではとても重宝します。

今回の記事で、初心者の方々がSQLコマンドを始めてみるきっかけになれば幸いです! それでは(・▽・)ノ