Wykonanie zebranych w tym e‑materiale poleceń pozwoli ci w praktyce przetestować umiejętność posługiwania się kwerendamikwerendakwerendami w konkretnych sytuacjach problemowych. W tej części zajmiemy się zapytaniami wyszukującymi prostymi, czyli wybierającymi dane z jednej tabeli.
Pliki potrzebne do ćwiczeń
Pamiętaj, że do wykonania ćwiczeń potrzebujesz plików eksportu baz danych oraz konkretnego oprogramowania (XAMPP). Instrukcję instalacji oraz niezbędne do pobrania pliki znajdziesz w sekcji „Film samouczek”.
Polecenia do zrealizowania
W tej części e‑materiału znajdziesz zestaw poleceń do wykonania, wyniki działania kwerend oraz przykładowe rozwiązania zadań wraz z wnioskami płynącymi z wykonania każdego ćwiczenia.
Polecenie 1
Baza danych: vod
Stwórz zapytanie, które wypisze tytuł oraz koszt wypożyczenia wyłącznie dla filmów komediowych zgromadzonych w wypożyczalni.
Poprawne wyniki kwerendy – zwróconych rekordów: 13
Tytul
Cena_w_zl
Chlopaki nie placza
6
Diabel ubiera sie u Prady
7
Kac Vegas
8
Nasza niania jest agentem
7
Straszny film
7
Bruce Wszechmogacy
5
American Pie
5
Dzien swira
6
Lejdis
6
American Beauty
7
Seksmisja
5
Testosteron
8
Asterix i wikingowie
6
Przykładowa poprawna kwerenda:
Linia 1. SELECT Tytul przecinek Cena podkreślnik w podkreślnik zl FROM filmy WHERE Gatunek znak równości cudzysłów komedia cudzysłów.
Wnioski płynące z tego zapytania:
Nie zawsze trzeba wybrać z tabeli wszystkie pola – nie nadużywamy więc zapisu: SELECT * FROM. Zamiast tego podajemy listę potrzebnych do wybrania kolumn, rozdzielając je kolejno przecinkami.
Klauzula WHERE ogranicza liczbę wybranych rekordów do tych, które spełniają podane kryterium.
Zapytanie SELECT trzeba „uszyć na miarę” – kwerenda ma wybrać z tabeli jedynie te pola i rekordy, które są nam potrzebne – nadmiarowość przetwarzanych danych jest zjawiskiem niepożądanym.
Wartość w kolumnie Gatunek jest łańcuchem, dlatego zapisujemy ją w cudzysłowie albo w apostrofach – komputer musi wiedzieć, gdzie napis się zaczyna i gdzie dokładnie kończy.
Polecenie 2
Baza danych: vod
Stwórz zapytanie, które wybierze identyfikatory filmów oraz daty ich wypożyczenia dla trzech ostatnich zamówień użytkownika o numerze PESEL: 70120675819.
Poprawne wyniki kwerendy – zwróconych rekordów: 3
ID_filmu
Data_wyp
CD2008
2011‑11‑23
AA2005
2011‑08‑25
BB2005
2011‑02‑06
Przykładowa poprawna kwerenda:
Linia 1. SELECT ID podkreślnik filmu przecinek Data podkreślnik wyp FROM wypozyczenia WHERE.
Linia 2. Pesel znak równości cudzysłów 70120675819 cudzysłów ORDER BY Data podkreślnik wyp DESC LIMIT 3.
Wnioski płynące z tego zapytania:
Daty można uporządkować malejąco lub rosnąco, w taki sam sposób, jak robimy to z liczbami – najlepiej myśleć o dacie w kategorii liczby sekund, które upłynęły od północy 1970‑01‑01 czasu UTC (tzw. epoka UNIX). Tutaj rekordy musimy uporządkować malejąco, według daty: DESC – ostatnio dokonane zamówienia to przecież największa liczba sekund.
Do uporządkowania rekordów posłużyła konstrukcja ORDER BY umieszczona po klauzuli WHERE – najpierw określamy, które rekordy wybieramy, a dopiero później możemy je posortować.
Ograniczenie maksymalnej liczby zwracanych rekordów do trzech można łatwo osiągnąć klauzulą LIMIT 3 dopisaną na końcu zapytania.
W strukturze tabeli numer PESEL przechowujemy nie jako liczbę, a łańcuch znakowy typu varchar(11). Zabieg ten stosujemy, ponieważ mamy tu do czynienia z aż jedenastocyfrową liczbą, ponadto osobom urodzonym w latach 2000‑2009 nadawano numery PESEL zaczynające się od zera - wpisanie ich jako liczby do tabeli skutkowałoby usunięciem wiodącego zera z lewej strony. W przypadku identyfikatora jest to niedopuszczalne, gdyż każda cyfra ma w nim określone znaczenie!
Polecenie 3
Baza danych: vod
Stwórz zapytanie, które wypisze tytuły filmów wojennych wyprodukowanych w Wielkiej Brytanii oraz w USA, których wypożyczenie kosztuje mniej niż 8 zł.
Poprawne wyniki kwerendy – zwróconych rekordów: 9
Tytul
Cena_w_zl
Szeregowiec Ryan
5
Ostatni samuraj
5
Czas Apokalipsy
7
Wrog u bram
7
The Hurt Locker. W pulapce wojny
7
Pluton
7
Kompania braci
7
Lowca jeleni
7
Imperium Slonca
7
Przykładowa poprawna kwerenda:
Linia 1. SELECT Tytul przecinek Cena podkreślnik w podkreślnik zl FROM filmy WHERE Gatunek znak równości cudzysłów wojenny cudzysłów.
Linia 2. AND otwórz nawias okrągły Kraj podkreślnik produkcji znak równości cudzysłów Wielka Brytania cudzysłów OR.
Linia 3. Kraj podkreślnik produkcji znak równości cudzysłów USA cudzysłów zamknij nawias okrągły AND Cena podkreślnik w podkreślnik zl otwórz nawias ostrokątny 8.
Wnioski płynące z tego zapytania:
W tej kwerendzie koniecznie trzeba zastosować nawiasy okrągłe dla kryteriów połączonych spójnikiem OR. Jest to niezbędne, ponieważ spójnik OR jest w hierarchii operatorów logicznych mniej ważny od spójnika AND – tak jak np. w matematyce mnożenie ma pierwszeństwo przez dodawaniem. Analogicznie – sposobem zmiany domyślnej „kolejności działań” jest odpowiednie wstawienie nawiasów okrągłych.
Gdybyśmy nie wstawili do kwerendy nawiasów okrągłych, wówczas zapytanie wybrałoby wszystkie filmy wojenne wyprodukowane w Wielkiej Brytanii oraz USA, których wypożyczenie jest tańsze od 8 zł.
Polecenie 4
Baza danych: rekrutacja
Stwórz zapytanie, które wypisze numery PESEL i nazwiska wszystkich pięcioletnich chłopców o imieniu Wiktor, których nazwisko zawiera przynajmniej jedną literę „k”.
Poprawne wyniki kwerendy – zwróconych rekordów: 6
Pesel
Nazwisko
p07261903273
Szydlowski
p07262605297
Gasinski
p07272300773
Kadzinski
p07280306093
Mokrzycki
p07282700819
Buglewski
p07290707499
Jakubaszko
Przykładowa poprawna kwerenda:
Linia 1. SELECT Pesel przecinek Nazwisko FROM dzieci WHERE Wiek znak równości 5.
Linia 2. AND Plec znak równości cudzysłów chlopiec cudzysłów AND Imie znak równości cudzysłów Wiktor cudzysłów AND.
Linia 3. otwórz nawias okrągły Nazwisko LIKE cudzysłów procent k procent cudzysłów OR Nazwisko LIKE cudzysłów K procent cudzysłów zamknij nawias okrągły.
Wnioski płynące z tego zapytania:
Do wyszukiwania frazy w tekście – tutaj litery w nazwisku – najwygodniej użyć klauzuli LIKE, zaś operator % oznacza: brak znaku, jakikolwiek jeden znak lub wiele znaków (w przeciwieństwie do operatora _ reprezentującego zawsze dokładnie jeden znak).
Zapis: LIKE "%k%" może wyszukać litery zarówno wielkie, jak i małe: „K”, „k”, albo tylko małe – w praktyce zależy to od parametru COLLATION danej kolumny. Dla pewności odnalezienia nazwisk rozpoczynających się od litery „K”, lecz tylko takich, w których później małe „k” już nie wystąpi, dodajemy zapis: OR Nazwisko LIKE "K%". Zwróćmy uwagę, iż aktualnie w tabeli nie ma pięcioletniego Wiktora, którego nazwisko zaczynałoby się na „K” i potem nie zawierało „k”.
Warunki połączone spójnikiem OR zamknięto w nawiasach okrągłych, gdyż w hierarchii operatorów logicznych jest on mniej ważny od AND.
Polecenie 5
Baza danych: rekrutacja
Stwórz zapytanie, które obliczy i wyświetli liczbę dzieci, których rodzice wybrali w ramach pierwszej preferencji przedszkola o identyfikatorach systemowych od 41 do 45.
Poprawne wyniki kwerendy – zwróconych rekordów: 1
IleDzieci
121
Przykładowa poprawna kwerenda:
Linia 1. SELECT COUNT otwórz nawias okrągły Pesel zamknij nawias okrągły AS IleDzieci FROM preferencje WHERE.
Linia 2. Numer podkreślnik preferencji znak równości 1 AND Id podkreślnik przedszkola BETWEEN 41 AND 45.
Wnioski płynące z tego zapytania:
Funkcja agregująca COUNT() pozwala zliczać rekordy (wiersze) spełniające zadane przez nas kryteria.
Warto zwrócić uwagę, że argumentem funkcji COUNT() może być dowolny atrybut (kolumna) rekordu, możemy również użyć zapisu: COUNT(*).
W zapytaniu użyliśmy dodatkowo aliasu definiowanego klauzulą AS, który nadał nowo utworzonej, wirtualnej kolumnie nazwę: IleDzieci.
Klauzula BETWEEN znakomicie upraszcza klasyczny zapis przedziału, który wyglądałby tak: Id_przedszkola >= 41 AND Id_przedszkola <=45.
Polecenie 6
Baza danych: rekrutacja
Stwórz zapytanie, które wybierze z bazy (koniecznie bez powtórzeń) wszystkie imiona dzieci o nazwisku rozpoczynającym się od członu: „Grab” i kończącym się w dowolny sposób.
Poprawne wyniki kwerendy – zwróconych rekordów: 8
Imie
Agnieszka
Michal
Inga
Wiktor
Wojciech
Maja
Piotr
Oliwia
Przykładowa poprawna kwerenda:
Linia 1. SELECT DISTINCT Imie FROM dzieci.
Linia 2. WHERE Nazwisko LIKE cudzysłów Grab procent cudzysłów.
Wnioski płynące z tego zapytania:
Używamy klauzuli DISTINCT, która wybiera tylko niepowtarzające się rekordy – ta operacja jest przydatna w codziennej pracy, np. gdy przyjdzie nam wypełnić listę wyboru w interfejsie formularza możliwymi wartościami danego atrybutu – wszystkie możliwe opcje listy wybieramy wówczas bez powtórzeń.
Klauzulę DISTINCT umieszczamy bezpośrednio po słowie SELECT, jako że odpowiada ona na pytanie: „Jak wybieramy dane?”. Odpowiedź brzmi: „Wybierz dystynktywnie”, czyli właśnie SELECT DISTINCT.
Gdyby roboczo dopisać w kwerendzie wyjęcie także nazwiska: SELECT DISTINCT Imie, Nazwisko, to w wynikach pojawią się dwie osoby o nazwisku Grabowski – Wiktor i Wojciech. Takie powtórzenie nazwiska może wystąpić, bo imiona są inne. A zatem wybieranie dystynktywne polega na wyjęciu niepowtarzających się rekordów, a nie atrybutów. Kiedy wybieramy także nazwisko, rekordy składają się z dwóch kolumn i wówczas rzeczywiście „Wiktor Grabowski” nie stanowi powtórzenia rekordu: „Wojciech Grabowski”.
Polecenie 7
Baza danych: jezyki
Stwórz zapytanie, które obliczy i wypisze średnią liczbę obywateli (wyrażoną w milionach), którzy posługują się językiem polskim lub hiszpańskim w trzech krajach: Wielkiej Brytanii, Niemczech oraz Francji.
Poprawne wyniki kwerendy – zwróconych rekordów: 1
SrednioUzywa
0.4000000072022279
Przykładowa poprawna kwerenda:
Linia 1. SELECT AVG otwórz nawias okrągły Uzytkownicy zamknij nawias okrągły as SrednioUzywa FROM uzytkownicy.
Linia 2. WHERE otwórz nawias okrągły Jezyk znak równości cudzysłów polski cudzysłów OR Jezyk znak równości cudzysłów hiszpanski cudzysłów zamknij nawias okrągły.
Linia 3. AND otwórz nawias okrągły Panstwo znak równości cudzysłów Wielka Brytania cudzysłów OR Panstwo znak równości cudzysłów Niemcy cudzysłów.
Linia 4. OR Panstwo znak równości cudzysłów Francja cudzysłów zamknij nawias okrągły.
Wnioski płynące z tego zapytania:
Warunki logiczne połączone spójnikiem OR zamykamy w nawiasach okrągłych z powodu hierarchii operatorów logicznych (spójnik AND jest silniejszy niż OR).
Funkcja agregująca AVG() pozwala obliczyć średnią wartość we wskazanej jako argument kolumnie – u nas jest to atrybut: Uzytkownicy.
W zapytaniu używamy dodatkowo aliasu definiowanego klauzulą AS, który nadał nowo utworzonej, wirtualnej kolumnie nazwę: SrednioUzywa.
Niewielka niedokładność wyniku, wynosząca tutaj 0.0000000072022279, jest efektem zastosowania jako typu kolumny liczby zmiennoprzecinkowej FLOAT. Taka liczba to w praktyce wartość przybliżona z użyciem zapisu mantysowo‑wykładniczego, zastosowanego w standardzie o nazwie IEEE 754.
Polecenie 8
Baza danych: jezyki
Stwórz zapytanie, które wypisze nazwę oraz populację państwa europejskiego o największej populacji na kontynencie.
Poprawne wyniki kwerendy – zwróconych rekordów: 1
Panstwo
Populacja
Rosja
143.5
Przykładowa poprawna kwerenda:
Linia 1. SELECT Panstwo przecinek Populacja FROM panstwa WHERE.
Linia 2. kontynent znak równości cudzysłów Europa cudzysłów ORDER BY Populacja DESC.
Linia 3. LIMIT 1.
Wnioski płynące z tego zapytania:
Mamy tu do czynienia z zabiegiem, który pozwala sprawnie znaleźć maksimum: rekordy najpierw porządkujemy malejąco według wartości atrybutu Populacja, po czym klauzulą LIMIT 1 wyjmujemy tylko pierwszy zwrócony rekord (siłą rzeczy zawierający wartość największą).
Alternatywnie możemy taką kwerendę zrealizować także z użyciem podzapytania oraz funkcji agregującej MAX():
Linia 1. SELECT Panstwo przecinek Populacja FROM panstwa WHERE.
Linia 2. kontynent znak równości cudzysłów Europa cudzysłów AND.
Linia 3. Populacja znak równości otwórz nawias okrągły SELECT MAX otwórz nawias okrągły Populacja zamknij nawias okrągły FROM panstwa.
Linia 4. WHERE kontynent znak równości cudzysłów Europa cudzysłów zamknij nawias okrągły.
Słownik
kwerenda
kwerenda
(ang. query – zapytanie) - zapisane z użyciem języka SQL polecenie skierowane do systemu bazodanowego, którego celem może być: pobranie, dodanie, modyfikacja lub usunięcie danych albo sposobu ich przechowywania w systemie
SZBD
SZBD
System Zarządzania Bazą Danych - narzędzie/aplikacja do tworzenia bazy danych (np. MySQL, PostgreSQL, Firebird, Oracle, Microsoft Access)
tabela
tabela
podstawowa struktura logiczna relacyjnej bazy danych definiowana jako zestaw pól (kolumn) opisujących właściwości obiektów, które ma przechowywać
pole
pole
(inaczej: kolumna tabeli) - jednostkowa cecha opisująca element (obiekt) tabeli, np. pole „Nazwisko” może być jedną z kolumn tabeli „Uczeń”
rekord
rekord
(inaczej: wiersz tabeli lub krotka) - pojedynczy kompletny zestaw danych dotyczący konkretnego elementu (obiektu) w tabeli