0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Machiken’sAdvent Calendar 2024

Day 8

データベース基礎理論の結合演算

Last updated at Posted at 2024-12-08

はじめに

今日は、リレーショナルデータベースでよく使われる「結合演算」についてまとめます。
結合演算には、θ結合、等結合、自然結合、外部結合など様々な種類があります。基本的な考え方としては、まず2つの関係(テーブル)の直積を取り、その中から条件を満たすタプル(行)を選択し、不要な列を射影していくことで目的の結果を得ます。

本文

ここでは、サンプルとして以下の2つのテーブルRとSを用います。

Rテーブル

A B
1 X
2 Y
3 Z

Sテーブル

A C
2 Q
3 R
4 S

θ結合

θ結合は、直積から2つの属性に対し、<, >, <=, >=, =, <>(等しくない)などの比較演算子を用いて選択したタプル集合を得る結合です。R.A > S.A を条件としたθ結合の場合、RとSの直積からR.A > S.Aを満たす行のみ取り出します。

SQL

SELECT * FROM R INNER JOIN S ON R.A > S.A;

R×Sは以下のような直積になります(Rが3行、Sが3行なので計9行)

R.A R.B S.A S.C
1 X 2 Q
1 X 3 R
1 X 4 S
2 Y 2 Q
2 Y 3 R
2 Y 4 S
3 Z 2 Q
3 Z 3 R
3 Z 4 S

ここからR.A > S.Aを満たす行を抽出すると、3 > 2 が真なので (3,Z,2,Q) のみが選ばれます。

結果

R.A R.B S.A S.C
3 Z 2 Q

等結合 (Equi-join)

θ結合で比較演算子が"="の場合が等結合です。

SQL

SELECT * FROM R INNER JOIN S ON R.A = S.A;

結果
R.A = S.Aを満たすのはA=2とA=3のペア

R.A R.B S.A S.C
2 Y 2 Q
3 Z 3 R

自然結合 (Natural join)

自然結合は等結合から、2つの関係の共通属性を1つ除いて射影演算を行ったものです。
R.AとS.Aが等しい行を結合し、A列を1つにまとめます。

SQL

SELECT * FROM R, S ON R.A  S.A
-- or
SELECT * FROM R NATURAL JOIN S; -- 一部のDBでNATURAL JOINが使用可能

結果
等結合結果から共通属性Aを1つにまとめる

A B C
2 Y Q
3 Z R

外部結合(Outer join)

内部結合(INNER JOIN)は対応する行が両方に存在する場合のみ取り出しますが、外部結合(OUTER JOIN)は、一方のテーブルに該当行がなくてもその側の行は残し、相手側に値がなければNULLを補います。

左外部結合

左外部結合では、左側(FROM句で左に書いた)のテーブルRは全行保持し、Sに一致がなければNULLを補います。

SQL

SELECT R.A, R.B, S.C FROM R LEFT OUTER JOIN S ON R.A = S.A;

結果
RにA=1があるがSにA=1はないため、その行はNULLを補います。

A B C
1 X NULL
2 Y Q
3 Z R

右外部結合

右外部結合は右側のテーブルSを基準に全行保持し、Rで一致しない行にはNULLを補います。

SQL

SELECT R.A, R.B, S.C FROM R RIGHT OUTER JOIN S ON R.A = S.A;

結果
SにA=4があるがRにA=4はないため、S側は保持してR側にNULLを補います。

A B C
2 Y Q
3 Z R
NULL NULL S

完全外部結合

共通属性に関し、どちらかの列に存在する行を全て取り出す結合です。

SQL

SELECT R.A, R.B, S.C FROM R FULL OUTER JOIN S ON R.A = S.A;

結果

A B C
1 X NULL
2 Y Q
3 Z R
NULL NULL S

まとめ

結合演算は、複数の関係を関連付け、必要な情報を1つの結果セットとして取得するための基本手法です。さまざまなニーズに応じて使い分けることができます。明日はデータベース設計についてまとめます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?