1. Składnia poleceń SQL (DDL, DML, DCL)
SQL to język komunikacji z bazą danych.
Nie jest to język programowania, tylko zestaw poleceń, które opisują:
co ma powstać, jakie dane zapisać i kto ma do nich dostęp.
Na egzaminie bardzo często pytania opierają się właśnie na podziale SQL na grupy poleceń.
DDL – tworzy i usuwa strukturę (bazy, tabele)
DML – operuje na danych (dodaje, zmienia, usuwa rekordy)
DCL – zarządza dostępem użytkowników
DML – operuje na danych (dodaje, zmienia, usuwa rekordy)
DCL – zarządza dostępem użytkowników
CREATE DATABASE szkola; USE szkola;
Pierwsza linia zakłada nową bazę danych.
Druga ustawia ją jako aktualnie używaną, bez tego kolejne polecenia
nie wiedziałyby, gdzie mają trafić.
CREATE TABLE uczniowie ( id INT AUTO_INCREMENT PRIMARY KEY, imie VARCHAR(30), nazwisko VARCHAR(30) );
Każda tabela powinna mieć klucz główny.
AUTO_INCREMENT sprawia, że baza sama nadaje kolejne numery rekordom,
co jest standardem na egzaminie.
INSERT INTO uczniowie (imie, nazwisko)
VALUES ('Jan', 'Kowalski'), ('Anna', 'Nowak');
INSERT zapisuje dane do tabeli.
W jednej instrukcji można dodać wiele rekordów,
co skraca kod i przyspiesza działanie bazy.
CREATE USER 'uczen'@'localhost' IDENTIFIED BY '1234'; GRANT SELECT, INSERT ON szkola.* TO 'uczen'@'localhost';
Najpierw tworzony jest użytkownik bazy,
a potem nadawane są mu konkretne prawa.
Na egzaminie często sprawdzane jest,
czy uczeń potrafi odróżnić CREATE USER od GRANT.
DROP DATABASE IF EXISTS test;
IF EXISTS zabezpiecza przed błędem,
jeśli baza nie istnieje.
To dobra praktyka w skryptach.
Jak to wygląda na egzaminie?
W poleceniach pojawiają się często sformułowania: „utwórz bazę danych”, „zdefiniuj tabele” lub „uzupełnij skrypt tworzący bazę”. To są zadania z grupy DDL. Dodawanie przykładowych rekordów do tabeli to już typowe polecenia z grupy DML.
W poleceniach pojawiają się często sformułowania: „utwórz bazę danych”, „zdefiniuj tabele” lub „uzupełnij skrypt tworzący bazę”. To są zadania z grupy DDL. Dodawanie przykładowych rekordów do tabeli to już typowe polecenia z grupy DML.
Uwaga egzaminacyjna:
– pomylenie CREATE TABLE z INSERT INTO to częsty błąd
– brak PRIMARY KEY w tabeli zwykle oznacza utratę punktów
– DROP DATABASE bez IF EXISTS może zakończyć skrypt błędem
– pomylenie CREATE TABLE z INSERT INTO to częsty błąd
– brak PRIMARY KEY w tabeli zwykle oznacza utratę punktów
– DROP DATABASE bez IF EXISTS może zakończyć skrypt błędem
2. Tworzenie struktury bazy danych
Dobrze zaprojektowana baza danych to taka,
która pilnuje poprawności danych sama z siebie.
Służą do tego klucze oraz ograniczenia.
CREATE TABLE klasy ( id INT AUTO_INCREMENT PRIMARY KEY, symbol VARCHAR(10) UNIQUE, wychowawca VARCHAR(50) );
UNIQUE gwarantuje, że symbol klasy się nie powtórzy.
Baza zablokuje próbę wstawienia duplikatu.
CREATE TABLE uczniowie ( id INT AUTO_INCREMENT PRIMARY KEY, imie VARCHAR(30), nazwisko VARCHAR(30), id_klasy INT, FOREIGN KEY (id_klasy) REFERENCES klasy(id) );
FOREIGN KEY tworzy relację między tabelami.
Nie da się przypisać ucznia do klasy,
która nie istnieje w tabeli klasy.
Zanim dodasz klucz obcy, zadaj sobie pytanie:
czy w tej tabeli naprawdę muszę przechowywać dodatkowe dane,
czy wystarczy powiązanie z inną tabelą?
Jeżeli dane się powtarzają (np. nazwy klas),
to znak, że powinny trafić do osobnej tabeli
i zostać połączone kluczem obcym.
ALTER TABLE uczniowie ADD CONSTRAINT srednia_check CHECK (srednia BETWEEN 1 AND 6);
CHECK pilnuje zakresu wartości.
Jeśli ktoś spróbuje wpisać 7,
baza odrzuci taki rekord.
ALTER TABLE uczniowie ADD COLUMN data_urodzenia DATE;
ALTER TABLE pozwala zmieniać strukturę tabeli
bez usuwania danych.
Zadanie:
W tabeli uczniowie chcesz dodać kolumnę plec, która może przyjmować tylko wartości 'K' lub 'M'.
Zapisz polecenie ALTER TABLE z odpowiednim ograniczeniem CHECK.
W tabeli uczniowie chcesz dodać kolumnę plec, która może przyjmować tylko wartości 'K' lub 'M'.
Zapisz polecenie ALTER TABLE z odpowiednim ograniczeniem CHECK.
ALTER TABLE uczniowie
ADD COLUMN plec CHAR(1),
ADD CONSTRAINT plec_check CHECK (plec IN ('K','M'));
Jak to wygląda w zadaniu egzaminacyjnym?
Bardzo często dostajesz opis w stylu: „Średnia ocen ucznia zawiera się w przedziale od 1 do 6”. Jeśli widzisz taki zakres w treści, to prawie zawsze możesz za to dostać punkt, dodając odpowiedni CHECK w tabeli.
Bardzo często dostajesz opis w stylu: „Średnia ocen ucznia zawiera się w przedziale od 1 do 6”. Jeśli widzisz taki zakres w treści, to prawie zawsze możesz za to dostać punkt, dodając odpowiedni CHECK w tabeli.
3. Wyszukiwanie informacji (SELECT)
SELECT to najczęściej używane polecenie SQL.
Na egzaminie zawsze pojawia się w kilku wariantach:
z warunkiem, sortowaniem i łączeniem tabel.
SELECT * FROM uczniowie;
Gwiazdkę stosujemy głównie do testów.
W praktyce lepiej wybierać konkretne kolumny.
SELECT imie, nazwisko FROM uczniowie WHERE id_klasy = 1;
WHERE filtruje dane.
Bez niego zapytanie zwróci wszystkie rekordy.
WHERE działa jak filtr.
Jeżeli go nie użyjesz, baza zwróci wszystkie rekordy.
Na egzaminie brak WHERE to jeden z najczęstszych powodów
utraty punktów przy zapytaniach.
SELECT uczniowie.imie, uczniowie.nazwisko, klasy.symbol FROM uczniowie JOIN klasy ON uczniowie.id_klasy = klasy.id;
JOIN pozwala pobrać dane z wielu tabel naraz.
To jeden z kluczowych tematów INF.03.
Zanim napiszesz JOIN, zadaj sobie pytanie:
czy wszystkie potrzebne dane są w jednej tabeli?
Jeśli nie, musisz je połączyć.
Dlatego JOIN pojawia się od razu po FROM,
a warunek łączenia zawsze trafia do ON.
W tym miejscu wiele osób próbuje zmieścić wszystko
w jednej tabeli i jednym SELECT bez JOIN.
Działa to tylko przy bardzo prostych bazach,
ale na egzaminie prawie zawsze pojawiają się
co najmniej dwie powiązane tabele.
Zadanie:
Wyświetl imię i nazwisko uczniów, którzy należą do klasy o symbolu „4TI”.
Wyświetl imię i nazwisko uczniów, którzy należą do klasy o symbolu „4TI”.
SELECT uczniowie.imie, uczniowie.nazwisko FROM uczniowie JOIN klasy ON uczniowie.id_klasy = klasy.id WHERE klasy.symbol = '4TI';
Jak to wygląda w zadaniu egzaminacyjnym?
Najczęściej dostajesz gotową bazę i polecenie w stylu: „Wyświetl listę uczniów wraz z symbolami klas”. Jeżeli w wyniku mają być dane z dwóch tabel, to prawie na pewno trzeba użyć JOIN.
Najczęściej dostajesz gotową bazę i polecenie w stylu: „Wyświetl listę uczniów wraz z symbolami klas”. Jeżeli w wyniku mają być dane z dwóch tabel, to prawie na pewno trzeba użyć JOIN.
Uwaga egzaminacyjna:
– brak aliasów tabel jest poprawny, ale obniża czytelność kodu
– SELECT * jest akceptowalny, o ile treść zadania nie prosi o konkretne kolumny
– literówka w nazwie kolumny zwykle oznacza 0 punktów za całe zapytanie
– brak aliasów tabel jest poprawny, ale obniża czytelność kodu
– SELECT * jest akceptowalny, o ile treść zadania nie prosi o konkretne kolumny
– literówka w nazwie kolumny zwykle oznacza 0 punktów za całe zapytanie
4. Modyfikacja danych i transakcje
Operacje na danych są nieodwracalne,
dlatego w poważnych systemach stosuje się transakcje.
START TRANSACTION; UPDATE uczniowie SET id_klasy = 2 WHERE id = 3; COMMIT;
COMMIT zatwierdza zmiany na stałe.
Po nim nie da się już cofnąć operacji.
START TRANSACTION; DELETE FROM uczniowie WHERE id_klasy = 2; ROLLBACK;
ROLLBACK cofa wszystkie zmiany wykonane
od momentu rozpoczęcia transakcji.
To polecenie wygląda niewinnie,
ale użyte bez zastanowienia potrafi wyczyścić całą tabelę.
Dlatego dobrą praktyką jest najpierw napisać SELECT
z takim samym WHERE, a dopiero potem zamienić SELECT
na UPDATE lub DELETE.
Zadanie:
Zmień wszystkim uczniom z klasy o symbolu „3A” numer klasy na „4A” w ramach jednej transakcji. Jeśli coś pójdzie nie tak, zmiany mają zostać cofnięte.
Zmień wszystkim uczniom z klasy o symbolu „3A” numer klasy na „4A” w ramach jednej transakcji. Jeśli coś pójdzie nie tak, zmiany mają zostać cofnięte.
START TRANSACTION; UPDATE uczniowie JOIN klasy ON uczniowie.id_klasy = klasy.id SET uczniowie.id_klasy = ( SELECT id FROM klasy WHERE symbol = '4A' ) WHERE klasy.symbol = '3A'; -- jeśli wszystko OK: COMMIT; -- jeśli coś jest nie tak, zamiast COMMIT użyj: -- ROLLBACK;
Częsty błąd:
UPDATE lub DELETE bez WHERE modyfikuje wszystkie rekordy w tabeli. Na egzaminie traktowane jest to jako błąd krytyczny i najczęściej kończy się utratą punktów za całe polecenie.
UPDATE lub DELETE bez WHERE modyfikuje wszystkie rekordy w tabeli. Na egzaminie traktowane jest to jako błąd krytyczny i najczęściej kończy się utratą punktów za całe polecenie.
5. Skrypty SQL i automatyzacja
Skrypt SQL to plik,
który potrafi odtworzyć całą bazę od zera.
Na egzaminie często pracujesz właśnie na takim gotowym skrypcie.
CREATE VIEW IT_Pracownicy AS SELECT * FROM pracownicy WHERE dzial='IT';
Widok działa jak zapamiętane zapytanie.
Ułatwia pracę i poprawia czytelność kodu.
Jak to wygląda w zadaniu egzaminacyjnym?
W treści możesz spotkać polecenie: „Utwórz widok zawierający pracowników działu IT i zapisz go pod nazwą IT_Pracownicy”. Skoro nazwa widoku jest podana dosłownie, to musi zostać użyta dokładnie w takiej formie, łącznie z wielkością liter, jeśli system ją rozróżnia.
W treści możesz spotkać polecenie: „Utwórz widok zawierający pracowników działu IT i zapisz go pod nazwą IT_Pracownicy”. Skoro nazwa widoku jest podana dosłownie, to musi zostać użyta dokładnie w takiej formie, łącznie z wielkością liter, jeśli system ją rozróżnia.