Przeczytaj
Baza danych
Relacyjna baza danych składa się z tabel powiązanych relacjami. Kolumny w tabelach nazywamy polami. Zestaw wartości z wszystkich pól tworzy wiersz tabeli – czyli rekord. Pola przechowują wartości różnego typu, np. tekstowe, liczbowe czy daty i czasu.
Żeby przetwarzać informacje zgromadzone w bazie danych, musimy poznać schemat bazyschemat bazy, tzn. wiedzieć, jakie tabele ją tworzą, jakie zawierają pola i wartości oraz jak są ze sobą powiązane. W tym celu wykorzystamy bazy danych zapisane w plikach:
W wybranym programie otwórz odpowiednią bazę. W programie LibreOffice Base otwórz plik pracownicy.odb, w programie Microsoft Access – pracownicy.accdb. Wykorzystując widok projektu tabeli, przejrzyj nazwy oraz zdefiniowane typy danych pól w poszczególnych tabelach. Korzystając z widoku relacji, ustal powiązania między tabelami.
Odczytywanie danych
Za pomocą interfejsu graficznego tworzymy projekt kwerendy wybierającej wszystkie imiona, nazwiska oraz daty urodzenia z tabeli pracownicy. Uruchamiamy zapytanie, sprawdzamy wyniki i zapisujemy pod nazwą dane_osobowe.
Kwerendę utworzyliśmy za pomocą interfejsu graficznego, jednak jej działanie opiera się na poleceniach języka SQL.
Programy bazodanowe pozwalają przeglądać i tworzyć kwerendy w języku SQL.
W programie LibreOffice Base kwerendę możemy przełączać między widokiem projektu a widokiem SQL, wybierając Widok, a następnie Włącz/Wyłącz widok projektu. Możemy również tworzyć kwerendę za pomocą polecenia Utwórz kwerendę SQL i edytować zapisane kwerendy po wybraniu z ich menu podręcznego polecenia Edycja w widoku SQL. Zapytanie uruchamiamy za pomocą ikony lub polecenia Edycja | Wykonaj kwerendę.
W programie Microsoft Access kwerendę również możemy przełączać między widokiem projektu a widokiem SQL, używając ikony Widok. Aby utworzyć kwerendę od razu w widoku SQL, wybieramy wstążkę Tworzenie, ikonę Projekt kwerendy, zamykamy okno Pokazywanie tabeli i klikamy ikonę SQL
W wybranym programie włączamy widok SQL zaprojektowanej kwerendy. W programie LibreOffice Base zobaczymy:
W programie Microsoft Access nazwy wybieranych pól poprzedzone będą nazwą tabeli:
Składnia języka SQL różni się nieco w zależności od wykorzystywanego programu lub systemu bazodanowego. Polecenia tego języka nazywamy klauzulamiklauzulami, zapytaniamizapytaniami lub kwerendami i zapisujemy wielkimi literami ze względu na czytelność (nie jest to obowiązkowe).
W LibreOffice Base nazwy tabel i pól otaczane są podwójnymi cudzysłowami, co obowiązkowe jest w nazwach zawierających spacje. W programie Microsoft Access nazwy pól ze spacjami otaczamy nawiasami kwadratowymi.
Mimo że w programach biurowych nie jest to wymagane, dobrą praktyką jest kończenie zapytań SQL znakiem średnika.
Instrukcja SELECT służy do pobierania danych z tabeli. Najprostsze zapytanie odczytujące wszystkie rekordy tabeli wygląda tak:
Symbol gwiazdki (*) oznacza wszystkie pola tabeli. Po klauzuli FROM podajemy nazwę tabeli, z której pobieramy dane.
Częściej potrzebne będzie zapytanie, dzięki któremu uzyskujemy dane z konkretnych pól:
Jeżeli nazwy pól są unikalne w obrębie bazy danych, nie trzeba ich poprzedzać nazwami tabel. W przeciwnym razie jest to konieczne, aby jednoznacznie wskazać pole. Stosujemy wtedy notację z kropką: tabela.pole.
Kryteria wyboru
Zazwyczaj chcemy w bazie danych wyszukać dane spełniające określone warunki – stosujemy wtedy kryteria ograniczające. Nakłada się je na konkretne pola za pomocą klauzuli warunkowej WHERE, np.:
WHERE pole > 1000– wybranie rekordów, w których wartość liczbowa pola jest większa od podanej,WHERE pole = 'Kowalski'– wybranie rekordów na podstawie dokładnego dopasowania tekstu,WHERE pole LIKE 'K%'– wybranie rekordów, w których wartość tekstowa rozpoczyna się literą „K”,WHERE pole LIKE 'J__'– wybranie rekordów, w których wartość tekstowa rozpoczyna się literą „J”, a po niej następują dwa dowolne znaki.
Literały znakoweLiterały znakowe w kryteriach, np. 'Kowalski', otaczane są pojedynczymi cudzysłowami (apostrofami), chociaż Microsoft Access dopuszcza również cudzysłowy podwójne.
W kryteriach z operatorem LIKE stosujemy znaki specjalne (symbole wieloznaczne). W standardzie ANSI SQL‑92 znak procent „%” oznacza dowolny ciąg znaków, znak podkreślenia „_” jeden dowolny znak.
Program Microsoft Access w zapytaniach SQL wymaga innych symboli dopasowania: znaku gwiazdki „*” (dowolny ciąg znaków) i znaku zapytania „?” (jeden dowolny znak). Oba te znaki stosuje się również podczas zapisywania warunków z operatorem LIKE podczas graficznego projektowania zapytań w programach LibreOffice Base i Microsoft Access.
Nieco bardziej skomplikowane jest nakładanie warunków na pola przechowujące datę i ewentualnie czas. W programie LibreOffice Base, aby wybrać rekordy z datą późniejszą lub równą podanej, użyjemy następującej składni:
WHERE pole >= '1980‑01‑01'
lub:
WHERE pole >= {d '1980‑01‑01'}
Natomiast w programie Microsoft Access:
WHERE pole >= #1980‑01‑01#
Znak „#” otacza daty (w odróżnieniu od wartości tekstowych) również w widoku graficznego projektu kwerendy w obu programach. Datę najczęściej zapisujemy w formacie ISO 8601 RRRR‑MM‑DD, czyli cztery cyfry roku, dwie cyfry miesiąca i dwie cyfry dnia oddzielone znakiem minus.
Wykonajmy kilka ćwiczeń.
W wybranym programie otwórz bazę pracownicy. Używając języka SQL, skonstruuj i wykonaj kwerendę wybierającą identyfikatory (pole id), imiona i nazwiska pracowników, których identyfikator jest mniejszy od 5.
W wybranym programie otwórz bazę pracownicy. Używając języka SQL, skonstruuj i wykonaj kwerendę wybierającą imiona i nazwiska pracowników, których nazwiska zaczynają się na literę „Z”.
W wybranym programie otwórz bazę pracownicy. Używając języka SQL, skonstruuj i wykonaj kwerendę wybierającą imiona i nazwiska pracowników urodzonych przed 1970 rokiem.
Oprócz wspomnianej w rozwiązaniu ostatniego ćwiczenia funkcji YEAR(), która zwraca rok, możemy również używać funkcji DAY() i MONTH(), które zwracają odpowiednio dzień i miesiąc z daty podanej jako argument.
Operatory logiczne
Wyrażenia w klauzulach warunkowych można łączyć za pomocą logicznych operatorów koniunkcji i alternatywy.
Przykład użycia logicznego operatora koniunkcji AND.
Powyższa kwerenda wybierze rekordy, w których rok urodzenia pracownika jest większy od 1969 i mniejszy od 1981. Wyrażenia warunkowe z operatorem AND są prawdziwe, jeżeli prawdziwe są wszystkie połączone warunki. Każde użycie operatora AND ogranicza liczbę zwracanych rekordów.
Przykład użycia logicznego operatora alternatywy OR.
Kwerenda wybierze rekordy pracowników, których imię to „Jan” lub „Ewa”. Wyrażenia warunkowe z operatorem OR zazwyczaj zwiększają liczbę zwracanych rekordów.
Warunki zawierające alternatywę często zapisuje się z użyciem operatora SQL IN. Poprzednią kwerendę możemy zapisać następująco:
Przykład użycia operatora IN.
Operatorem logicznym jest również negacja.
Kwerenda wybierze rekordy pracowników, których imiona nie znajdują się w zbiorze podanych w nawiasach wartości.
instrukcje SQL kończą się średnikiem,
nazwy pól lub tabel – jeżeli zawierają spacje – zapisujemy w cudzysłowach (LibreOffice Base) lub nawiasach kwadratowych (Microsoft Access),
nazwy pól mogą być poprzedzone nazwą tabeli i znakiem kropki,
pojedynczymi cudzysłowami otaczamy literały znakowe (ang. string literal),
daty w zapytaniach zapisujemy następująco:
'RRRR‑MM‑DD'lub{d 'RRRR‑MM‑DD'}w LibreOffice Base;#RRRR‑MM‑DD#w Microsoft Access.
Słownik
pojedyncze polecenie SQL, element konstrukcji zapytań, np. SELECT, FROM, WHERE
inaczej ciąg znakowy, to seria znaków ujęta w cudzysłowy, najczęściej używa się cudzysłowów pojedynczych,
schematyczny opis tabel, to znaczy zawartych w nich kolumn oraz ich typów danych, a także relacji, czyli związków między tabelami
tabela, która umożliwia tworzenie relacji wiele‑do‑wielu
(ang. query) inaczej kwerenda, instrukcja złożona z klauzul SQL, wykonująca operacje na bazie danych
