このクエリは、2つの主要な要件を満たす必要があります。
1.
Employeeテーブルのすべての行を保持する: これは、契約情報を持たない従業員も含めて、すべての従業員を結果に含める必要があることを意味します。この要件を満たすためには、`LEFT JOIN`(または `LEFT OUTER JOIN`)を使用します。`Employee` テーブルを左側に置き、`Contract` テーブルを右側にして結合します。
- `INNER JOIN` は、両方のテーブルに一致する従業員のみを返すため、要件を満たしません。
- `RIGHT JOIN` は、すべての契約情報を保持しますが、契約のない従業員は除外されるため、要件を満たしません。
2.
従業員が2人を超えるグループのみを表示する: これは、`GROUP BY` 句でデータを集計した後に、その結果をフィルタリングする必要があることを意味します。集計関数(この場合は `COUNT()`)の結果に基づいてフィルタリングするには、`HAVING` 句を使用します。
- `WHERE` 句は、`GROUP BY` による集計が行われる【前】に個々の行をフィルタリングするために使用されるため、このシナリオには適していません。
したがって、正しいキーワードは `LEFT JOIN` と `HAVING` です。