Таблицаларды бириктирүү: INNER JOIN
Эки (же үч) таблицадан саптарды бир натыйжага чогултабыз
- маалымат эмне үчүн бирден көп таблицада сакталарын түшүндүрүү,
ONшарты мененINNER JOINжазуу,- суроолорду тыкан кылуу үчүн кыска таблица лакап аттарын колдонуу,
- үч таблицаны чынжырча бириктирүү,
- INNER JOIN кайсы саптарды калтырып, кайсынысын таштаарын алдын ала айтуу.
1. Маалымат эмне үчүн көп таблицада жатат
Мектеп баарын бир чоң таблицада сактайт деп элестетиңиз: ар бир окуучунун сабында дагы толук класстын аты жана мугалимдин аты кайталанат. Эгер Математиканы Mr. Adams окутса, ошол класстагы ар бир окуучу үчүн "Math" жана "Mr. Adams" деп кайра жазууга туура келет. Бул орунду ысырап кылат жана андан да жаманы: мугалимдин атын бир сапта оңдоп, калгандарын унутуп калсаңыз, маалыматыңыз өзүнө өзү каршы чыгат.
Тыкан чечим — ар бир нерсенин түрүн өз таблицасында сактап, аларды ачкычтар менен байланыштыруу (алгачкы жана тышкы ачкычтарды өткөн темада көргөнсүз):
studentsтаблицасы (ар бир окуучуга бир сап),classesтаблицасы (ар бир класска бир сап),teachersтаблицасы (ар бир мугалимге бир сап).
Ар бир окуучунун сабы класстын толук атынын ордуна кичине class_id сактайт. Ат classes ичинде бир жолу жазылат. Окуучунун жанында класстын атын көрүү үчүн биз маалымат базасынан эки таблицаны кайра бириктирүүнү сурайбыз.
2. Биздин мисал мектеп базасы
Бул кичинекей базаны бүт сабак бою колдонобуз. Аны бир жолу түзүп, андан кийин төмөнкү суроолорду ага карата аткарыңыз.
CREATE TABLE teachers (
teacher_id INT PRIMARY KEY,
teacher_name VARCHAR(50)
);
INSERT INTO teachers VALUES
(1, 'Mr. Adams'),
(2, 'Ms. Baker'),
(3, 'Mr. Carter');
CREATE TABLE classes (
class_id INT PRIMARY KEY,
class_name VARCHAR(50),
teacher_id INT
);
INSERT INTO classes VALUES
(101, 'Math', 1),
(102, 'Science', 2),
(103, 'Art', 3);
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(50),
class_id INT
);
INSERT INTO students VALUES
(1, 'Alice', 101),
(2, 'Ben', 101),
(3, 'Carla', 102),
(4, 'Dan', 103),
(5, 'Eve', NULL);
Демек, үч таблица төмөнкүнү камтыйт:
teachers
| teacher_id | teacher_name |
|---|---|
| 1 | Mr. Adams |
| 2 | Ms. Baker |
| 3 | Mr. Carter |
classes
| class_id | class_name | teacher_id |
|---|---|---|
| 101 | Math | 1 |
| 102 | Science | 2 |
| 103 | Art | 3 |
students
| student_id | name | class_id |
|---|---|---|
| 1 | Alice | 101 |
| 2 | Ben | 101 |
| 3 | Carla | 102 |
| 4 | Dan | 103 |
| 5 | Eve | NULL |
Байкаңыз: Eve нын class_id = NULL — ал азырынча класска кошулган жок. Ага көз салыңыз; ал INNER JOIN эмнени калтырбаганын түшүнүүгө жардам берет.