Rezumat: în acest tutorial, veți afla cum să interogați date din mai multe tabele utilizând instrucțiunea SQL INNER JOIN.
În tutorialul anterior, ați învățat cum să interogați date dintr-un singur tabel folosind instrucțiunea SELECT. Cu toate acestea, de multe ori doriți să interogați date din mai multe tabele pentru a avea un set complet de rezultate pentru analiză. Pentru a interoga date din mai multe tabele, utilizați instrucțiuni de asociere.
SQL furnizează mai multe tipuri de asocieri, cum ar fi asociere interioară, asocieri externe (asociere exterioară stângă sau asociere stângă, asociere dreaptă exterioară sau asociere dreaptă și asociere exterioară completă ) și unirea de sine. În acest tutorial, vă vom arăta cum să utilizați clauza INNER JOIN
.
Sintaxa SQL INNER JOIN
Următoarele ilustrează INNER JOIN
sintaxă pentru unirea a două tabele:
1
2
3
4
5
|
SELECT
coloana1, coloana2
FROM
table_1
INNER JOIN table_2 ON join_condition;
|
Să examinăm sintaxa de mai sus în detaliu:
-
table_1
șitable_2
se numesc tabele unite. - Pentru fiecare rând în
table_1
, interogarea găsește rândul corespunzător dintable_2
care îndeplinește condiția de asociere. Dacă s-a găsit rândul corespunzător, interogarea returnează un rând care conține date din ambele tabele. În caz contrar, examinează rândul următor dintable_1
și acest proces continuă până când sunt examinate toate rândurile dintable_1
.
Pentru unirea a mai mult de două tabele, s-a aplicat aceeași logică.
Exemple SQL INNER JOIN
SQL INNER JOIN – interogarea datelor din două tabele exemplu
În acest exemplu, vom folosi tabelele products
și categories
în baza de date eșantion. Următoarea imagine ilustrează diagrama bazei de date.
În diagrama de mai sus:
- O categorie poate avea mai multe produse.
- Un produs aparține unei singure categorii.
Prin urmare, există o relație multi-la-unu între rândurile din categories
tabel și rânduri în tabelul products
. Legătura dintre cele două tabele este coloana categoryid
.
Trebuie să interogăm următoarele date din ambele tabele:
-
productID
,productName
din tabelulproducts
. -
categoryName
din tabelulcategories
.
Următoarea interogare preia date din ambele tabele:
1
2
3
4
5
6
|
SELECT
productID, productName, categoryName
FROM
produse
INNER JOIN
categories ON categories.categoryID = products.categoryID;
|
Condiția de asociere este specificată în clauza INNER JOIN
după cuvântul cheie ON
ca expresie:
1
|
categories.categoryID = products.categoryID
|
Pentru fiecare rând din products
tabel, interogarea găsește un rând corespunzător în tabelul categories
care are același categoryid.
Dacă există o potrivire între două rânduri în ambele tabele, returnează un rând care conține coloane specificate în clauza SELECT, adică, ID produs, numele produsului și numele categoriei; în caz contrar, verifică următorul rând din tabelul products
pentru a găsi rândul care se potrivește în tabelul categories
. Acest proces continuă până când se examinează ultimul rând al tabelului de produse.
SQL INNER JOIN – interogarea datelor din trei tabele
Putem folosi aceleași tehnici pentru alăturarea a trei tabele.Următoarea interogare selectează productID
, productName
, categoryName
și supplier
din products
, categories
și suppliers
tabele:
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
productID,
productName,
categoryName,
companyName AS furnizor
FROM
produse
INNER JOIN
categorii ON categorii. categoryID = products.categoryID
INNER JOIN
furnizori PE furnizori.supplierID = products.supplierID
|
SQL INNER JOIN implicit
Există o altă formă a INNER JOIN
numită îmbinare interioară implicită după cum se arată mai jos:
1
2
3
4
5
6
7
|
SELECT
coloana1, coloana2
FROM
table_1,
table_2
WHERE
join_condition;
|
În acest formular, specificați toate tabelele unite în clauza FROM
și puneți condiția de asociere în clauza WHERE a declarației SELECT
. Putem rescrie exemplul de interogare de mai sus folosind INNER JOIN
implicit după cum urmează:
1
2
3
4
5
6
7
|
SELECT
productID, productName, categoryName
FROM
produse,
categorii
UNDE
products.categoryID = categories.categoryID;
|