MySQL JOIN kurs przykłady



W celu połączenia kilku tabel w MySQL używamy polecenia JOIN. Składnia polecenia
Tabela1 AS alias JOIN tabela2 AS alias ON warunki łączenia

By połączyć dwie tabele jedynie po wspólnych rekordach używamy INNER JOIN


mysql> select imie,nazwisko,kwota from dane a inner join place b on a.lp = b.lp
-> ;
+--------+----------+---------+
| imie | nazwisko | kwota |
+--------+----------+---------+
| Stefan | Kawa | 4566.00 |
| Marek | Edza | 7897.00 |
| Ewa | Knaz | 4789.00 |
+--------+----------+---------+
3 rows in set (0.00 sec)


Celem wybrania wszystkich rekordów z jednej tabeli i tylko pasujących z drugiej używamy LEFT JOIN oraz RIGHT JOIN, polecenie left i Wright wskazuje która tabela ma być wyświetlana w całości.

mysql> select imie,nazwisko,kwota from dane a right join place b on a.lp = b.lp;
+--------+----------+----------+
| imie | nazwisko | kwota |
+--------+----------+----------+
| NULL | NULL | 10000.00 |
| NULL | NULL | 1245.00 |
| NULL | NULL | 1325.00 |
| Stefan | Kawa | 4566.00 |
| Marek | Edza | 7897.00 |
| Ewa | Knaz | 4789.00 |
| NULL | NULL | 1254.00 |
| NULL | NULL | 1258.00 |
| NULL | NULL | 4587.00 |
| NULL | NULL | NULL |
+--------+----------+----------+
10 rows in set (0.00 sec)

W języku SQL mamy jeszcze następujące rodzaje złączeń:
LEFT OUTER JOIN – lewostronne złączenie zewnętrzne, które zwraca wszystkie wiersze po lewej stronie klauzuli JOIN, zaś z tabeli po prawej stronie tylko wiersze dla których warunek złączenia jest prawdziwy. W przypadku kiedy wiersz z lewej tabeli nie ma odpowiadającego mu wiersza z prawej tabeli to odpowiednie pola zostają wypełniane wartością NULL.
RIGHT OUTER JOIN – prawostronne złączenie zewnętrzne funkcjonuje w analogiczny sposób.

mysql> select imie,nazwisko,kwota,b.aktywny from dane a right outer join place b on a.aktywny = b.aktywny;
+--------+----------+----------+---------+
| imie | nazwisko | kwota | aktywny |
+--------+----------+----------+---------+
| Stefan | Kawa | 10000.00 | 1 |
| Marek | Edza | 1245.00 | 2 |
| Ewa | Knaz | 1325.00 | 3 |
| NULL | NULL | 4566.00 | 5 |
| NULL | NULL | 7897.00 | 5 |
| NULL | NULL | 4789.00 | 19 |
| Stefan | Kawa | 1254.00 | 1 |
| NULL | NULL | 1258.00 | 5 |
| Marek | Edza | 4587.00 | 2 |
| NULL | NULL | NULL | NULL |
+--------+----------+----------+---------+
10 rows in set (0.00 sec)


Możliwe jest również łączenie przy użyciu polecenia USIGN pozwala ono na połączenie dwóch tabel po wspólnym kluczu w naszym przypadku to LP.

Przykład użycia USIGN MySQL:

mysql> select imie,nazwisko,kwota,b.aktywny from dane a left join place b USING (lp);
+--------+----------+---------+---------+
| imie | nazwisko | kwota | aktywny |
+--------+----------+---------+---------+
| Stefan | Kawa | 4566.00 | 5 |
| Marek | Edza | 7897.00 | 5 |
| Ewa | Knaz | 4789.00 | 19 |
+--------+----------+---------+---------+
3 rows in set (0.00 sec)


Możliwe jest również użycie NATURAL JOIN bez usign.

mysql> select imie,nazwisko,kwota,b.aktywny from dane a natural left join place b;
+--------+----------+-------+---------+
| imie | nazwisko | kwota | aktywny |
+--------+----------+-------+---------+
| Stefan | Kawa | NULL | NULL |
| Marek | Edza | NULL | NULL |
| Ewa | Knaz | NULL | NULL |
+--------+----------+-------+---------+
3 rows in set (0.00 sec)


Użycie FULL JOIN MySQL:

mysql> select imie,nazwisko,kwota,b.aktywny from dane a , place b;

Wyświetla wszystkie rekordy z obu tabel łącząc rekordy każdy z każdym.

MySQL UNION


Polecenie UNION w MySQL pozwala na sumowanie dwóch tabel. Użycie samego UNION eliminuje powtarzające się w drugiej tabeli rekordy dlatego warto użyć UNION ALL.

Użycie UNION ALL:

mysql> select imie,nazwisko from dane union all select imie,nazwisko from dane
-> ;
+--------+----------+
| imie | nazwisko |
+--------+----------+
| Stefan | Kawa |
| Marek | Edza |
| Ewa | Knaz |
| Stefan | Kawa |
| Marek | Edza |
| Ewa | Knaz |
+--------+----------+
6 rows in set (0.00 sec)

SQL-KURSY.pl poleca:

Rozpocznij kolonizacje egzoplanety

Książki
ksikaksikaksikaksikaksika

Copyright 2010-2011 Mariusz Kujawski adres mariuszhk@op.pl

obob ob

Valid HTML 4.01 Transitional