2024
November
22
USINGを使ったJOINを試してみる
postgresqlでJOINについて調べてる時に知らない方法があって、ちょっと便利だなーと思ったので紹介します。
そのやり方はタイトルにもある通り、USINGを使ったJOIN。
よく見るJOINは ON 句で結合するカラムを結合する側、される側で指定してますが、
USING 句 は結合するカラム名を指定するだけでテーブル結合が可能です。
ただし、結合するカラム名が両方のテーブルに存在する必要があります。
テーブル
売上id | 売上日 | 売上個数 |
A001 | 2024/12/03 | 10 |
A002 | 2024/11/30 | 35 |
A003 | 2024/11/11 | 50 |
売上id | 商品id | 商品名 | 個数 |
A001 | ringo | りんご | 10 |
A002 | mikan | みかん | 15 |
A002 | budo | ぶどう | 20 |
A003 | ringo | りんご | 50 |
商品id | 商品名 | 原価 |
ringo | りんご | 100 |
mikan | みかん | 300 |
budo | ぶどう | 500 |
--例
SELECT *
FROM 売上テーブル
INNER JOIN 売上明細テーブル
USING (売上id); -- USING の()は必須
売上id | 売上日 | 売上合計 | 商品id | 商品名 | 個数 |
A001 | 2024/12/03 | 10 | ringo | りんご | 10 |
A002 | 2024/11/30 | 35 | mikan | みかん | 15 |
A002 | 2024/11/30 | 35 | budo | ぶどう | 20 |
A003 | 2024/11/11 | 50 | ringo | りんご | 50 |
複数結合する場合
SELECT *
FROM 売上テーブル
INNER JOIN 売上明細テーブル
USING (売上id)
INNER JOIN 商品マスタテーブル
USING (商品id,商品名);
売上id | 売上日 | 売上合計 | 商品id | 商品名 | 個数 | 原価 |
A001 | 2024/12/03 | 10 | ringo | りんご | 10 | 100 |
A002 | 2024/11/30 | 35 | mikan | みかん | 15 | 300 |
A002 | 2024/11/30 | 35 | budo | ぶどう | 20 | 500 |
A003 | 2024/11/11 | 50 | ringo | りんご | 50 | 100 |
DELETE文での使い方
DELETE
FROM 売上テーブル a
USING 売上明細テーブル b
WHERE a.売上id = b.売上id
AND b.商品id = 'ぶどう'
結果
売上テーブルの売上id「A002」を削除
DELETE文ではFROM句でJOINを使えないのでUSINGを使って他のテーブルを参照して削除ができるようです。
結構便利そう。
注意事項
結合条件はカラム名が一致ということで出来るタイミングは限られてくるかもしれない。
出力結果は*を使った時だけなのでめっちゃ使う機会が多いっていう訳ではなさそう。
まとめ
結合条件はカラム名が一致ということで出来るタイミングは限られてくるかもしれないですが、
両方のテーブル名 + カラム名をすっきり書けるっていうのは楽ですね。
DELETE文もサブクエリを使うよりかは楽に使えそうで割と便利に使えそうな感じですね!!
このカテゴリの最新記事
2023.09.11
【Certbot】CentOS7+Apache2.4にLet’s Encryptで証明書発行
2024.02.15
【PostgreSQL】レプリケーション設定方法
2024.12.19
名刺を画像から読み取り、ChatGPTで解析するシステムの構築 その2 -AWSとGCPの使い方も紹介
2024.11.29
CentOS7のサポートが終了してyum updateできなくなった問題を解決できたって話