Łą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.
FROM tabela, tabela2
WHERE tabela2.kolumna = tabela.kolumna
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 :
Tabela Order_product :
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 :
ĆWICZENIE
Podaj liczbę wszystkich produktów, które zamówił klient o id 1
Tabela Order_product :
Tabela Orders :
Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
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ść
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 :
Tabela Order_product :
Tabela Orders :
Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
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 :
Ć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 :
Tabela Order_product :
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