banner
vote

Łączenie tabel i wyszukiwanie danych w wielu tabelach

Czasem potrzebujemy wybrać dane z tabeli w zależności od danych pochodzących z innej tabeli. Do rozwiązania tego problemu służy operacja zwana łączeniem (join).

Jeśli w zapytaniu potrzebne nam są dane z tabeli1 i tabeli2 to musimy wpisać ich nazwy zaraz po słowie FROM (tak jak to robimy w standardowych zapytaniach) a następnie odwoływać się do kolumn z tych tabel używając:
nazwy konkretnej tabeli, operatora kropki "." oraz nazwy żądanej kolumny.
SELECT tabela.kolumna, tabela.kolumna2
FROM tabela, tabela2
WHERE tabela2.kolumna = tabela.kolumna
Operator "," jest skrótem od słowa kluczowego JOIN, które oznacza zebranie wymienionych tabel w jedną dużą i operowanie na niej.

Możliwe jest łączenie trzech i więcej tabel. Działa to analogicznie jak w przypadku dwóch tabel.
PRZYKŁAD
Znajdziemy id i nazwy produktów zamówionych w zamówieniu o identyfikatorze 2
Tabela Product :
id
name
price
amount
date
5
Spodnie
100
5
2011-02-01
6
Bluza
60
2
2011-02-12
Tabela Order_product :
order_id
product_id
amount
1
2
2
1
4
1
2
6
1
2
8
1
2
5
2
3
5
1
3
7
2
4
5
1
4
2
1
4
7
2
5
4
1
6
6
1
zapytanie : SELECT product.id,product.name FROM product,order_product WHERE order_product.order_id=4 AND order_product.product_id=product.id
Wynik zapytania :
id
name
5
Spodnie
2
Hustka
7
Koszula
ĆWICZENIE
Podaj liczbę wszystkich produktów, które zamówił klient o id 1
Tabela Order_product :
order_id
product_id
amount
1
2
2
1
4
1
2
6
1
2
8
1
2
5
2
3
5
1
3
7
2
4
5
1
4
2
1
4
7
2
5
4
1
6
6
1
Tabela Orders :
id
customer_id
value
date

Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
Wpisz zapytanie do bazy :
Zobacz jak powinno wyglądać zapytanie
SELECT SUM(order_product.amount) FROM order_product,orders WHERE orders.customer_id=1 AND order_product.order_id=orders.id

Łączenie tabel z użyciem aliasów

SELECT tab.kolumna
FROM tabela as tab, tabela2 as tab2
WHERE tab2.kolumna = wartość
PRZYKŁAD
Wybieramy imiona klientów którzy zamówili produkt o id 5
Tabela Customer :
id
name
city
date
1
Adam
Lublin
2011-02-05
2
Monika
Gdynia
2011-02-19
3
Natalia
Zakopane
2011-02-23
4
Katarzyna
Lublin
2011-03-08
5
Marcin
Warszawa
2011-03-21
Tabela Order_product :
order_id
product_id
amount
1
2
2
1
4
1
2
6
1
2
8
1
2
5
2
3
5
1
3
7
2
4
5
1
4
2
1
4
7
2
5
4
1
6
6
1
Tabela Orders :
id
customer_id
value
date

Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
zapytanie : SELECT c.name FROM customer as c,order_product as op,orders as o WHERE op.product_id=5 AND o.id=op.order_id AND c.id=o.customer_id
Wynik zapytania :
name
Natalia
Katarzyna
Adam
ĆWICZENIE
Podaj id, nazwę i ilość zamówionych produktów w zamówieniu o id 4 korzystając z aliasów dla tabel order_product i product
Tabela Product :
id
name
price
amount
date
5
Spodnie
100
5
2011-02-01
6
Bluza
60
2
2011-02-12
Tabela Order_product :
order_id
product_id
amount
1
2
2
1
4
1
2
6
1
2
8
1
2
5
2
3
5
1
3
7
2
4
5
1
4
2
1
4
7
2
5
4
1
6
6
1
Wpisz zapytanie do bazy :
Zobacz jak powinno wyglądać zapytanie
SELECT p.id,p.name,op.amount FROM order_product as op,product as p WHERE op.order_id=4 AND p.id=op.product_id