[RDB][SQL] JOINについて

公開日: : DB, SQL , , ,

JOINについて説明します。

まず、以下の2つのテーブルがあります。
簡単なテーブルなので、定義は割愛です。

商品マスタと、売上明細というよくあるパターンです。

PostgreSQL_JOIN_01 PostgreSQL_JOIN_02

●内部結合(inner join)
内部結合は、2つのテーブルのうち、一致する行のみ抽出します。

(例)商品マスタと売上明細を「id」で内部結合するSQL

select
  *
from
  商品マスタ T1
inner join
  売上明細 T2
on
  T1.id = T2.id

(結果)
 id |   name   | price |        date         | id
----+----------+-------+---------------------+----
  1 | お菓子   |   100 | 2014-05-02 22:01:00 |  1
  5 | ドリンク |   150 | 2014-05-05 11:13:00 |  5
  3 | 雑誌     |   500 | 2014-05-13 09:08:00 |  3
  3 | 雑誌     |   500 | 2014-05-13 23:31:00 |  3
  1 | お菓子   |   100 | 2014-05-22 05:01:00 |  1
(5 行)

●外部結合(outer join)
外部結合は、片方のテーブルにしか無いデータも表示します。

殆どの場合、left outer joinを使用することが多いので、左外部結合を例にあげます。
left outer joinの場合は、左側のテーブルは全量出力し、
右側のテーブルは、左側テーブルと結合できたものが表示されます。

(例)売上明細と商品マスタを「id」で左外部結合するSQL

select
  *
from
  商品マスタ T1
left outer join
  売上明細 T2
on
  T1.id = T2.id

(結果)
 id |   name   | price |        date         | id
----+----------+-------+---------------------+----
  1 | お菓子   |   100 | 2014-05-02 22:01:00 |  1
  5 | ドリンク |   150 | 2014-05-05 11:13:00 |  5
  3 | 雑誌     |   500 | 2014-05-13 09:08:00 |  3
  3 | 雑誌     |   500 | 2014-05-13 23:31:00 |  3
  1 | お菓子   |   100 | 2014-05-22 05:01:00 |  1
  2 | 鉛筆     |   120 |                     |
  4 | 消しゴム |    50 |                     |
(7 行)

最後に、実践的な活用として、以下の情報を抽出してみます。
「売上明細の商品毎の総売上を抽出する。」

select
  T1.id
  , T2.name
  , sum(T2.price)
from
  売上明細 T1
inner join
  商品マスタ T2
on
  T1.id = T2.id
group by
  T1.id
  , T2.name

(結果)
 id |   name   | sum
----+----------+------
  1 | お菓子   |  200
  5 | ドリンク |  150
  3 | 雑誌     | 1000
(3 行)

スポンサードリンク

関連記事

no image

[PostgreSQL][SQL] csvファイルのインポート

PostgreSQLでcsvファイルをインポートする際の方法を解説します。 例題として、以下の

記事を読む

no image

[SQL] case when文

select結果を条件で振り分けるSQL 通常はjoinとかwhere句で振り分けたりしますが

記事を読む

no image

[SQLServer] 当日0時や月初0時の取得方法

当日0時や月初0時の取得方法です。 当日0時 DATEADD関数の2番目の引数にDATEDI

記事を読む

no image

[PostgreSQL][SQL] 日付関連

●interval tbl_Aから、tbl_Bの日付で7日前~現在に当てはまるレコードを抽出す

記事を読む

no image

[SQL] 割合を計算するときの定石(割られる数をCASTする)

なんとか率などの割合を計算するときのメモ。 割られるほうの数値を浮動小数点にCASTする 割られ

記事を読む

no image

[SQL] 副問い合わせのin句に指定できるワードの数について

副問い合わせのin句に指定できるワードの数について ●Oracle 1000個が上限のようで

記事を読む

no image

[SQL] primary keyの追加・削除

テーブル作成後にprimary keyを付与する方法です。 ALTER TABLE テーブ

記事を読む

no image

[SQLServer] SQLServerでSplitを実装!

SQLServerでSplitを実装してみます。 最新のSQLServerには組み込み関数があ

記事を読む

no image

[SQL][集計関数] 行数をカウントするcount関数の解説

count関数について説明します。 count関数は、グループ化した単位での件数をカウントしま

記事を読む

no image

[PostgreSQL] よく使う基本コマンド

PostgreSQLでpsqlのコマンド入力をする場合の一般的SQL以外のコマンドを列挙します。

記事を読む

スポンサードリンク

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">

スポンサードリンク

no image
[SQLServer] SQLServerでSplitを実装!

SQLServerでSplitを実装してみます。 最新のSQLS

no image
[SQLServer] 当日0時や月初0時の取得方法

当日0時や月初0時の取得方法です。 当日0時 DATEADD関

no image
[PostgreSQL] csvでSQL結果を出力する方法(psqlコマンド)

SQLエディタ、接続ツールなどを使うと簡単に行える CSVファイ

no image
[bash] ファイルの中身を1行ずつ処理するループ処理(while文)

ファイルの中身を1行ずつ処理したい場合の処理です。 ファイル名を

no image
[bash] grep・egrepコマンド

基本パターン ファイル中の文字列を検索 $ grep '[検索

→もっと見る

  • 2017年5月
    « 3月    
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
PAGE TOP ↑