MySQL
1対多数
サーチ…
前書き
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つしか表示されません。