SQL od podstaw · część 01 · teoria

Co to jest SQL?
Język pracy z danymi.

SQL pozwala zapytać bazę o konkretne informacje, zmieniać dane i definiować ich strukturę. Zacznijmy od pojęć, dzięki którym kolejne zapytania będą zrozumiałe.

Część bazodanowa INF.03

Spis całego kursu SQL — 30 lekcji

Idź po kolei od podstaw do autorskiego zadania praktycznego. Kurs dotyczy bazodanowej części INF.03.

  1. Co to jest SQL? Bazy danych od podstaw
  2. Jak działa relacyjna baza danych?
  3. Relacje, klucze i diagram E/R
  4. Normalizacja: 1NF, 2NF, 3NF i anomalie
  5. Przygotowanie środowiska: XAMPP, MariaDB i phpMyAdmin
  6. Typy danych i NULL
  7. CREATE: baza, tabele i ograniczenia
  8. ALTER i DROP: zmiana struktury
  9. INSERT: dodawanie danych
  10. SELECT, aliasy i DISTINCT
  11. WHERE i logika warunków
  12. LIKE, IN, BETWEEN i IS NULL
  13. ORDER BY, LIMIT, TOP i FETCH
  14. Funkcje skalarne tekstowe
  15. Funkcje skalarne liczbowe
  16. Daty, CAST, CASE i COALESCE
  17. Funkcje agregujące: COUNT, SUM, AVG, MIN i MAX
  18. GROUP BY i HAVING: podsumowania w grupach
  19. INNER JOIN: łączenie danych z tabel
  20. LEFT JOIN, SELF JOIN, CROSS JOIN i relacje N:M
  21. Podzapytania, EXISTS i pułapka NOT IN
  22. UNION i widoki: łączenie i ponowne użycie wyników
  23. UPDATE i DELETE: bezpieczna zmiana danych
  24. Transakcje i podstawy wydajności
  25. Użytkownicy, uprawnienia i bezpieczeństwo SQL
  26. Import i eksport SQL oraz CSV
  27. Kopie zapasowe, odtwarzanie i kontrola spójności
  28. PHP i baza danych: mysqli oraz parametry zapytań
  29. Formularze i raporty oparte na bazie danych
  30. Zadanie końcowe SQL: od importu do raportu i odtworzenia

Pobierz syntetyczne dane SQL i CSV

Edytor wykonuje zapytania w SQLite w przeglądarce. Tryby MySQL i SQL Server to ograniczona emulacja składni; Oracle i Access są omawiane porównawczo. Administrację, PHP, import i kopie wykonuj w osobnym środowisku zgodnie z instrukcjami lekcji.

SQL to skrót od Structured Query Language, czyli strukturalnego języka zapytań. Najczęściej wykorzystujemy go do pracy z relacyjnymi bazami danych: opisujemy, jakie dane chcemy otrzymać lub zmienić, a system zarządzania bazą danych dobiera sposób wykonania operacji.

To język w dużej mierze deklaratywny. Pisząc „pokaż produkty tańsze niż 100 zł”, wskazujesz oczekiwany rezultat. Zwykle nie opisujesz pętli przechodzącej kolejno przez każdy produkt. Nie oznacza to jednak, że każde zapytanie jest równie wydajne — do indeksów i planu wykonania wrócimy później.

Baza danych, SZBD i SQL — trzy różne pojęcia

Baza danych

Uporządkowany zbiór danych oraz struktur opisujących ich organizację. Przykład: produkty, klienci, zamówienia i powiązania między nimi w sklepie.

SZBD / DBMS

System zarządzania bazą danych: oprogramowanie przechowujące dane, wykonujące zapytania i kontrolujące dostęp oraz spójność. Przykłady: MySQL, MariaDB, SQL Server i Oracle Database.

SQL

Język poleceń przekazywanych do SZBD. SQL nie jest nazwą jednego programu i nie jest samą bazą danych.

Narzędzie klienckie

Interfejs, w którym wpisujesz polecenia lub oglądasz tabele: np. phpMyAdmin albo SQL Server Management Studio. phpMyAdmin nie jest silnikiem bazy.

Jak wygląda relacyjna baza danych?

Dane zapisujemy w tabelach. Kolumna, nazywana też atrybutem lub polem, opisuje jedną cechę, np. nazwę produktu. Wiersz, czyli rekord, reprezentuje konkretny obiekt. Typ kolumny określa, jakie wartości mają być w niej przechowywane — np. liczby całkowite, tekst albo daty.

Przykładowa tabela produkty — dane dydaktyczne
idnazwacena
1Klawiatura120,00
2Mysz60,00
3Kabel25,00

Klucz główny (PRIMARY KEY) identyfikuje każdy rekord: jest unikalny i nie przyjmuje NULL. Może składać się z jednej lub kilku kolumn. W przykładzie jest nim id. Klucz obcy (FOREIGN KEY) wskazuje powiązany rekord, np. klient_id w zamówieniu odnosi się do klucza klienta. Dzięki temu nie trzeba kopiować jego pełnych danych do każdego zamówienia.

NULL oznacza brak znanej lub właściwej wartości. Nie jest liczbą zero ani pustym tekstem. Inaczej interpretujemy „cena wynosi 0”, a inaczej „ceny jeszcze nie znamy”. Szczegóły porównań z NULL pojawią się w osobnej lekcji.

Pierwsze zapytanie — przeczytaj je jak zdanie

SELECT nazwa, cena
FROM produkty
WHERE cena < 100
ORDER BY cena, nazwa;

„Wybierz nazwę i cenę z tabeli produktów, pozostaw produkty tańsze niż 100 i uporządkuj wynik według ceny, a przy tej samej cenie według nazwy”.

  • SELECT wskazuje kolumny wyniku.
  • FROM wskazuje źródło danych.
  • WHERE filtruje wiersze.
  • ORDER BY określa kolejność. Bez niego silnik nie gwarantuje kolejności wyniku.

Dla przedstawionych danych oczekujemy dwóch wierszy: Kabel — 25,00, następnie Mysz — 60,00. To objaśnienie wyniku przykładu, a nie zrzut z wykonania w konkretnym serwerze. Polecenie SELECT odczytuje dane; nie zmienia cen ani nie usuwa produktów.

To samo zadanie, różne środowiska: powyższe proste zapytanie pasuje do MySQL/MariaDB, SQL Server, Oracle i Access, jeśli istnieje w nich taka tabela. Bardziej zaawansowana składnia, typy i funkcje nie są jednak identyczne.

Do czego służą poszczególne grupy poleceń?

CelPoleceniaCo robią?
OdczytSELECTWyszukuje i oblicza wyniki; często opisywany jako DQL.
Zmiana danych — DMLINSERT, UPDATE, DELETEDodają, zmieniają i usuwają rekordy.
Struktura — DDLCREATE, ALTER, DROPTworzą, zmieniają i usuwają obiekty, np. tabele.
Uprawnienia — DCLGRANT, REVOKENadają i odbierają uprawnienia w obsługujących je SZBD.
Transakcje — TCLCOMMIT, ROLLBACKZatwierdzają lub wycofują transakcję, zgodnie z regułami silnika.

Te skróty porządkują naukę, ale nie tworzą jednej obowiązkowej klasyfikacji. Niektóre dokumentacje zaliczają SELECT do DML. Składnia rozpoczęcia transakcji i możliwość cofnięcia DDL zależą od systemu. Nie zakładaj, że każde DROP da się cofnąć.

MySQL, MariaDB, SQL Server, Oracle i Access

Standard SQL jest wspólną podstawą, lecz producenci rozwijają własne odmiany, czyli dialekty. Dlatego w kursie będziemy porównywać tę samą intencję zapytania, zamiast mechanicznie zamieniać pojedyncze słowa.

MySQL / MariaDB

Dwa odrębne, spokrewnione SZBD działające jako serwery. Wiele podstawowych zapytań jest zgodnych, ale wersje, funkcje i zachowania trzeba sprawdzać. XAMPP często dostarcza MariaDB, choć panel może używać nazwy „MySQL”.

Microsoft SQL Server

Serwer baz danych z dialektem Transact-SQL (T-SQL). Przykładowe różnice to TOP, typy dat i właściwość IDENTITY.

Oracle Database

Serwer baz danych z własnym dialektem SQL. Istotne są m.in. sekwencje, funkcje dat oraz szczególne traktowanie pustego tekstu w typach znakowych.

Microsoft Access

Aplikacja do pracy z bazami, formularzami i raportami. Współczesne pliki .accdb korzystają z silnika ACE. Access może też być klientem bazy serwerowej, np. przez ODBC.

Serwerowa czy plikowa? Lokalna czy zdalna?

To dwa różne podziały. W modelu serwerowym osobny proces SZBD obsługuje połączenia i współbieżne żądania klientów. Ten serwer może działać na Twoim laptopie albo na komputerze w sieci. Lokalny MySQL nadal jest serwerem.

W bazie plikowej silnik może pracować wewnątrz aplikacji korzystającej z pliku. Przykładami są SQLite oraz plikowa baza Access. Access może udostępniać plik wielu użytkownikom, ale współdzielenie pliku nie zmienia ACE w taki sam serwer jak SQL Server. Dobór rozwiązania zależy m.in. od liczby użytkowników, współbieżności, administracji i sposobu wdrożenia.

Jak będą działały ćwiczenia? W kolejnych odpowiednich częściach pojawi się Edytor SQL z własnym zapytaniem, wynikiem, błędem i resetem. Jeśli obliczenia wykona SQLite z ograniczoną emulacją składni MySQL lub SQL Server, będzie to wyraźnie opisane. Taki wynik nie jest dowodem uruchomienia zapytania na prawdziwym MySQL, Oracle czy SQL Server.

Czego trzeba się nauczyć do części bazodanowej INF.03?

Samo SELECT nie wystarcza. Zakres obejmuje projektowanie i normalizację modelu, relacje i integralność, tworzenie oraz zmianę struktur, odczyt i modyfikację danych, funkcje, złączenia i podzapytania, a także administrację SZBD, użytkowników, uprawnienia, import, eksport, kopie i ich odtwarzanie. Potrzebne są również formularze, raporty oraz współpraca aplikacji z bazą.

SQL nie stanowi całej kwalifikacji INF.03. Trzeba przygotować się także do tworzenia i administrowania stronami oraz aplikacjami internetowymi, m.in. HTML, CSS, JavaScript i PHP. Porównania T-SQL, Oracle i Access pomagają zrozumieć różnice; nie oznaczają, że wszystkie ich rozszerzenia są osobnym wymaganiem egzaminacyjnym.

Plan kursu — od podstaw do zadań egzaminacyjnych
  1. Co to jest SQL? — ta część.
  2. Jak działa relacyjna baza danych?
  3. Relacje, klucze i diagramy E/R.
  4. Normalizacja: 1NF, 2NF, 3NF i anomalie.
  5. Przygotowanie środowiska: SZBD, XAMPP, MariaDB i phpMyAdmin.
  6. Typy danych i NULL.
  7. CREATE: baza, tabele, ograniczenia i auto-ID.
  8. ALTER i DROP.
  9. INSERT.
  10. SELECT, aliasy i DISTINCT.
  11. WHERE i logika.
  12. LIKE, IN, BETWEEN i IS NULL.
  13. ORDER BY i ograniczanie wyników.
  14. Funkcje skalarne tekstowe.
  15. Funkcje skalarne liczbowe.
  16. Funkcje dat, CAST, CASE i COALESCE.
  17. Funkcje agregujące.
  18. GROUP BY i HAVING.
  19. INNER JOIN.
  20. Pozostałe złączenia, SELF/CROSS i relacje N:M.
  21. Podzapytania, EXISTS, NOT IN i NULL.
  22. UNION i widoki.
  23. UPDATE i DELETE oraz porównanie DELETE/TRUNCATE/DROP.
  24. Transakcje i podstawy wydajności.
  25. Użytkownicy, uprawnienia i bezpieczeństwo.
  26. Import i eksport SQL/CSV.
  27. Kopie, próbne odtworzenie i diagnostyka.
  28. PHP i baza danych: bezpieczna parametryzacja.
  29. Formularze i raporty.
  30. Autorskie zadanie egzaminacyjne i lista kontrolna.

Odnośniki do gotowych części znajdziesz w kategorii SQL. Wpisy są publikowane kolejno.

Sprawdź rozumienie

  1. Czym różnią się SQL i MySQL?
  2. Czy baza na Twoim komputerze może być bazą serwerową?
  3. Czy SELECT zmienia dane w tabeli?
  4. Dlaczego identyfikator klienta jest zwykle lepszym kluczem niż samo imię?
  5. Czy NULL, pusty tekst i zero oznaczają to samo?
Odpowiedzi z wyjaśnieniem
  1. SQL jest językiem; MySQL jest SZBD, który wykonuje polecenia tego języka we własnym dialekcie.
  2. Tak. Serwer MySQL, MariaDB czy SQL Server może działać lokalnie i przyjmować połączenia z tego samego komputera.
  3. Zwykłe SELECT służy do odczytu. Może obliczać nowy wynik, ale nie aktualizuje przez to zapisanych wartości.
  4. Imiona mogą się powtarzać i zmieniać. Klucz powinien jednoznacznie oraz stabilnie identyfikować rekord; często wybiera się techniczny identyfikator.
  5. Nie. NULL oznacza brak wartości, pusty tekst jest wartością tekstową, a zero jest liczbą. Oracle traktuje pusty ciąg znakowy jak NULL — to ważny wyjątek dialektu.
Źródła i zakres materiału

Przykłady są autorskie i używają danych dydaktycznych. Szczegóły zależne od wersji silnika będą wskazywane przy danym zagadnieniu.

Przewijanie do góry