Czym jest SQL, na jakie rodziny dzielą się polecenia (DDL, DML, DCL, DQL), jak wygląda poprawna składnia zapytania i jak dobrać typ danych kolumny w MySQL. Lekcja 8.1 kursu INF.03.
SQL (Structured Query Language, czyli strukturalny język zapytań) to język, w którym mówisz bazie, CO ma zrobić, a nie jak to zrobić. Piszesz „daj produkty droższe niż sto złotych", a nie „przejrzyj tabelę wiersz po wierszu". Na egzaminie pisemnym wracają dwa pytania z tej lekcji: do której rodziny należy dane polecenie oraz jaki typ danych pasuje do kolumny. W części praktycznej od typu danych zależy punkt za zadanie w rodzaju „dodaj kolumnę mieszczącą liczby od 0 do 255".
Cztery rodziny poleceń
Poleceń SQL jest kilkadziesiąt, ale na egzaminie dzieli się je na cztery grupy według tego, czego dotyczą.
Skrót
Pełna nazwa
Co robi
Polecenia
DDL
Data Definition Language
definiuje STRUKTURĘ: bazy, tabele, kolumny
CREATE, ALTER, DROP, TRUNCATE
DML
Data Manipulation Language
zmienia DANE w tabelach
INSERT, UPDATE, DELETE
DQL
Data Query Language
pobiera dane
SELECT
DCL
Data Control Language
nadaje i odbiera uprawnienia
GRANT, REVOKE
Piąta, rzadziej pytana grupa to TCL (Transaction Control Language): START TRANSACTION, COMMIT, ROLLBACK. Zajmuje się nią lekcja o transakcjach.
Podział ma prostą logikę: DDL dotyczy POJEMNIKA (tabela, kolumna), DML jego ZAWARTOŚCI (wiersze), DCL tego, KTO ma prawo tam zaglądać. Część podręczników i pytań zalicza SELECT do DML, bo obie grupy operują na danych, a nie na strukturze. Jeżeli w pytaniu jest osobna odpowiedź DQL, wybierz DQL; jeżeli jej nie ma, SELECT to DML.
Pułapka: DROP TABLE i DELETE brzmią podobnie, a należą do różnych rodzin. DROP usuwa CAŁĄ TABELĘ razem ze strukturą (DDL), DELETE usuwa WIERSZE, a pusta tabela zostaje (DML).
Jak wygląda poprawne polecenie
SELECT nazwa, cena
FROM produkt
WHERE cena > 100;
Kilka zasad, które w pytaniach decydują o poprawnej odpowiedzi:
›
Średnik kończy polecenie. W phpMyAdmin jedno zapytanie zadziała bez niego, ale skrypt z wieloma poleceniami bez średników nie ma szans się wykonać.
›
Wielkość liter w słowach kluczowych nie ma znaczenia, select działa tak samo jak SELECT. Przyjęło się pisać słowa kluczowe wielkimi literami, bo to zwiększa czytelność i tak zapisane są w arkuszach.
›
Wielkość liter w nazwach tabel ma znaczenie na Linuksie, a nie ma na Windowsie. Skoro serwer egzaminacyjny może być inny niż twój, trzymaj się dokładnie nazw z zadania.
›
Tekst stoi w apostrofach: 'Kraków'. Cudzysłów " w MySQL też zadziała, ale apostrof jest standardem SQL. Liczby zapisuje się bez apostrofów.
›
Odwrotny apostrof (znak pod klawiszem Esc) otacza nazwę kolumny lub tabeli, gdy nazwa zawiera spację albo jest słowem kluczowym, jak nazwa produktu albo order. phpMyAdmin dodaje go wszędzie, ale w zadaniu nie jest potrzebny.
›
Komentarz to -- treść do końca wiersza (dwa myślniki i SPACJA) albo /* treść */ na kilka wierszy. MySQL rozumie także # treść.
›
Białe znaki są dowolne. Zapytanie w jednym wierszu i zapytanie rozbite na pięć wierszy to dla bazy to samo. Rozbijaj, bo łatwiej znaleźć błąd.
Zapytanie poniżej wykonuje się w przeglądarce, na tabeli produkt:
Typy danych: liczby
Typ mówi, co wolno wpisać do kolumny i ile miejsca zajmie jedna wartość. Wybór typu to jedna z pierwszych decyzji przy tworzeniu tabeli i jedno z częstszych pytań na egzaminie.
Typ
Zakres
Rozmiar
Kiedy używać
TINYINT
-128 do 127; UNSIGNED 0 do 255
1 bajt
wiek, liczba sztuk, ocena
SMALLINT
-32 768 do 32 767
2 bajty
rok, liczba stron
INT
około -2,1 mld do 2,1 mld
4 bajty
domyślny wybór dla id i liczb całkowitych
BIGINT
bardzo duże liczby całkowite
8 bajtów
liczniki, identyfikatory globalne
DECIMAL(m, d)
dokładnie m cyfr, w tym d po przecinku
zależny
CENY i pieniądze
FLOAT, DOUBLE
liczby zmiennoprzecinkowe
4 lub 8 bajtów
pomiary, wyniki obliczeń
UNSIGNED (bez znaku) przesuwa zakres: skoro nie ma liczb ujemnych, górna granica rośnie dwukrotnie. Dlatego kolumna na wartość „od 0 do 255" to TINYINT UNSIGNED, i dokładnie o to pyta jeden z arkuszy praktycznych.
Pułapka: ceny zapisuje się w DECIMAL(8,2), a nie w FLOAT. FLOAT przechowuje liczbę w przybliżeniu, więc suma wielu cen potrafi wyjść 19,999999 zamiast 20. DECIMAL liczy dokładnie.
Typy danych: tekst, data i reszta
Typ
Co przechowuje
Uwaga
CHAR(n)
tekst STAŁEJ długości n znaków
krótkie kody: CHAR(2) na skrót kraju; krótsza wartość jest dopełniana spacjami
VARCHAR(n)
tekst do n znaków
domyślny wybór na imię, nazwę, adres
TEXT
długi tekst, do 65 535 znaków
opisy, treść artykułu; nie ma sensu na nazwisko
DATE
data RRRR-MM-DD
data urodzenia, termin
TIME
godzina GG:MM:SS
czas trwania
DATETIME
data i godzina
moment zamówienia
TIMESTAMP
data i godzina, zapisywana w strefie UTC
znacznik zmiany rekordu
BOOLEAN
prawda lub fałsz
w MySQL to naprawdę TINYINT(1): 0 to fałsz, 1 to prawda
ENUM('a','b')
jedna wartość z podanej listy
płeć, status zamówienia
BLOB
dane binarne
plik, obraz; na stronach lepiej trzymać ścieżkę do pliku
Różnica między CHAR a VARCHAR jest ulubionym pytaniem: CHAR(10) zawsze zajmuje dziesięć znaków, VARCHAR(10) tyle, ile faktycznie wpisano, plus jeden bajt na długość. Do kolumny z nazwiskami wybierz VARCHAR, do kolumny z kodem pocztowym o stałym formacie CHAR.
Format daty w SQL jest zawsze RRRR-MM-DD, czyli '2026-09-07', niezależnie od tego, jak datę wyświetla system operacyjny. Zapis '07.09.2026' w zapytaniu nie zadziała.
NULL, czyli brak wartości
NULL (nic) to nie zero i nie pusty tekst. Oznacza, że wartości nie znamy. Kolumna z ograniczeniem NOT NULL nie przyjmie takiego wiersza, a kolumna bez tego ograniczenia przyjmie. Porównania z NULL nie działają przez =, tylko przez IS NULL, co opisuje lekcja o SELECT.
sztuk INT NULL -- wolno nie wiedzieć, ile jest sztuk
nazwa VARCHAR(80) NOT NULL -- nazwa jest obowiązkowa
Na egzaminie
Pytania z tej lekcji mają trzy kształty. Pierwszy: „Do której grupy poleceń należy ALTER TABLE" z odpowiedziami DDL, DML, DCL, DQL. Drugi: „Który typ danych zapisze wartość 12,50 zł bez błędu zaokrąglenia" albo „Jaki typ wybrać dla wartości od 0 do 255". Trzeci: rozpoznanie błędu w zapisie, na przykład daty w polskim formacie albo tekstu bez apostrofów.
W części praktycznej typy danych pojawiają się przy poleceniu ALTER TABLE ... ADD, gdzie arkusz opisuje kolumnę słowami, a ty masz dobrać typ. Zapamiętaj trzy pary: liczby całkowite to INT, małe liczby dodatnie to TINYINT UNSIGNED, pieniądze to DECIMAL.
Ściąga
DDL
CREATE, ALTER, DROP, TRUNCATE: struktura
DML
INSERT, UPDATE, DELETE: dane
DQL
SELECT: pobieranie danych
DCL
GRANT, REVOKE: uprawnienia
koniec polecenia
średnik
komentarz
-- tekst, /* tekst */, # tekst
tekst i data
w apostrofach, data jako 'RRRR-MM-DD'
liczba całkowita
INT, mała dodatnia TINYINT UNSIGNED (0 do 255)
cena
DECIMAL(8,2), nigdy FLOAT
krótki tekst
VARCHAR(n); stała długość CHAR(n)
brak wartości
NULL, blokuje go NOT NULL
Pobierz ściągę PDF