MySQLでLEFT(RIGHT)JOINを使って、NULL値であってもデータを取得・表示する方法のメモです。
GROUP BYを使った集計方法を理解しておくと捗ります!
-
【MySQL】GROUP BYで商品ごとの合計を算出する(phpMyAdmin)
MySQLにてGROUP BYを使って、テーブルにある商品ごとの合計を算出します。 補足 前回のMySQLでリレーション ...
続きを見る
LEFT JOINとRIGHT JOINは外部結合
まずは内部結合と外部結合の違いを理解します。
LEFT JOINとRIGHT JOINの記述方法
LEFT JOINとRIGHT JOINの記述方法を紹介します。
LEFT JOINの記述形式
SELECT フィールド名1,フィールド名2,〜フィールド名n
FROM テーブル名1 LEFT JOIN テーブル名2 ON テーブル名1.フィールド名 = テーブル名2.フィールド名
WHERE 抽出条件
次にRIGHT JOIN。
RIGHT JOINの記述形式
SELECT フィールド名1,フィールド名2,〜フィールド名n
FROM テーブル名1 RIGHT JOIN テーブル名2 ON テーブル名1.フィールド名 = テーブル名2.フィールド名
WHERE 抽出条件
LEFTかRIGHTが書き換わっただけで、他のテーブル名などの指定は全て同じなんですよね^^
要約すると、
- LEFT JOINだと左側のテーブル名1の全レコードが表示される
- RIGHT JOINだと右側のテーブル名2の全レコードが表示される
こんな感じですかね。
MySQLでLEFT JOINを使ったテーブル結合例
LEFT JOINを使って、以下2つのテーブルを結合してみます。
A基板テーブル
部品在庫テーブル
ちなみに各テーブルに挿入した値は以下↓
A基板テーブルに挿入した値
INSERT INTO A基板 SET 部品名='チップ抵抗',quantity=1000;
INSERT INTO A基板 SET 部品名='LED',quantity=200;
INSERT INTO A基板 SET 部品名='トランジスタ',quantity=40;
部品在庫テーブルに挿入した値
INSERT INTO 部品在庫 SET 部品名='電解コンデンサ',`parts_id`=1,COUNT=300;
INSERT INTO 部品在庫 SET 部品名='チップ抵抗',`parts_id`=2,COUNT=30000;
INSERT INTO 部品在庫 SET 部品名='トランジスタ',`parts_id`=3,COUNT=100;
INSERT INTO 部品在庫 SET 部品名='レギュレーター',`parts_id`=4,COUNT=50;
INSERT INTO 部品在庫 SET 部品名='LED',`parts_id`=5,COUNT=6000;
INSERT INTO 部品在庫 SET 部品名='スイッチ',`parts_id`=6,COUNT=3000;
INSERT INTO 部品在庫 SET 部品名='コネクタ',`parts_id`=7,COUNT=300;
LEFT JOINのSQL文例
A基板の部品必要数(quantity)に対して、該当する部品の在庫があるのか(COUNT)、フィールド「部品名」を元に調べてみます。
LEFT JOINのSQLは以下を入力して実行↓
SELECT * FROM A基板 LEFT JOIN 部品在庫 ON A基板.部品名=部品在庫.部品名;
SQLの実行結果↓
A基板のテーブルをLEFT JOINしたので、部品在庫テーブルが右側にくっついてますね。
じゃあ、SQLの「LEFT JOIN」の箇所を「RIGHT JOIN」に変更するとどうなるのか。
RIGHT JOINのSQL文例
以下を入力して実行
SELECT * FROM A基板 RIGHT JOIN 部品在庫 ON A基板.部品名=部品在庫.部品名;
RIGHT JOINの実行結果↓
部品在庫テーブルが右側、A基板のテーブルが左側に結合されました^^
まとめ
LEFT JOINとRIGHT JOIN、リレーションより難しくなく、より簡単に他のテーブルの値を参照することができる感じがしました。
MySQLをデータベースに部品在庫の管理をやっていれば、けっこうデータを引っ張ってくるのに使えそうっすね。
-
【MySQL】DISTINCTで重複したデータを除外した結果を取得する方法
MySQLでDISTINCTを使って指定したカラムの重複した行を除外する方法を記してます。 補足 MySQLのLEFT ...
続きを見る
関連記事:【MySQL】GROUP BYで商品ごとの合計を算出する(phpMyAdmin)
関連記事:【MySQL】リレーションを設定する方法(phpMyAdmin)
関連記事:【MySQL】SUM・COUNT・AVGでカラムの値を集計する(phpMyAdmin)