自然結合
テーブルが結合されるときは常に、複数のテーブルに少なくとも 1 つの列 (結合される列) が存在する必要があります。標準結合 (前の章で紹介した内部結合) は、同じ列が複数回出現する場合でも、すべてのデータを返します。自然結合では複数の出現が除外されるため、各列は 1 回だけ返されます。
この作業を完了するにはどうすればよいですか?答えは、システムが仕事をするのではなく、自分でやるということです。自然結合は、それらの一意の列のみを選択できる結合です。これは通常、1 つのテーブルにはワイルドカード ( SELECT * ) を使用し、他のすべてのテーブルの列には明示的なサブセットを使用して行われます。以下に例を示します:
入力:
select c.*,o.order_num,o.order_date,oi.prod_id,oi.quantity,oi.item_price from customers as c,orders as o,orderitems as oi where c.cust_id = o,cust_id and oi.order_num = o.order_num and prod_id = 'FB';
分析: この例では、ワイルドカードは最初のテーブルにのみ使用されます。他のすべての列は明示的にリストされるため、重複する列は取得されません。
実際、これまでに作成した内部接続はすべて自然な接続であり、自然な接続ではない内部接続を使用することはおそらくないでしょう。
外部結合
多くの結合は、あるテーブルの行を別のテーブルの行に関連付けます。ただし、関連する行を持たない行を含める必要がある場合があります。たとえば、次のタスクを実行するには結合を使用する必要がある場合があります:
1. これまで注文していない顧客を含む、各顧客が注文した数をカウントします。
2. すべての製品と注文数量をリストします。注文した商品は含まれません
3. これまで注文していない顧客も含めて、平均売上規模を計算します。
上記の例では、結合には関連テーブル内に関連行を持たない行が含まれています。このタイプの結合は外部結合と呼ばれます。
次の SELECT ステートメントは、単純な内部結合を提供します。すべての顧客とその注文を取得します。
入力:
select customers.cust_id,orders.order_num from customers inner join orders on customers.cust_id = orders.cust_id;
出力:
分析: 前の章で見た内部結合と同様に、この SELECT ステートメントはキーワードを使用します。 OUTER JOIN を使用して、(WHERE 句で指定するのではなく) 結合のタイプを指定します。ただし、2 つのテーブルの行を関連付ける内部結合とは異なり、外部結合には関連する行を持たない行も含まれます。 OUTER JOIN 構文を使用する場合は、RIGHT または LEFT キーワードを使用して、そのすべての行を含むテーブルを指定する必要があります (RIGHT は OUTER JOIN の右側のテーブルを指し、LEFT は OUTER JOIN の左側のテーブルを指します)外部結合)。上記の例では、LEFT OUTER JOIN を使用して、FROM 句の左側のテーブル (customers テーブル) からすべての行を選択します。右側のテーブルからすべての行を選択するには、次の例に示すように RIGHT OUTER JOIN を使用する必要があります:
入力:
select customers.cust_id,orders.order_num from customers right outer join orders on orders.cust_id = customers.cust_id;
No *= 演算子: MySQL は簡略文字 *= と の使用をサポートしていません。 =*, this どちらの演算子も他の DBMS でよく使用されます。
外部結合の種類: 外部結合には、左外部結合と右外部結合という 2 つの基本形式があります。それらの唯一の違いは、関連付けられたテーブルの順序です。つまり、FROM 句または WHERE 句内のテーブルの順序を逆にすることで、左外部結合を右外部結合に変換できます。したがって、どちらのタイプの外部結合も互換的に使用でき、どちらを使用するかは単に便宜上の問題です。
以上がmysql の高度な結合 - 自然結合、外部結合の使用例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。