こんにちは、エンジニアのやまとです。
こちらは、SQLコマンドの基礎を身につけるための初心者入門編シリーズ!
前回の記事では、MySQLのコマンドで単一テーブルから数値集計する方法の基本をご紹介しました。
【初心者入門編】MySQLのコマンドで数値集計する方法をマスターしよう vol.1
そして今回は、
- 書いたコマンドを見やすく管理できる「別名」
- 複数テーブルを用いた集計の「ジョイン句」「ユニオン句」
- セレクト文の結果を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.フィールド名
両方のテーブルに存在するレコードだけを結合します。
LEFT JOIN
SELECT * FROM テーブル A LEFT JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名
左側のテーブルのすべてのレコードを含み、それに対応する右側のレコードを結合します。
RIGHT JOIN
SELECT * FROM テーブル A RIGHT JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名
右側のテーブルのすべてのレコードを含み、それに対応する左側のレコードを結合します。
FULL OUTER JOIN
SELECT * FROM テーブル A FULL OUTER JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名
両方のテーブルに存在するすべてのレコードを取得し、対応するレコードがある場合にはそれらを結合します。
CROSS JOIN
SELECT * FROM テーブル A CROSS JOIN テーブルB ON テーブルA.フィールド名 = テーブルB.フィールド名
両方のテーブルに存在する、すべてのレコードのすべての組み合わせを結合します。
ユニオン句
二つのSQL文の結果を結合する。
UNION
[SELECT文A] UNION [SELECT文B]
同一データを表示させずに結合することができます。
UNION ALL
[SELECT文A] UNION ALL [SELECT文B]
同一データも表示させた状態で結合することができます。
INTERSECT
[SELECT文A] INTERSECT [SELECT文B]
両方の表に存在する結果レコードのみ取得します。
MINUS
[SELECT文A] MINUS [SELECT文B]
両方の表に存在する結果の差異を取得します。
注意点
ユニオンで結合するには、同じフィールド数を持つ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コマンドを始めてみるきっかけになれば幸いです! それでは(・▽・)ノ
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。