Bazy danych oparte o język SQL ( Structured Query Language ) są niewątpliwe bardzo popularne ( a są jakieś inne ? 😉 ) stąd powstało wiele systemów wykorzystujący ten język, który pod względem semantyki jest łatwy do zrozumienia dla człowieka. Jednym z najpopularniejszych systemów bazo-danowych jest MYSQL. Aby wykorzystywać możliwości tego systemu musimy poznać podstawowe zapytania SQL.
Przedstawię w poniższym opracowaniu przykłady pokazujące kilka podstawowych zapytań służących do: pobierania danych, aktualizowania i usuwania danych z naszej bazy.
W telegraficznym skrócie baza danych to zbiór tabel z danymi w których każda ma wiersze ( rekordy ) i pola ( kolumny ). Jest to uporządkowana struktura danych, która może mieć także relacje ale to już nie są podstawy więc ten temat tutaj pominiemy 🙂
Zaczynamy od najbardziej popularnego polecenia: SELECT
Terminologia
W poniższym artykule będziemy posługiwać się terminologią związaną z językiem SQL, takimi jak: rekord ( wiersz ), kolumna ( pole ), polecenie, klauzula, operatory logiczne.
W bazie danych mamy najczęściej jakiś zbiór tabel w których są trzymane nasze dane. Pojedyncza tabela wygląda tak:
Aby pracować z naszymi danymi potrzebna jest znajomość definiowania zapytań w języku SQL. Jeśli chodzi o polecenia SQL to najpopularniejsze z nich to: SELECT, UPDATE, DELETE, DROP i z takich poleceń będzie korzystań w niniejszym opracowaniu.
Jeśli chodzi o termin: klauzula dotyczy części składowych polecenia ( słowa kluczowe ). Klauzule, które będą wykorzystywane w poniższych przykładach to np.: WHERE, LIMIT, ORBER BY, LIMIT
1. Pobieranie danych:
* WYŚWIETL WSZYSTKO:
Poniżej mamy pierwszy przykład polecenia SQL, jest to polecenie SELECT
SELECT * FROM `nazwa_tabeli`;
Wyświetli wszystkie rekordy i pola z naszej tabeli: nazwa_tabeli. Każde polecenie SQL musi być zakończone średnikiem !
Jeśli chcemy wyświetlić tylko unikalne rekordy ( bez powtórzeń / duplikatów ) należy skorzystać z klauzuli DISTINCT zaraz po słowie SELECT:
SELECT DISTINCT * FROM `nazwa_tabeli`;
SELECT - określa pola jakie mają zostać pobrane. Symbol * oznacza: wszystkie pola ! FROM - z jakiej tabeli ma pobrać dane
Zalecane jest używanie znaku lewego apostrofu pomiędzy ` nazwami pól jak i tabel.
* WYŚWIETLANIE OKREŚLONEJ LICZBY REKORDÓW:
Jeśli chcemy ograniczyć ilość wyświetlanych rekordów lub pobrać określony zakres rekordów należy skorzystać ze słowa kluczowego: LIMIT:
SELECT `nazwa_1`, `nazwa_2` FROM `nazwa_tabeli` LIMIT 0, 30;
Wyświetli 30 rekordów poczynając od pobrania pierwszego rekordu – rekordy liczymy od 0, stąd też 0 to będzie nasz pierwszy rekord !
Żeby była jasność numer rekordu nie jest tożsamy z polem w którym mamy ID rekordu o atrybucie AUTO_INCREMENT, gdyż skasowanie rekordu/rekordów nie zmienia numeracji tych pól – numeracja w takim przypadku jest niezmienna i unikalna. Innymi słowy skasowanie pola , które ma ID = 15 nie spowoduje ponownego „przenumerowania”, poprostu pola o takim ID nie istnieje i tak powinno być aby była zachowana integralność bazy w kontekście relacyjności ( powiązań ) tabel.
Dla usystematyzowania wiedzy o klauzuli LIMIT jej składnia wygląda następująco:
LIMIT "nr rekordu", "ile rekordów pobrać"
I dwa warianty LIMIT:
LIMIT 5, 10 - pokaże 10 rekordów licząc od 6 ( numeracja od 0 ! ) LIMIT 5 - pokaże 5 pierwszy rekordów
Klauzule LIMIT dopisujemy na końcu naszego zapytania !
* WARUNKOWE POBIERANIE DANYCH
Pobieranie rekordów uwzględniając warunek, który musi być spełniony dla określonego pola/pól w każdym rekordzie – jeśli ma zostać wyświetlony:
SELECT * FROM `wp_users` WHERE `user_login` = 'patryk';
W tym wypadku zapytanie pobierze z bazy wszystkie rekordy, które zawierają wyraz ( literał ): patryk. Literały zaleca się umieszczać pomiędzy apostrofami pionowymi ( tzw. pojedynczy cudzysłów ). Jak ktoś jest spostrzegawczy zauważy, że zapytanie posiada nazwy tabeli i pola z bazy WordPressa 🙂
* WARUNEK DLA WZORCÓW
Jeśli jednak chcemy podczas porównywania wziać tylko część łańcucha tekstowego w polu, należy skorzystać z operatora LIKE:
SELECT * FROM `wp_users` WHERE `user_login` LIKE 'mac%' LIMIT 0, 5;
Wyświetli dane, jeśli w polu user_login znajdzie się ciąg pasujący do wzorca mac% czyli w naszym przypadku ( jeśli w user_login są nazwy użytkowników ) pobierze wszystkich użytkowników, których nazwa zaczyna się od: mac.
Samo LIKE nie bierze pod uwagę wielkości liter ! Jeśli wymagana jest dokładność dotycząca wielkości liter wykorzystujemy operator złożony: LIKE BINARY.
* SORTOWANIE
Proste sortowanie możemy wykonać wykorzystując klauzulę ORDER BY.
Dla przykładu tabela z użytkownikami systemu WordPress:
SELECT * FROM `wp_users` ORDER BY `ID` DESC;
Po klauzuli ORDER BY podaje się pole/pola wg których ma być dokonywane sortowanie. Domyślnym parametrem tej klauzuli jest ASC czyli sortowanie rosnące, jeśli chcemy skorzystać z sortowania malejącego korzystamy z parametru DESC.
* OPERATORY LOGICZNE – ZŁOŻONE WARUNKI
Nierzadko zachodzi potrzeba, aby pobrać dane uwzględniające kilka warunków pobierających dane z bazy w celu uściślenia wyników naszego zapytania.
Służą do tego operatory logiczne takie jak:
AND, OR, IN, BETWEEN, NOT.
+ Operator AND ( i ) łączy dwa warunki i oba muszą być spełnione ( TRUE ) aby rekord został wyświetlony. Jeśli pierwszy z nich jest fałszywy to drugiego już system nie musi sprawdzać w związku z tym kolejność warunku pod kątem optymalizacji ma znaczenie 🙂
SELECT * FROM `nazwa_tabeli` WHERE `pole` > 5 AND `pole` < 15;
W wyniku otrzymamy wszystkie rekordy, których pole ma wartości większe od 5 i jednocześnie mniejsze od 15. W ten sposób zapytanie zwraca nam określony zakres rekordów.
+ Operator OR ( lub ) jeden z warunków musi być prawdziwy:
SELECT * FROM `nazwa_tabeli` WHERE `miasto` = 'Warszawa' OR 'Szczecin';
Wyniki będą zawierać tylko te rekordy w których pole miasto zawierało nazwę miasta Warszawa lub Szczecin.
+ Operator BETWEEN pobiera dane z określonego przedziału:
SELECT * FROM `nazwa_tabeli` WHERE `ID` BETWEEN 10 AND 15;
Zostaną pobrane wszystkie rekordy począwszy od rekordu 10-tego a kończąc na 15-stym. To samo możemy uzyskać wykorzystując operator AND i znaki określające mniejszość/większość lub równość:
SELECT * FROM `wp_users` WHERE `ID` >= 10 AND `ID` <= 15;
Trzeba pamiętać, że operator BETWEEN dotyczy operacji na jednym polu a w przypadku operatora AND możemy a nawet musimy podać 2 pola, więc jeśli musimy brać pod uwagę dwa różne pola to trzeba skorzystać z operatora AND.
2. Modyfikacja danych
Do modyfikowania danych w tabelach bazy danych służy polecenie UPDATE, co pokazuje poniższy przykład:
UPDATE `nazwa_tabeli` SET `nasze_pole`='nowa_wartosc' WHERE `id` = 15;
Zostanie zaktualizowane pole: „nasze_pole” zastępując starą wartość nową: „nowa_wartosc„. Aktualizacja dotyczy tylko i wyłącznie rekordu w którym pole „id” ma wartość 15. Gdyby jednak w innych rekordach pola „id” miały również wartość: 15 to one także zostałyby zaktualizowane.
UWAGA: jeśli nie podasz warunku, który określałby jakie rekordy mają być aktualizowane, wtedy wszystkie rekordy będą brane pod uwagę przy zmianie naszego pola – co może grozić małą katastrofą. Także tutaj szczególnie należy uważać !!!
3. Usuwanie rekordów
Do usuwania rekordów z tabeli służy polecenie DELETE. Oto przykład:
DELETE FROM `nazwa_tabeli` WHERE `imie` = 'Alvaro';
Zostaną skasowane wszystkie rekordy w których pole „imie” zawierało ciąg tekstowy: Alvaro.
UWAGA: Pominięcie warunku WHERE będzie skutkowało usunięciem wszystkich rekordów w tabeli !
4. Usuwanie tabeli
Tutaj sprawa jest dość prosta, gdyż i zapytanie jest krótkie i jasne:
DROP TABLE `nazwa_tabeli`;
Jeśli tabela nie zostanie skasowana to znaczy, że najprawdopodobniej nie mam uprawnień do tego polecenia !