Menu
CoddyTech

基本的な結合 その1

CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 43/72。

これまでは単一のテーブルに関する問題に取り組んできました。ここからは、複数のテーブルをどのように扱うかを見ていきます。

次のテーブルがあるとします。

コース

course_idlecturer_id
11
21
32

講師

lecturer_id名前
1Jhonas
2Malidos

各コースについて、対応する講師の名前を表示する課題です。

これを実現する方法は2つあります。どちらの方法でも、一方のテーブルの各行をもう一方のテーブルの行と照合します。満たす必要のある条件を確認し、その条件が満たされたら、2つの行を1つに結合します。どちらの方法でも、求める結果は次のとおりです。

course_idlecturer_name
1Jhonas
2Jhonas
3Malidos

選択肢 1:

SELECT courses.course_id, lecturers.name AS lecturer_name
FROM courses, lecturers
WHERE courses.lecturer_id = lecturers.lecturer_id

ここでは、FROMキーワードに2つのテーブルを記述し、WHERE句では両方のレコードのlecturer_idが同じであることを求めます。SELECT句では、データベースがどこから列を取得すればよいか分かるように、table.columnと記述します。

選択肢 2:

SELECT courses.course_id, lecturers.name AS lecturer_name
FROM courses
JOIN lecturers ON courses.lecturer_id = lecturers.lecturer_id

WHEREの代わりに、JOIN table ON conditionを使います。

どちらの選択肢も同じ結果になり、内部結合と呼ばれます。条件を満たす行のペアだけが結合されます。

challenge icon

チャレンジ

簡単

利用可能なテーブルと列:

  • grades: course_id, student_id, grade
  • students: id, name

student_name、course_id、student_id、gradeを取得するクエリを作成し、1つのテーブルにまとめてください。結果をgradeの昇順で並べ替えてください。

自分で試してみよう

-- 課題で求められているエイリアスを使って、指定された列を列挙する
SELECT ____
FROM students, grades
-- 両方のテーブルが同じ人物を表す行の組だけを残す
WHERE ____
ORDER BY grade
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド