MySQL

 

MySQLで内部結合と外部結合の記述の簡素化

MySQLのSQLをより短く書きましょう!MySQLは互換性等の観点から複数の書き方が可能です。今回はcreateについて。実はcreateとselectを同時に行う事ができます。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

以下のテーブル、データを対象に検証します。

mysql> create table t1(i1 int, i2 int, v1 varchar(10), primary key(i1, i2)) engine=innodb charset=utf8mb4;
Query OK, 0 rows affected (0.01 sec)

mysql> create table t2 like t1;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 values (1, 1, 'a11'), (1, 2, 'a12'), (1, 3, 'a13');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t2 values (1, 1, 'b11'), (1, 2, 'b12'), (1, 4, 'b13');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

長いバージョン

mysql> select a.i1, a.i2, a.v1, b.i1, b.i2, b.v1 from t1 a inner join t2 b on a.i1 = b.i1 and a.i2 = b.i2;
+----+----+------+----+----+------+
| i1 | i2 | v1   | i1 | i2 | v1   |
+----+----+------+----+----+------+
|  1 |  1 | a11  |  1 |  1 | b11  |
|  1 |  2 | a12  |  1 |  2 | b12  |
+----+----+------+----+----+------+
2 rows in set (0.01 sec)

短いバージョン

mysql> select a.i1, a.i2, a.v1, b.i1, b.i2, b.v1 from t1 a inner join t2 b using(i1, i2);
+----+----+------+----+----+------+
| i1 | i2 | v1   | i1 | i2 | v1   |
+----+----+------+----+----+------+
|  1 |  1 | a11  |  1 |  1 | b11  |
|  1 |  2 | a12  |  1 |  2 | b12  |
+----+----+------+----+----+------+
2 rows in set (0.00 sec)

ほら、全く同じ結果になりましたね!

usingは、join元とjoin先に同一カラム名があれば、使用する事ができます。

カラム名が同一でフィールド長が異なっていても問題無く結合できます。

内部結合・外部結合のどちらでも使用可能です。

treeおすすめの書籍です!
【送料無料】実践ハイパフォ-マンスMySQL第2版

【送料無料】実践ハイパフォ-マンスMySQL第2版
価格:4,830円(税込、送料別)

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド
価格:3,465円(税込、送料別)

【送料無料】基礎からのMySQL改訂版

【送料無料】基礎からのMySQL改訂版
価格:3,129円(税込、送料別)

◯ 広告