読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

内部結合と外部結合

内部結合と外部結合について。
例は以下のテーブルに対してSQLを発行した結果です。

mysql> select * from kittens;
+----+-------+---------+
| id | name  | type_id |
+----+-------+---------+
|  1 | mii   |       1 |
|  2 | tora  |       2 |
|  3 | shiro |       1 |
|  4 | kuro  |       4 |
+----+-------+---------+
4 rows in set (0.02 sec)

mysql> select * from types;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | mike          |
|  2 | scottish-fold |
|  3 | egyptian mau  |
+----+---------------+
3 rows in set (0.01 sec)

内部結合(INNER JOIN)

  1. 左(kittens)のテーブルの一覧を取得し、
  2. 右(types)テーブルから、ONで指定した条件にマッチするレコードを探してマージします。
  3. マッチするレコードが複数あった場合、マージしたものをそれぞれ別のレコードにします。
  4. 左(kittens)のテーブル一覧のうち、条件にマッチするレコードがないものは削除されます。

例:

mysql> select * from kittens join types on kittens.type_id = types.id;
+----+-------+---------+----+---------------+
| id | name  | type_id | id | name          |
+----+-------+---------+----+---------------+
|  1 | mii   |       1 |  1 | mike          |
|  3 | shiro |       1 |  1 | mike          |
|  2 | tora  |       2 |  2 | scottish-fold |
+----+-------+---------+----+---------------+
3 rows in set (0.01 sec)

外部結合(LEFT OUTER JOIN)

  1. 左(kittens)のテーブルの一覧を取得し、
  2. 右(types)テーブルから、ONで指定した条件にマッチするレコードを探してマージします。
  3. マッチするレコードが複数あった場合、マージしたものをそれぞれ別のレコードにします。
  4. 左(kittens)のテーブルの一覧のうち、条件にマッチするレコードがないものの値はNULLになります。レコードは削除されません。

例:

mysql> select * from kittens left join types on kittens.type_id = types.id;
+----+-------+---------+------+---------------+
| id | name  | type_id | id   | name          |
+----+-------+---------+------+---------------+
|  1 | mii   |       1 |    1 | mike          |
|  2 | tora  |       2 |    2 | scottish-fold |
|  3 | shiro |       1 |    1 | mike          |
|  4 | kuro  |       4 | NULL | NULL          |
+----+-------+---------+------+---------------+
4 rows in set (0.01 sec)

外部結合(RIGHT OUTER JOIN)

右側のテーブルを軸にして外部結合します。

  1. 右(types)のテーブルの一覧を取得し、
  2. 左(kittens)テーブルから、ONで指定した条件にマッチするレコードを探してマージします。
  3. マッチするレコードが複数あった場合、マージしたものをそれぞれ別のレコードにします。
  4. 右(types)のテーブルの一覧のうち、条件にマッチするレコードがないものの値はNULLになります。レコードは削除されません。

例:

mysql> select * from kittens right join types on kittens.type_id = types.id;
+------+-------+---------+----+---------------+
| id   | name  | type_id | id | name          |
+------+-------+---------+----+---------------+
|    1 | mii   |       1 |  1 | mike          |
|    3 | shiro |       1 |  1 | mike          |
|    2 | tora  |       2 |  2 | scottish-fold |
| NULL | NULL  |    NULL |  3 | egyptian mau  |
+------+-------+---------+----+---------------+

完全結合(FULL JOIN)

MySQLでは未対応のようで、試せていません..orz。外部結合を右左両方で行うようです。


参考: