タイガーラック クリエイティブブログ
2024
November
22

USINGを使ったJOINを試してみる

postgresqlでJOINについて調べてる時に知らない方法があって、ちょっと便利だなーと思ったので紹介します。
そのやり方はタイトルにもある通り、USINGを使ったJOIN。

よく見るJOINは ON 句で結合するカラムを結合する側、される側で指定してますが、
USING 句 は結合するカラム名を指定するだけでテーブル結合が可能です。
ただし、結合するカラム名が両方のテーブルに存在する必要があります。

テーブル

売上id売上日売上個数
A0012024/12/0310
A0022024/11/3035
A0032024/11/1150
↑売上テーブル

売上id商品id商品名個数
A001ringoりんご10
A002mikanみかん15
A002budoぶどう20
A003ringoりんご50
↑売上明細テーブル

商品id商品名原価
ringoりんご100
mikanみかん300
budoぶどう500
↑商品マスタテーブル

--例
SELECT *
FROM 売上テーブル
INNER JOIN 売上明細テーブル
USING (売上id);  -- USING の()は必須
売上id売上日売上合計商品id商品名個数
A0012024/12/0310ringoりんご10
A0022024/11/3035mikanみかん15
A0022024/11/3035budoぶどう20
A0032024/11/1150ringoりんご50
↑結果 結合条件が片方しか表示されないのでちょっと見やすくなってますね。

複数結合する場合

SELECT *
FROM 売上テーブル
INNER JOIN 売上明細テーブル
USING (売上id)
INNER JOIN 商品マスタテーブル
USING (商品id,商品名);
売上id売上日売上合計商品id商品名個数原価
A0012024/12/0310ringoりんご10100
A0022024/11/3035mikanみかん15300
A0022024/11/3035budoぶどう20500
A0032024/11/1150ringoりんご50100
↑結果 結合条件に入れたのは複数あっても表示されないですね。

DELETE文での使い方

DELETE 
FROM 売上テーブル a
USING 売上明細テーブル b
WHERE a.売上id = b.売上id 
  AND b.商品id = 'ぶどう'

結果
売上テーブルの売上id「A002」を削除

DELETE文ではFROM句でJOINを使えないのでUSINGを使って他のテーブルを参照して削除ができるようです。
結構便利そう。

注意事項

結合条件はカラム名が一致ということで出来るタイミングは限られてくるかもしれない。
出力結果は*を使った時だけなのでめっちゃ使う機会が多いっていう訳ではなさそう。

まとめ

結合条件はカラム名が一致ということで出来るタイミングは限られてくるかもしれないですが、
両方のテーブル名 + カラム名をすっきり書けるっていうのは楽ですね。

DELETE文もサブクエリを使うよりかは楽に使えそうで割と便利に使えそうな感じですね!!

このカテゴリの最新記事

関連記事

SHOP LIST

タイガーラック株式会社

〒577-0056
大阪府東大阪市長堂1-3-14 TOKUYASU Bld.