JOIN 演算子の出現の前提条件
テーブル内のデータの量が増えると、重複した値がテーブル内に現れることが多くなります。たとえば、製品テーブルにはブランド名が含まれています。それは時々繰り返されます。たとえば、次のようなデータを含む個別のブランド テーブルを作成すると便利です。
- id - ブランドID;
- 名前 - ブランド名。
- company_owner - ブランドの会社所有者の名前。
- company_contacts - ブランド所有者の会社の連絡先。
次に、すべてのアドレスを入力できるアドレスのテーブルを作成します。
- id – ID アドレス;
- 国;
- 領域;
- 街;
- 街;
- 家;
- ジップ。
さらに、このテーブルには、ブランド所有会社の住所だけでなく、顧客や従業員の住所も格納することが可能です。そして、このアプローチは単にデータ量 (テーブル内の行数) の増加の結果です。これにより、テーブル内のデータを操作し、その整合性を維持することが容易になります。
従業員が 5 人の場合は、職業欄に職業を入力するだけです。会社に 5,000 人の従業員がいる場合、x 人の職業とその責任のリストを記載した表が必要になります。
ちなみに、Java 言語にも同様のものがあります。メソッド内に大量のコードがある場合、それを複数のメソッドに分割することが望まれます。クラス内に多数のメソッドがある場合は、それを複数のクラスに分割したいと思います。
大規模なデータベースには何千ものテーブルがあるのはこのためです。また、ほとんどすべてのクエリは複数のテーブルに対して同時に実行されます。そして、それぞれに 1,000 件のレコードがある 3 つのテーブルの行のデカルト積は、すでに 10 億行になります。
しかし、WHERE を使用して 10 億行をフィルタリングするだけでも数時間かかることがあります。そこで、SQL 言語の作成者は、JOIN 演算子という解決策を提案しました。
JOIN 演算子の概要
JOIN 演算子は、テーブルのすべての行のデカルト積は必要ではなく、ID (または別の方法) を使用して相互に参照する異なるテーブルの行をスマートに結合する必要があることを SQL サーバーに明示的に伝えるために使用されます。 。サーバーには、JOIN 演算子を使用してテーブル結合を処理するための別のアルゴリズムがあり、そのような操作をより高速に実行できます。JOIN 演算子の一般的な形式は次のとおりです。
table 1 JOIN table 2 ON condition
ここでは、テーブルtable1とtable2 を1 つのテーブルに結合し、その条件を結合基準として使用する必要があると述べています。
古い例を見てみましょう。
SELECT * FROM employee, task WHERE emploee.id = task.emploee_id
そして、JOIN 演算子を使用してこれを書き換えます。
SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id
この場合、どちらのクエリでも同じ結果が得られますが、これは単にクエリが非常に単純であるためです。将来的には、WHERE を使用して行フィルターを正確に構築できるようになり、ON の後に指定したフィルターを使用してテーブルをリンクするための複雑なスクリプトを作成できるようになります。JOIN ステートメントを使用する場合は、エイリアス (テーブル エイリアス) を使用することもできます。例:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id