MySQLのONとUSINGの違いを解説!JOIN句の使い分け方法を具体例で学ぶ
MySQLにおけるONとUSINGの基本的な違い
MySQLでテーブルを結合(JOIN)する際、一般的に使用されるのはONです。JOIN句では、結合条件となるカラムの組み合わせをONで指定します。一方、USINGは、結合する両方のテーブルが完全に同じ名前のカラムを共有している場合に便利な構文です。
本記事では、実際にテーブルを作成しながら、ONとUSINGそれぞれの使い方と実行結果を詳しく見ていきましょう。
ONを使った例
1つ目のテーブルを作成する
まず、外部キーを持つテーブルを作成します。
mysql> CREATE table ForeignTableDemo
-> (
-> Id int,
-> Name varchar(100),
-> FK int
-> );
Query OK, 0 rows affected (0.47 sec)
2つ目のテーブルを作成する
続いて、参照先となる主キーを持つテーブルを作成します。
mysql> CREATE table PrimaryTableDemo
-> (
-> FK int,
-> Address varchar(100),
-> primary key(FK)
-> );
Query OK, 0 rows affected (0.47 sec)
次に、外部キー制約を追加します。
mysql> ALTER table ForeignTableDemo add constraint FKConst foreign key(FK) references PrimaryTableDemo(FK);
Query OK, 0 rows affected (1.54 sec)
Records: 0 Duplicates: 0 Warnings: 0
2つ目のテーブルにレコードを挿入する
mysql> INSERT into PrimaryTableDemo values(1,'US');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT into PrimaryTableDemo values(2,'UK');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT into PrimaryTableDemo values(3,'Unknown');
Query OK, 1 row affected (0.08 sec)
すべてのレコードを表示してみましょう。
mysql> SELECT * from PrimaryTableDemo;
実行結果は以下の通りです。
+----+---------+
| FK | Address |
+----+---------+
| 1 | US |
| 2 | UK |
| 3 | Unknown |
+----+---------+
3 rows in set (0.00 sec)
1つ目のテーブルにレコードを挿入する
mysql> INSERT into ForeignTableDemo values (1,'John',1);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT into ForeignTableDemo values (2,'Bob',2);
Query OK, 1 row affected (0.27 sec)
1つ目のテーブルの全レコードを表示します。
mysql> SELECT * from ForeignTableDemo;
実行結果は以下の通りです。
+------+------+------+
| Id | Name | FK |
+------+------+------+
| 1 | John | 1 |
| 2 | Bob | 2 |
+------+------+------+
2 rows in set (0.00 sec)
ONを使用した結合クエリ
マッチする行のみを表示する内部結合のクエリは以下の通りです。ここではONを使用しています。
mysql> SELECT ForeignTableDemo.Id, ForeignTableDemo.Name, PrimaryTableDemo.Address
-> from ForeignTableDemo
-> join PrimaryTableDemo
-> on ForeignTableDemo.FK = PrimaryTableDemo.FK;
実行結果は以下の通りです。
+------+------+---------+
| Id | Name | Address |
+------+------+---------+
| 1 | John | US |
| 2 | Bob | UK |
+------+------+---------+
2 rows in set (0.14 sec)
USINGを使った例
以下はMySQLにおけるUSINGの構文例です。FK = 1 のレコードを表示します。
mysql> select *from ForeignTableDemo join PrimaryTableDemo using(FK) where FK=1;
実行結果は以下の通りです。
+------+------+------+---------+
| FK | Id | Name | Address |
+------+------+------+---------+
| 1 | 1 | John | US |
+------+------+------+---------+
1 row in set (0.09 sec)
まとめ
ONとUSINGの使い分けのポイントを整理すると以下の通りです。
- ON:カラム名が異なる場合でも使用できる、最も汎用的な結合条件の指定方法
- USING:両テーブルでカラム名が完全に一致している場合に使える簡潔な構文
また、USINGを使用すると、結果セットでは結合キーのカラムが1つだけ表示される点にも注目してください。ONで結合した場合は、両テーブルのカラムがそれぞれ別々に表示されるため、用途に応じて使い分けることが大切です。
-
MySQLデータベースの作成と使い方を徹底解説!初心者向け基本ステップ
MySQLデータベース操作の基本ステップMySQLのインストールが完了し、SQL文の入力方法を理解したら、いよいよデータベースへアクセスできるようになります。ここでは、データベース内のテーブルからデータを取得するまでの一連の手順を順番に見ていきましょう。サーバーへの接続データベースの作成テーブルの作成テーブルへのデータ投入テーブルからのデータ取得既存のデータベースを確認する新しいデータベースを作成する前に、まず環境にすでに存在するデータベースを把握しておくことが重要です。以下のクエリを実行することで、現在利用可能なデータベースの一覧を確認できます。クエリmysql> SHOW DATAB
-
MySQLのユーザー定義変数とは?基本ルールとSET文による使い方を解説
本記事では、MySQLにおけるユーザー定義変数(ユーザー変数)の概要と、その具体的な活用方法について解説します。まず、押さえておくべき基本的なルールを見ていきましょう。 ユーザー定義変数の基本ルール ユーザー変数は @var_name の形式で記述します。「var_name」には変数名が入り、英数字、ドット(.)、アンダースコア(_)、ドル記号($)を使用できます。 文字列または識別子として引用符で囲んだ場合は、上記以外の文字も変数名に含めることが可能です。 ユーザー定義変数はセッションごとに固有のものです。 あるクライアントで定義したユーザー変数を、他のクライアントから参照したり利用したり