Klauzula JOIN
W poleceniu SELECT możesz użyć jednej z poniższych składni klauzuli JOIN:
 
przy czym tabela zdefiniowane jest następująco:
nazwa_tabeli [[AS] alias]
   [USE INDEX (lista_kluczy)]
   [IGNORE INDEX (lista_kluczy)]
natomiast warunek_złączenia jako
 
Druga z pokazanych wyżej składni LEFT OUTER JOIN istnieje tylko ze względu na zgodność ze standardem ODBC.
	- Odwołaniu do tabeli można nadać inną nazwę (alias) za pomocą składni nazwa_tabeli AS alias_nazwylubnazwa_tabeli alias_nazwy:SELECT t1.name, t2.salary FROM employee AS t1,
                                      info AS t2
                                      WHERE t1.name = t2.name;
 
- INNER JOINi- ,(przecinek) są równoważne. Oba dokonują pełnego złączenia wymienionych tabel.
		Zazwyczaj sposób łączenia podaje się w wyrażeniach warunkowych klauzuli- WHERE.
 
- Warunek ONjest dowolnym wyrażeniem warunkowym, które może być użyte w klauzuliWHERE.
 
- Jeżeli nie ma pasujących wierszy dla tabeli o nazwie stojącej po prawej stronie części ONlubUSINGklauzuliLEFT JOIN, stosowany jest wiersz z wartościami wszystkich kolumn ustawionymi na NULL.
		Można to wykorzystać do znalezienia wszystkich rekordów w tabeli, które nie mają swoich odpowiedników w innej tabeli:SELECT tabela1.* FROM tabela1
       LEFT JOIN table2 ON tabela1.id = tabela2.id
       WHERE tabela2.id IS NULL;Przykład ten znajduje wszystkie wiersze wtabeli1z takimi wartościami polaid, które nie występują
		wtabeli2(tzn. wszystkie wiersze wtabeli1bez odpowiedników wtabeli2).
		Oczywiście przyjmujemy, że poletable2.idjest zadeklarowane jakoNOT NULL.
 
- Klauzula USING(lista_kolumn)wymienia kolumny, które muszą znaleźć się w obu tabelach.
		KlauzulaUSINGzdefiniowana:A LEFT JOIN B USING (C1, C2, C3,...) jest semantycznie identyczna z następującym wyrażeniemON:A.C1 = B.C1 AND A.C2 = B.C2 AND A.C3 = B.C3, ... 
 
- Wyrażenie złączenia dwóch tabel za pomocą NATURAL [LEFT] JOINjest semantycznym ekwiwalentem wyrażeniaINNER JOINlubLEFT JOINz klauzuląUSINGwskazującą wszystkie kolumny istniejące
		w obu tabelach.
 
- RIGHT JOINdziała przeciwnie do- LEFT JOIN. Aby zachować przenośność kodu pomiędzy różnymi bazami
		danych zaleca się stosowanie- LEFT JOINzamiast- RIGHT JOIN.
 
- STRAIGHT_JOINjest identyczne z- JOINz wyjątkiem tego, że lewa tabela jest zawsze wczytywana
		przed tabelą prawą. Może to być wykorzystane w tych przypadkach, kiedy optymalizator join umieszcza tabele w niewłaściwym
		porządku.
 
- Można wskazać, których indeksów należy używać przy pobieraniu danych z tabeli. Jest to użyteczne, jeżeli polecenie
		EXPLAINpokazuje, iż program stosuje nie te indeksy, co trzeba. Przez podanie klauzuliUSE INDEX (lista_kluczy)można nakazać użycia tylko wyznaczonych indeksów. Przeciwieństwem jest klauzulaIGNORE INDEX (lista_kluczy)zakazująca stosowania określonych indeksów.
 
Kilka przykładów:
SELECT * FROM tabela1,tabela2 WHERE tabela1.id=tabela2.id;
 
SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id=tabela2.id;
 
SELECT * FROM tabela1 LEFT JOIN tabela2 USING (id);
 
SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id=tabela2.id
                      LEFT JOIN tabela3 ON tabela2.id=tabela3.id;
 
SELECT * FROM tabela1 USE INDEX (key1,key2)
              WHERE key1=1 AND key2=2 AND key3=3;
 
SELECT * FROM tabela1 IGNORE INDEX (key3)
              WHERE key1=1 AND key2=2 AND key3=3;
 
Klauzula UNION
SELECT ...
UNION [ALL | DISTINCT]
SELECT ...
   [UNION [ALL | DISTINCT]
    SELECT ...]UNION jest używane do połączenia wielu instrukcji SELECT w jednym zestawieniu wynikowym.
Odpowiadające sobie kolumny we wszystkich instrukcjach SELECT muszą być tego samego typu.
	Jako nazwy kolumn używane są nazwy użyte w pierwszej instrukcji SELECT. 
Klauzula INTO OUTFILE może wystąpić tylko przy ostatniej instrukcji SELECT.
Jeżeli nie użyjesz słowa kluczowego ALL, to domyślnie przyjmowane jest DISTINCT co oznacza,
	że w wyniku nie pojawią się zdublowane wiersze. Jeżeli użyjesz słowa kluczowego ALL choćby dla jednej klauzuli
	UNION, to będzie ona użyta dla wszystkich pozostałych.
Klauzule ORDER BY i LIMIT - o ile muszą być użyte - powinny wystąpić tylko przy ostatniej
	instrukcji SELECT, a każda z instrukcji powinna byc zamknięta nawiasami, np.: 
	   (SELECT a FROM tabela WHERE a=10 AND b=1)
   UNION
   (SELECT a FROM tabela WHERE a=11 AND b=2)
   ORDER BY a LIMIT 10;
Klauzula ORDER BY nie może zawierać pół z nazwami tabel. Jeżeli jest to konieczne, to należy używać aliasów
	kolumn lub ich pozycji na liście. Nazwy użyte w  klauzuli ORDER BY muszą pochodzić z pierwszej instrukcji
	SELECT.
Możesz również użyć klauzul ORDER BY i/lub LIMIT dla każdej instrukcji SELECT:
	   (SELECT a FROM tabela WHERE a=10 AND b=1 ORDER BY a LIMIT 10)
   UNION
   (SELECT a FROM tabela WHERE a=11 AND b=2 ORDER BY a LIMIT 10);