サーチ…


前書き

1対多の考え方(1:M)は、行同士の結合、特に、ある表の単一の行が別の表の多数の行に対応する場合に関係します。

1:Mは一方向です。つまり、1:Mの関係にクエリを実行するときはいつでも、 '1'行を使って別のテーブルの 'many'行を選択できますが、 1つ以上の「1」行を選択します。

備考

ほとんどの場合、1:Mの関係で作業するには、 主キー外部キーを理解する必要があります。

主キーは、その列の単一の行が単一のエンティティを表す表の列です。または、主キー列の値を選択すると、結果的に1つの行になります。上記の例を使用すると、EMP_IDは1人の従業員を表します。単一のEMP_IDを照会すると、対応する従業員を表す単一の行が表示されます。

外部キーは、別のテーブルの主キーに対応するテーブル内の列です。上の例から、EMPLOYEES表のMGR_IDは外部キーです。一般に2つのテーブルを結合するには、あるテーブルの主キーと別のテーブルの外部キーに基づいて結合します。

企業表の例

マネージャであるすべての従業員が1人以上の従業員を管理し、すべての従業員が1人の管理者しか持たない会社を考えてみましょう。

これにより、2つのテーブルが作成されます。

従業員

EMP_ID ファーストネーム苗字 MGR_ID
E01 ジョニーアップルシード M02
E02 エリンマックモア M01
E03 コルビー書類作成 M03
E04 ロンソンスワン M01

マネージャー

MGR_ID ファーストネーム苗字
M01 大声でマックイーン
M02 ボッシーパンツ
M03 バレルジョーンズ

単一のマネージャによって管理される従業員を取得する

SELECT e.emp_id , e.first_name , e.last_name FROM employees e INNER JOIN managers m ON m.mgr_id = e.mgr_id WHERE m.mgr_id = 'M01' ;

結果:

EMP_ID ファーストネーム苗字
E02 エリンマックモア
E04 ロンソンスワン

最終的に、私たちが照会するマネージャーごとに、1人以上の従業員が戻ってきます。

1人の従業員のマネージャを取得する

この例を見るときは、上の例の表を参照してください。

SELECT m.mgr_id , m.first_name , m.last_name FROM managers m INNER JOIN employees e ON e.mgr_id = m.mgr_id WHERE e.emp_id = 'E03' ;

MGR_ID ファーストネーム苗字
M03 バレルジョーンズ

これは上記の例の逆ですから、私たちが問い合わせるすべての従業員に対して、対応するマネージャーは1つしか表示されません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow