Ś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 IVP13C1S35aDefiniowanie 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.

RIIy6gshmrH62

Plik pracownicy.sql.
Plik SQL o rozmiarze 5.85 KB w języku polskim

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.

R1YeOwxWUlSP5
Importowanie pliku pracownicy.sql w phpMyAdmin.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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 IIPkXbedRKMDefiniowanie schematu bazy danych w języku SQL, etap II oraz Instrukcje wyszukiwania w języku SQL, etap IIIPkQh27XjUInstrukcje wyszukiwania w języku SQL, etap III.

R15CgTqu1xmtW

Plik zawierający bazę danych pracownicy.db

Plik bazy SQLite3 pracownicy.db.
Plik DB o rozmiarze 28.00 KB w języku polskim

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ń.

Rc8OyL0SGzJRq
Widok struktury tabeli w phpMyAdmin.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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

R86ca21AVTdey
Widok relacyjny w phpMyAdmin.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Baza zawiera cztery tabele.

W tabeli pracownicy występują pola:

  • idINT, liczba całkowita, klucz główny,

  • imie, nazwisko, kod, ulicaVARCHAR,

  • data_urodzDATE.

W tabeli place występują pola:

  • id_pracownika, id_stanowiskaINT, liczba całkowita, klucze obce,

  • data_zatrDATE,

  • placaDECIMAL.

W tabeli stanowiska występują pola:

  • idINT, liczba całkowita, klucz główny,

  • stanowiskoVARCHAR.

W tabeli kontakty występują pola:

  • idINT, liczba całkowita, klucz główny,

  • id_pracownikaINT, liczba całkowita, klucz obcy,

  • telefon, emailVARCHAR.

Tabele pracownicykontakty łączy relacja jeden‑do‑wielu. Tabele pracownicystanowiska łą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 wyliczeniowympole wyliczeniowepolem wyliczeniowym. Polom takim możemy nadawać nazwy, co bywa przydatne w przypadku podzapytań (zobacz dalej).

  1. Jaka będzie wartość 10‑procentowej premii dla pracowników?

Linia 1. SELECT placa przecinek placa asterysk 0 kropka 1 AS podwyzka FROM place średnik.
Ważne!

Trzeba pamiętać, że w ułamkach dziesiętnych używamy znaku kropki jako separatora.

Kolejna grupa to operatory porównaniaoperatory 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 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.

  1. 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:

Linia 1. SELECT asterysk FROM pracownicy WHERE miasto wykrzyknik znak równości apostrof Sandomierz apostrof średnik.

Kwerenda zwróci siedem rekordów.

  1. 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:

Linia 1. SELECT imie przecinek nazwisko przecinek telefon. Linia 2. FROM pracownicy. Linia 3. INNER JOIN kontakty. Linia 4. ON pracownicy kropka id znak równości kontakty kropka id podkreślnik pracownika. Linia 5. WHERE telefon IS NOT NULL średnik.

Kwerenda zwróci osiem rekordów.

  1. Napiszmy zapytanie, które wskaże osoby zatrudnione w 1995 roku.

Linia 1. SELECT imie przecinek nazwisko przecinek pl kropka data podkreślnik zatr. Linia 2. FROM pracownicy AS pr przecinek place AS pl. Linia 3. WHERE pr kropka id znak równości pl kropka id podkreślnik pracownika. Linia 4. AND pl kropka data podkreślnik zatr BETWEEN apostrof 1995 minus 01 minus 01 apostrof AND apostrof 1995 minus 12 minus 31 apostrof średnik.

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.

  1. Którzy pracownicy mieszkają w Sandomierzu lub w Tarnobrzegu?

Linia 1. SELECT imie przecinek nazwisko przecinek miasto. Linia 2. FROM pracownicy. Linia 3. WHERE miasto. Linia 4. IN otwórz nawias okrągły apostrof Sandomierz apostrof przecinek apostrof Tarnobrzeg apostrof zamknij nawias okrągły średnik.

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:

Linia 1. SELECT imie przecinek nazwisko przecinek miasto. Linia 2. FROM pracownicy. Linia 3. WHERE miasto znak równości apostrof Sandomierz apostrof. Linia 4. OR miasto znak równości apostrof Tarnobrzeg apostrof średnik.
  1. W kolejnym zapytaniu spróbujemy się dowiedzieć, kto ma adres e‑mail w domenie @onet.pl?

Linia 1. SELECT imie przecinek nazwisko przecinek email. Linia 2. FROM pracownicy przecinek kontakty. Linia 3. WHERE pracownicy kropka id znak równości kontakty kropka id podkreślnik pracownika. Linia 4. AND email LIKE apostrof procent at onet kropka pl apostrof średnik.

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 podzapytaniamipodzapytaniapodzapytaniami. Najczęściej wykorzystuje się je w warunkach ograniczających wyniki kwerend.

  1. Napiszmy zapytanie, które pozwoli dowiedzieć się, który z pracowników najwięcej zarabia.

Linia 1. SELECT imie przecinek nazwisko przecinek placa. Linia 2. FROM pracownicy przecinek place. Linia 3. WHERE pracownicy kropka id znak równości place kropka id podkreślnik pracownika. Linia 4. AND placa znak równości otwórz nawias okrągły SELECT MAX otwórz nawias okrągły placa zamknij nawias okrągły FROM place zamknij nawias okrągły średnik.

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:

Linia 1. SELECT imie przecinek nazwisko przecinek placa. Linia 2. FROM pracownicy przecinek place. Linia 3. WHERE pracownicy kropka id znak równości place kropka id podkreślnik pracownika. Linia 4. ORDER BY placa DESC. Linia 5. LIMIT 1 średnik.

Obie kwerendy zwrócą jeden rekord: Piotr, Zamojski, 3500.

Ważne!

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”:

Linia 1. SELECT nazwisko przecinek miasto. Linia 2. FROM pracownicy. Linia 3. WHERE miasto. Linia 4. IN otwórz nawias okrągły SELECT miasto. Linia 5. FROM pracownicy. Linia 6. WHERE miasto LIKE apostrof S procent apostrof zamknij nawias okrągły średnik.

Podzapytanie oczywiście nie jest tu potrzebne – wystarczy warunek dopasowania umieścić w kwerendzie nadrzędnej:

Linia 1. SELECT nazwisko przecinek miasto. Linia 2. FROM pracownicy. Linia 3. WHERE miasto LIKE apostrof S procent apostrof średnik.

Obie kwerendy zwrócą sześć rekordów.

Słownik

operatory logiczne
operatory logiczne

operatory używane w wyrażeniach logicznych, tzn. takich, których wynikiem jest prawda lub fałsz

operatory porównania
operatory porównania

operatory pozwalające porównywać lewą i prawą stronę wyrażenia zawierającego operator; zwracają prawdę lub fałsz

podzapytania
podzapytania

(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 wyliczeniowe
pole wyliczeniowe

pole w zapytaniu, którego wartość obliczana jest dynamicznie z wykorzystaniem danych pobieranych z bazy