Stronę najlepiej oglądać w rozdzielczości 1280x1024, chociaż i pod 1024x786 też powinna wyglądać w miarę dobrze. Przy 800x600 będzie trzeba się sporo poprzewijać. |
Gościmy
Naszą witrynę przegląda teraz 18 gości| Łączenie tabel w bazach danych MySQL |
| Baza danych MySQL | |||
| niedziela, 16 stycznia 2011 20:57 | |||
|
Na początku, zaznaczę jednak, iż niekoniecznie, z punktu widzenia optymalizacji, zapytania tego typu są najlepsze. UNION nie należy do najszybszych działań (też nie najwolniejszych), ale czasami bardzo ułatwiających pracę. Przejdźmy zatem do opisu.
CREATE TABLE `users1` (
Pola `imie` i `nazwisko` są wspólne dla wszystkich tabel, więc tylko te możemy wyświetlić. Możemy jednak korzystać w każdej z tabel z dodatkowych pól do wybierania rekordów, które będą nam potrzebne. Poszukajmy więc fryzjerów z tabeli 1 i 3. W tabeli drugiej brak danych o zawodzie, więc nie możemy tam ich znaleźć.
Dane zostaną dołączone według kolejności dołączania tabel, więc najpierw dane z tabeli 1, potem dane z tabeli 3.
(SELECT imie,nazwisko,zawod FROM users1)
W przypadku sortowania wspólnego, trzeba było jednak pole `zawod` umieścić w klauzuli `SELECT`, tak aby było ono dostępne do sortowania poprzez `ORDER BY`A co w przypadku, gdy szukamy fryzjerów w tabelach 1 i 3 a w tabeli 2 wszystkie osoby są fryzjerami? Chcielibyśmy aby też znajdowały się na naszej liście. Nie trudniejszego, dołączamy tabelę 2 bez warunku :
(SELECT imie,nazwisko FROM users1 WHERE zawod='fryzjer')
A co, jeżeli chcielibyśmy wydrukować wszystkich, łącznie z tabelą drugą i ich zawodami? Cóż, w tabeli 2 są sami fryzjerzy, więc pytamy bazę tak :
(SELECT imie,nazwisko,zawod FROM users1)
A co jeżeli chcemy wiedzieć, z której tabeli pochodzi dana osoba? Dodajemy dodatkowe pole i wyświetlamy :
(SELECT imie,nazwisko,zawod,'tabela nr 1 - users1' as tabela FROM users1)
A teraz, co jeżeli chcielibyśmy się dowiedzieć ilu jest fryzjerów we wszystkich trzech tabelach? Tutaj musimy sięgnąć już do podzapytania :
SELECT COUNT(zawod) FROM (
Muszę na zakończenie zaznaczyć, iż tabele na których operuję nie zostały przygotowane, aby budować na nich system produkcyjny. Służą one jedynie dla przykładu. Ostatni przykład to już całkowicie jest kompletnym nieporozumieniem pokazującym jedynie możliwości bazy danych. Tego typu zapytanie, przy większych bazach, będzie generowało ogromne obciążenie serwera, więc lepiej będzie dokonać tego przeliczenia w inny sposób np. wykonując oddzielne zapytania zliczające dla każdej z tabel. Ale jeżeli już się bawimy, to spróbujmy uzyskać odpowiedź na pytanie : ilu przedstawicieli poszczególnych zawodów znajduje się w naszych bazach danych? Oto działanie, które nam na to pytanie odpowie :
SELECT zawod, COUNT(zawod) FROM (
|
Dawno już nic nie pisałem o bazach danych. Czas to nadrobić, tym bardziej, że w trakcie mojej pracy programistycznej, często spotykam się z problemem połączenia kilku tabel MySQL-a w jedną. Na tej jednej tabeli, chciałbym wykonywać normalne działania, tak aby uzyskać satysfakcjonujące mnie odpowiedzi. W tym artykule, w skrócie i na przykładach, opiszę stosowanie operatora UNION.