Przeczytaj
Środowisko XAMPP
Język SQL jest powszechnie używany w aplikacjach sieciowych tworzonych przy użyciu między innymi języka PHP. Do poznania bazy i wyszukiwania informacji użyjemy lokalnego środowiska XAMPP, zawierającego serwer WWW Apache, bazę danych MariaDB, język PHP oraz aplikację webową phpMyAdmin działającą w przeglądarce WWW i umożliwiającą obsługę baz danych za pomocą interfejsu graficznego.
Informacje na temat instalacji oraz korzystania ze środowiska XAMPP i aplikacji phpMyAdmin zamieszczone zostały w e‑materiale Definiowanie schematu bazy danych w języku SQL, etap IVDefiniowanie schematu bazy danych w języku SQL, etap IV.
Baza danych
Dysponujemy bazą danych pracownicy, której schemat oraz dane zapisane zostały w pliku pracownicy.sql. Pobieramy plik i zapisujemy w wybranym katalogu.
pracownicy.sql.Uruchamiamy środowisko XAMPP, otwieramy przeglądarkę i w polu adresu wpisujemy localhost. Po załadowaniu się strony powitalnej klikamy link phpMyAdmin w prawym górnym rogu.
Wykonujemy import bazy pracownicy. W tym celu klikamy zakładkę Import, a następnie przycisk Przeglądaj i wskazujemy zapisany plik pracownicy.sql.

pracownicy.sql w phpMyAdmin.Następnie klikamy przycisk Import na dole strony. Po wykonaniu operacji zobaczymy komunikat „Import zakończony sukcesem, wykonano 34 zapytań. (pracownicy.sql)”. Ewentualne komunikaty o błędach pomijamy.
W wypadku problemów ze środowiskiem XAMPP, po pobraniu załączonej bazy SQLite3 pracownicy.db, podane niżej zapytania SQL można również wykonywać w:
programie SQLiteStudio,
wierszu poleceń bazy SQLite3,
skryptach języka Python.
Informacje na temat instalacji i korzystania z tych narzędzi zamieszczone zostały w e‑materiałach Definiowanie schematu bazy danych w języku SQL, etap IIDefiniowanie schematu bazy danych w języku SQL, etap II oraz Instrukcje wyszukiwania w języku SQL, etap IIIInstrukcje wyszukiwania w języku SQL, etap III.
pracownicy.db.Schemat bazy
Utworzoną bazę danych wybieramy w lewym panelu aplikacji phpMyAdmin. Po wybraniu nazwy tabeli zobaczymy zawarte w niej pola i dane, w zakładce Struktura znajdziemy informacje na temat typów danych i ewentualnych ograniczeń.

Relacje między tabelami możemy podejrzeć po wybraniu opcji Widok relacyjny w zakładce Struktura.

Baza zawiera cztery tabele.
W tabeli pracownicy występują pola:
id –
INT, liczba całkowita, klucz główny,imie, nazwisko, kod, ulica –
VARCHAR,data_urodz –
DATE.
W tabeli place występują pola:
id_pracownika, id_stanowiska –
INT, liczba całkowita, klucze obce,data_zatr –
DATE,placa –
DECIMAL.
W tabeli stanowiska występują pola:
id –
INT, liczba całkowita, klucz główny,stanowisko –
VARCHAR.
W tabeli kontakty występują pola:
id –
INT, liczba całkowita, klucz główny,id_pracownika –
INT, liczba całkowita, klucz obcy,telefon, email –
VARCHAR.
Tabele pracownicy i kontakty łączy relacja jeden‑do‑wielu. Tabele pracownicy i stanowiska łączy relacja wiele‑do‑wielu definiowana przez relacje jeden‑do‑wielu każdej z tych tabel do tabeli pośredniej place.
Zapytania wprowadzamy do pola tekstowego po wybraniu bazy pracownicy w lewym panelu i otworzeniu zakładki SQL – powinniśmy widzieć w niej komunikat „Wykonanie zapytania/zapytań SQL do bazy danych pracownicy”. Wpisane lub wklejone zapytanie zostanie wykonane po kliknięciu przycisku Wykonaj na dole strony. Po wyświetleniu wyników zapytania należy kliknąć przycisk Pokaż okno zapytań, aby powrócić do okna Wykonanie zapytania.
Operatory
Jednym z ważniejszych zagadnień w konstruowaniu zapytań SQL są operatory. Wyróżniamy wśród nich kilka typów, z których pierwszy stanowią operatory arytmetyczne:
-, +– odejmowanie, dodawanie,*, /– mnożenie, dzielenie,%– dzielenie modulo.
Operatorów tych możemy używać w zapytaniach z polem wyliczeniowympolem wyliczeniowym. Polom takim możemy nadawać nazwy, co bywa przydatne w przypadku podzapytań (zobacz dalej).
Jaka będzie wartość 10‑procentowej premii dla pracowników?
Trzeba pamiętać, że w ułamkach dziesiętnych używamy znaku kropki jako separatora.
Kolejna grupa to operatory porównaniaoperatory porównania, których używamy zazwyczaj w klauzuli WHERE. Najczęściej występujące to:
=– równy, warto zapamiętać, że to pojedynczy znak,>, >=– większy i większy lub równy,<, <=– mniejszy i mniejszy lub równy,!=, <>– różny.
Operatory logiczneOperatory logiczne pozwalają tworzyć wyrażenia, których wynikiem jest PRAWDA lub FAŁSZ:
ALL– prawda, jeżeli wszystkie wartości podzapytania spełniają warunek,AND– prawda, jeżeli wyrażenia połączone operatorem są prawdziwe, koniunkcja,ANY– prawda, jeżeli którakolwiek wartość podzapytania spełnia warunek,OR– prawda, jeżeli którykolwiek wyrażenie połączone operatorem jest prawdziwe, alternatywa,IS [NOT] NULL– prawda, jeżeli [nie] pusty,[NOT] BETWEEN min AND max– prawda, jeżeli wartość [nie] jest >= min i <= max,[NOT] IN– prawda, jeżeli wartość [nie] występuje w zbiorze,[NOT] LIKE– prawda, jeżeli wartość [nie] jest podobna do wzorca.
W kolejnych zapytaniach użyjemy omówionych operatorów.
Zacznijmy od znalezienia pracowników, którzy nie mieszkają w Sandomierzu.
Warunek nakładany na pole rekordu miasto sugeruje w tym wypadku użycie operatora zaprzeczonego:
Kwerenda zwróci siedem rekordów.
Spróbujmy dowiedzieć się, do których pracowników mamy numery telefonu.
Jeżeli zapisano numer telefonu pracownika, pole telefon w tabeli kontakty nie jest puste:
Kwerenda zwróci osiem rekordów.
Napiszmy zapytanie, które wskaże osoby zatrudnione w 1995 roku.
Przykład ten dobrze ilustruje również zasady używania aliasów dla tabel i pól. Ponieważ tabeli place nadano nazwę pl, wskazanie kolumny w tej tabeli również wymaga aliasu pl.data_zatr.
Kwerenda zwróci dwa rekordy.
Którzy pracownicy mieszkają w Sandomierzu lub w Tarnobrzegu?
Kwerenda zwróci osiem rekordów.
Jeżeli użylibyśmy operatora zaprzeczonego NOT IN, dowiedzielibyśmy się, kto nie mieszka w tych miastach.
Ponieważ w zapytaniu mamy do czynienia z alternatywą, kod mógłby wykorzystywać operator OR:
W kolejnym zapytaniu spróbujemy się dowiedzieć, kto ma adres e‑mail w domenie
@onet.pl?
Używamy wzorca dopasowania, w którym znak „%” oznacza dowolne znaki w dowolnej liczbie.
Kwerenda zwróci dwa rekordy.
Podzapytania
Język SQL umożliwia używanie zapytań zagnieżdżonych w innych zapytaniach – nazywamy je podzapytaniamipodzapytaniami. Najczęściej wykorzystuje się je w warunkach ograniczających wyniki kwerend.
Napiszmy zapytanie, które pozwoli dowiedzieć się, który z pracowników najwięcej zarabia.
W klauzuli WHERE porównujemy wartość pola placa z wartością zwróconą przez podzapytanie. Można uzyskać ten sam wynik również za pomocą następującego zapytania:
Obie kwerendy zwrócą jeden rekord: Piotr, Zamojski, 3500.
Warto wiedzieć, że zapytania z podzapytaniami bywają wolniej przetwarzane. Poza tym niewiele jest sytuacji, w których podzapytania są konieczne.
Rozpatrzmy zapytanie wyświetlające nazwiska pracowników mieszkających w miastach, których nazwy rozpoczynają się literą „S”:
Podzapytanie oczywiście nie jest tu potrzebne – wystarczy warunek dopasowania umieścić w kwerendzie nadrzędnej:
Obie kwerendy zwrócą sześć rekordów.
Słownik
operatory używane w wyrażeniach logicznych, tzn. takich, których wynikiem jest prawda lub fałsz
operatory pozwalające porównywać lewą i prawą stronę wyrażenia zawierającego operator; zwracają prawdę lub fałsz
(ang. subqueries) zapytania SQL zagnieżdżone w zapytaniu zewnętrznym najczęściej jako wartości porównania lub zbiór, w którym poszukujemy wartości
pole w zapytaniu, którego wartość obliczana jest dynamicznie z wykorzystaniem danych pobieranych z bazy