Lecții din modul (1/4)
Unirea a două mese: INNER JOIN
Până acum am citit câte un tabel. În lumea reală, însă, datele sunt
răspândit în mai multe tabele asociate: în setul nostru de date, de exemplu, fiecare
angajatul are un department_id care indică tabelul departments. Pentru a vedea
numele departamentului (și nu doar id) de care trebuie să ne alăturăm
două mese. Operatorul care face acest lucru se numește JOIN.
Sintaxa de bază
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;Citiți în engleză: "luați table_a, atașați-i table_b împerecheând fiecare
rând unde table_a.x este egal cu table_b.y". Rezultatul este un nou virtual
tabel cu coloanele ambelor.
-- For each employee, also show the name of their department:
SELECT employees.first_name,
employees.last_name,
departments.name AS dipartimento
FROM employees
JOIN departments ON employees.department_id = departments.id;Partea de după ON se numește condiția de îmbinare: este ceea ce spune
motor "aceste două rânduri sunt cam același lucru, aliniați-le". În
marea majoritate a cazurilor este o egalitate între o cheie primară și o cheie străină
cheie (aici departments.id și employees.department_id).
INNER JOIN, în detaliu
Cuvântul cheie complet este INNER JOIN, dar JOIN în sine este standardul
sinonim. „Intern” înseamnă că numai rândurile care au o potrivire în ambele
tabelele sunt returnate:
- dacă un angajat are
department_id = NULL, acesta nu va apărea în rezultat; - dacă un departament nu are angajați, acesta nu va apărea în rezultat.
Nume de coloane de calificare
Când două tabele au coloane cu același nume (aici ambele au id și
ambele au name dacă vă gândiți bine), trebuie să specificați ce tabel
o coloană provine scriind table.column. Pentru a evita repetarea numelor lungi,
pseudonimele sunt adesea folosite (le-ați văzut în Modulul 2):
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;AS este și aici opțional: FROM employees e funcționează la fel.
Încearcă
Pentru fiecare angajat din departamentul Ingegneria, arata prenume (prenume), prenume (nume) si orasul departamentului (departamente.oras). Trei coloane, un rând per angajat.
Afișează indiciu
Completați condiția ON cu egalitatea dintre e.department_id și d.id, apoi selectați d.city ca a treia coloană.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Listați prenumele (prenume) și numele (numele) tuturor angajaților care lucrează într-un departament din Milano. Filtrați pe departments.city, nu pe numele departamentului.
Afișează indiciu
Același JOIN ca și exercițiul anterior, dar filtrați pe d.city = 'Milano' în loc de pe numele departamentului.
Soluție disponibilă după 3 încercări