基本的な結合 その1
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 43/72。
これまでは、単一のテーブルの問題に取り組んできました。ここでは、複数のテーブルを扱う方法を見ていきます。
次のテーブルがあるとします:
コース
| course_id | lecturer_id |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
講師
| lecturer_id | 名前 |
|---|---|
| 1 | Jhonas |
| 2 | Malidos |
各コースについて、対応する講師の名前を提示することが課題です。
これを実現する方法は2つあります。どちらの方法でも、一方のテーブルの各行をもう一方のテーブルの行と照合します。満たす必要のある条件を確認し、条件が満たされていれば、2つの行を1つに結合します。どちらの方法でも望ましい結果は次のとおりです。
| course_id | lecturer_name |
|---|---|
| 1 | Jhonas |
| 2 | Jhonas |
| 3 | Malidos |
オプション 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_idWHEREの代わりに、JOIN table ON conditionを使用します
この種類の結合は、内部結合とも呼ばれます。
チャレンジ
簡単利用可能なテーブルと列:
grades:course_id、student_id、gradestudents:id、name
student_name、course_id、student_id、gradeを1つのテーブルにまとめて取得するクエリを作成してください。結果をgradeの昇順で並べ替えてください。
自分で試してみよう
-- タスクが求める列を、求められたエイリアスを使ってリストする
SELECT ____
FROM students, grades
-- 両方のテーブルが同じ人物を記述している行のペアのみを残す
WHERE ____
ORDER BY gradeこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド