Zapytania, które wydobywają sens z danych
Naszym zadaniem jest zdobycie informacji o pewnej firmie. Do dyspozycji mamy bazę danych SQLite3 zapisaną w pliku pracownicy.db, którą pobieramy i zapisujemy na dysku. Jako narzędzie pracy wykorzystamy program SQLiteStudio.
pracownicy.db.Baza danych
Na początku warto poznać schemat bazyschemat bazy.
Po uruchomieniu programu SQLiteStudio wybierz polecenie Bazy danych | Dodaj bazę danych i wskaż położenie pliku pracownicy.db. Następnie połącz się z bazą, dwukrotnie klikając nazwę bazy w panelu Bazy danych.
Kliknij dwa razy nazwę tabeli pracownicy, w zakładce Struktura zobaczysz nazwy i typy danych pól, zawartych w tabeli. Po wybraniu zakładki Dane zobaczysz przechowywane w tabeli wartości. Jeżeli klikniesz zakładkę DDL, zobaczysz polecenie SQL, które zostało użyte do utworzenia danej tabeli.
Do budowania zapytań w programie SQLiteStudio używa się edytora. Wywołujemy go za pomocą polecenia Narzędzia | Edytor. Można korzystać z kilku okien edytora jednocześnie. Polecenia zakończone średnikiem wpisuje się lub wkleja, można je także umieszczać w wielu wierszach. W jednym oknie edytora możliwe jest wpisanie wielu poleceń.
Wykonanie polecenia następuje po kliknięciu ikony niebieskiej strzałki lub po naciśnięciu klawisza F9. W sytuacji, gdy zapisanych jest wiele poleceń, wykonywane jest to, które wybraliśmy kliknięciem myszy.

Kwerendy warunkowe
Zacznijmy od przeglądu wszystkich informacji zapisanych w bazie. Wybierzmy wszystkie rekordyrekordy z tabeli pracownicy.
W tej kwerendzie nie nakładamy żadnych warunków. Symbol * oznacza, że pobieramy wszystkie pola rekordów.
Dowiedzmy się czegoś o zarobkach pracowników: kto zarabia więcej niż 2250 zł?
Warunki dodajemy w postaci wyrażeń w klauzuli WHERE.
Rekordy będące wynikiem kwerendy możemy porządkować za pomocą klauzuli ORDER BY. Uzupełniamy poprzedni przykład:
Sposób sortowania określamy za pomocą słów kluczowych, ASC – rosnąco, DESC – malejąco.
Chcielibyśmy poznać imiona, nazwiska i stanowiska osób, którym firma płaci od 1000 do 2250 zł. Wyniki uporządkujemy rosnąco według stanowisk.
Możemy łączyć warunki za pomocą logicznego operatoralogicznego operatora koniunkcji AND lub używać logicznej alternatywy, czyli operatora OR. W przypadku koniunkcji obydwa warunki muszą być prawdziwe, aby rekord został wybrany. W przypadku alternatywy prawdziwy musi być przynajmniej jeden warunek.
Zamiast koniunkcji dwóch warunków wyznaczających zakres szukanych wartości można użyć operatora BETWEEN wartość1 AND wartość2, który wyszukuje wartości w zakresie <wartość1; wartość2>:
Wykonaj podane zapytania. Kiedy warunek w klauzuli WHERE jest prawdziwy?
Wyniki kwerend zawierają czasem wiele rekordów – ich liczbę możemy ograniczyć za pomocą klauzuli LIMIT, np.:
Klauzula LIMIT może przyjmować dwa parametry, czyli liczbę rekordów do wypisania i liczbę rekordów, które powinniśmy pominąć. Właściwość ta często wykorzystywana jest w serwisach internetowych wyświetlających – strona po stronie – listy obiektów. Przykład wykorzystania:
Połączenie klauzul ORDER BY i LIMIT można wykorzystać do odnajdywania rekordów zawierających pola z wartością najmniejszą lub największą.
Przygotuj zapytania, które za pomocą klauzuli ORDER BY i LIMIT znajdą odpowiedź, na pytanie: „Jaka jest minimalna i maksymalna płaca w firmie?”.
Kwerendy zliczające
Na pewno ważną informacją jest to, ilu pracowników zatrudnia firma. Do zliczania użyjemy funkcji
COUNT().
Sprawdźmy, ile kobiet pracuje w analizowanej firmie. Wykorzystamy założenie, że wyłącznie imiona kobiet kończą się na literę „a”.
Operator LIKE pozwala na przeszukiwanie tekstu na podstawie wzorca, w którym symbol % oznacza dowolny znak występujący wielokrotnie, a symbol _ dowolny znak występujący raz.
Przyjęte założenie, że imiona kobiet kończą się na literę „a”, jest oczywiście uproszczeniem – pokazane zostało w celu objaśnienia kwerendy wykorzystującej dopasowanie tekstu. W kolejnym kroku zbudujemy kwerendę dającą rozwiązanie dokładne.
Aby uniknąć polegania na heurystyceheurystyce, wykorzystajmy kolumnę plec.
Jak można zauważyć, wyniki są różne. Aby sprawdzić, które imiona kobiet nie kończą się na „a”, wykonajmy następujący kod:
Wykorzystujemy tu zaprzeczenie przy użyciu słowa kluczowego NOT w warunku dopasowania imienia.
W podobny sposób możemy uzyskać liczbę zatrudnionych mężczyzn.
Nakładanie warunków na pola z datami jest w bazach SQLite proste. Zobaczmy, ilu pracowników zostało zatrudnionych przed rokiem 2000.
W bazie SQLite3 daty zapisane w standardzie ISO 8601, czyli według wzorca RRRR‑MM‑DD, przechowywane są jako TEXT.
Wartości unikalne
Jakie stanowiska istnieją w badanej firmie? Ile ich jest?
Taka kwerenda zwraca listę powtarzających się stanowisk kolejnych pracowników. Możemy spróbować następującego sposobu:
Jednak jest to złe rozwiązanie, bo otrzymamy tylko liczbę wszystkich rekordów w tabeli. Musimy więc nakazać zwracanie wartości unikalnych.
Prawie się udało, a to dzięki użyciu klauzuli DISTINCT, która zwraca tylko unikalne wartości. Ale chyba nie chcemy ręcznie sprawdzać liczby zwróconych pól? Połączmy więc funkcję zliczającą i klauzulę wymuszającą unikalność wartości.
Wartości skrajne
Który z pracowników ma najdłuższy staż pracy? Zapytajmy o najwcześniejszą datę zatrudnienia.
Funkcja MIN() działa tu tak samo jak w arkuszu kalkulacyjnym.
Kto pracuje najkrócej? Prawidłową odpowiedź uzyskamy, gdy znajdziemy osobę zatrudnioną najpóźniej.
Argumentami funkcji MIN() i MAX() są pola zawierające badane wartości, w tym wypadku: daty zatrudnienia.
Słownik
podejście, które pozwala uzyskać rozwiązanie przybliżone, tylko w szczególnych przypadkach dokładne
pozwalają łączyć warunki proste w złożone, należą do nich AND (koniunkcja), OR (alternatywa) i NOT (negacja); wynikiem utworzonych w ten sposób wyrażeń jest PRAWDA lub FAŁSZ
w kontekście relacyjnej bazy danych to jeden wiersz tabeli, zawierający wartości wszystkich pól; rekordem nazywa się również wiersze uzyskiwane w wynikach zapytań – każdy taki wiersz zawiera wartości z pól wskazanych w zapytaniu
schematyczny opis tabel, zawartych w nich kolumn oraz ich typów danych, a także relacji, czyli związków między tabelami
