ホームページ >データベース >mysql チュートリアル >SQL の Has-Many-Through 関係を使用して複数のクラブに所属する学生を見つけるにはどうすればよいですか?
このガイドでは、SQL の has-many-through 関係を使用して、特定のクラブに所属する生徒を取得する方法を説明します。 student
、club
、student_club
(結合テーブル) の 3 つのテーブルがあると仮定します。目標は、サッカー部 (ID 30) と野球部 (ID 50) の両方のメンバーである生徒を見つけることです。
このソリューションでは、簡潔で効率的な SQL クエリを採用しています。
<code class="language-sql">SELECT DISTINCT s.id, s.name FROM student s JOIN student_club sc ON s.id = sc.student_id WHERE sc.club_id = 30 AND s.id IN (SELECT student_id FROM student_club WHERE club_id = 50);</code>
このクエリは、最適なパフォーマンスを得るためにサブクエリを利用しています。細かく見てみましょう:
JOIN
句: student
テーブルと student_club
テーブルは、student_id
を使用して結合され、学生をクラブのメンバーシップにリンクします。
WHERE
句: この句は結果をフィルタリングします。 最初の条件 (sc.club_id = 30
) は、サッカー クラブの生徒のみを考慮することを保証します。 2 番目の条件 (s.id IN (...)
) は、サブクエリを使用して結果をさらに絞り込みます。これには、野球クラブ (club_id = 50) の student_club
テーブルにも存在する ID を持つ学生のみが含まれます。
このアプローチでは、不必要な複雑さを回避し、データベース インデックス (student_id
および club_id
列で使用可能な場合) を効率的に利用して、大規模なデータセットであっても、目的の結果を迅速に取得します。 DISTINCT
キーワードにより、student_club
テーブルに複数のエントリがある場合でも、各学生が 1 回だけリストされるようになります。
以上がSQL の Has-Many-Through 関係を使用して複数のクラブに所属する学生を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。