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

R1NS0EfVfCVnq

Przycisk do pobrania pliku bazy danych LibreOffice Base.

Baza danych LibreOffice Base
Plik ODB o rozmiarze 6.26 KB w języku polskim
RjmZGLHjC4ZLb

Przycisk do pobrania pliku bazy danych Microsoft Access.

Baza danych Microsoft Access
Plik ACCDB o rozmiarze 516.00 KB w języku polskim
Ćwiczenie 1

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:

Linia 1. SELECT cudzysłów imie cudzysłów przecinek cudzysłów nazwisko cudzysłów przecinek cudzysłów data podkreślnik urodz cudzysłów FROM cudzysłów pracownicy cudzysłów.

W programie Microsoft Access nazwy wybieranych pól poprzedzone będą nazwą tabeli:

Linia 1. SELECT pracownicy kropka imie przecinek pracownicy kropka nazwisko przecinek pracownicy kropka data podkreślnik urodz. Linia 2. FROM pracownicy średnik.
Ważne!

Składnia języka SQL różni się nieco w zależności od wykorzystywanego programu lub systemu bazodanowego. Polecenia tego języka nazywamy klauzulamiklauzula SQLklauzulami, zapytaniamizapytanie SQLzapytaniami lub kwerendami i zapisujemy wielkimi literami ze względu na czytelność (nie jest to obowiązkowe).

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:

Przykład 1
Linia 1. SELECT asterysk FROM tabela średnik.

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:

Przykład 2
Linia 1. otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny SELECT otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny pole1 przecinek pole2 FROM tabela średnik.
Ważne!

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

Przykład 3
  • 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.

Ważne!

Literały znakoweliterał znakowyLiterał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:

Przykład 4
  • WHERE pole >= '1980‑01‑01'

lub:

Przykład 5
  • WHERE pole >= {d '1980‑01‑01'}

Natomiast w programie Microsoft Access:

Przykład 6
  • 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ń.

Ćwiczenie 2

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.

Ćwiczenie 3

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

Ćwiczenie 4

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()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 7

Przykład użycia logicznego operatora koniunkcji AND.

Linia 1. SELECT imie przecinek nazwisko przecinek data podkreślnik urodz. Linia 2. FROM pracownicy. Linia 3. WHERE YEAR otwórz nawias okrągły data podkreślnik urodz zamknij nawias okrągły zamknij nawias ostrokątny 1969 AND YEAR otwórz nawias okrągły data podkreślnik urodz zamknij nawias okrągły otwórz nawias ostrokątny 1981 średnik.

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 8

Przykład użycia logicznego operatora alternatywy OR.

Linia 1. SELECT imie przecinek nazwisko. Linia 2. FROM pracownicy. Linia 3. WHERE imie znak równości apostrof Jan apostrof OR imie znak równości apostrof Ewa apostrof średnik.

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 9

Przykład użycia operatora IN.

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

Operatorem logicznym jest również negacja.

Przykład 10
Linia 1. SELECT imie przecinek nazwisko. Linia 2. FROM pracownicy. Linia 3. WHERE imie NOT IN otwórz nawias okrągły apostrof Jan apostrof przecinek apostrof Ewa apostrof zamknij nawias okrągły średnik.

Kwerenda wybierze rekordy pracowników, których imiona nie znajdują się w zbiorze podanych w nawiasach wartości.

Już wiesz
  • 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

klauzula SQL
klauzula SQL

pojedyncze polecenie SQL, element konstrukcji zapytań, np. SELECT, FROM, WHERE

literał znakowy
literał znakowy

inaczej ciąg znakowy, to seria znaków ujęta w cudzysłowy, najczęściej używa się cudzysłowów pojedynczych,

schemat bazy
schemat bazy

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 pośrednia
tabela pośrednia

tabela, która umożliwia tworzenie relacji wiele‑do‑wielu

zapytanie SQL
zapytanie SQL

(ang. query) inaczej kwerenda, instrukcja złożona z klauzul SQL, wykonująca operacje na bazie danych