Tabela, na której ćwiczymy
Wszystkie przykłady działają na dwóch prostych tabelach: uczniowie (id, imie, nazwisko, klasa, rok_urodzenia) i oceny (id, uczen_id, przedmiot, ocena). W arkuszach CKE tabele są inne, ale schemat zapytań zostaje ten sam.
SELECT: wybieranie danych
SELECT imie, nazwisko FROM uczniowie;
SELECT * FROM uczniowie WHERE klasa = '3TI';
SELECT imie, nazwisko FROM uczniowie WHERE rok_urodzenia >= 2007 AND klasa = '3TI';
* oznacza wszystkie kolumny. Tekst w warunku piszemy w apostrofach, liczby bez.
Sortowanie i ograniczanie wyników
SELECT imie, nazwisko FROM uczniowie ORDER BY nazwisko ASC;
SELECT imie, nazwisko FROM uczniowie ORDER BY rok_urodzenia DESC LIMIT 3;
ASC to rosnąco (domyślnie), DESC malejąco. LIMIT 3 zostawia trzy pierwsze wiersze.
LIKE, IN i BETWEEN
SELECT * FROM uczniowie WHERE nazwisko LIKE 'K%';
SELECT * FROM uczniowie WHERE nazwisko LIKE '_o%';
SELECT * FROM uczniowie WHERE klasa IN ('3TI', '4TI');
SELECT * FROM oceny WHERE ocena BETWEEN 3 AND 5;
W LIKE znak % zastępuje dowolny ciąg znaków, a _ dokładnie jeden znak. To częsty temat pytań teoretycznych.
Funkcje agregujące i GROUP BY
SELECT COUNT(*) FROM uczniowie;
SELECT AVG(ocena) FROM oceny WHERE przedmiot = 'matematyka';
SELECT klasa, COUNT(*) AS liczba FROM uczniowie GROUP BY klasa;
SELECT klasa, COUNT(*) AS liczba FROM uczniowie GROUP BY klasa HAVING COUNT(*) > 20;
COUNT, SUM, AVG, MIN i MAX liczą jedną wartość z wielu wierszy. GROUP BY dzieli wiersze na grupy, a HAVING filtruje już policzone grupy (warunek na wynik funkcji agregującej nie może być w WHERE).
JOIN: łączenie tabel
SELECT uczniowie.imie, uczniowie.nazwisko, oceny.ocena
FROM uczniowie
JOIN oceny ON oceny.uczen_id = uczniowie.id
WHERE oceny.przedmiot = 'informatyka';
JOIN (czyli INNER JOIN) zostawia tylko wiersze, które mają parę w obu tabelach. LEFT JOIN zostawia wszystkie wiersze z lewej tabeli, nawet bez pary, a brakujące kolumny wypełnia wartością NULL.
INSERT, UPDATE, DELETE
INSERT INTO uczniowie (imie, nazwisko, klasa, rok_urodzenia) VALUES ('Ola', 'Nowak', '3TI', 2007);
UPDATE uczniowie SET klasa = '4TI' WHERE id = 12;
DELETE FROM oceny WHERE ocena = 1;
Przy UPDATE i DELETE zawsze pisz WHERE. Bez niego zmienisz albo usuniesz wszystkie wiersze w tabeli.
Zmiany w strukturze tabeli
ALTER TABLE uczniowie ADD email VARCHAR(100);
ALTER TABLE uczniowie DROP COLUMN email;
CREATE TABLE przedmioty (id INT AUTO_INCREMENT PRIMARY KEY, nazwa VARCHAR(50) NOT NULL);
Użytkownicy i uprawnienia
W pytaniach teoretycznych często pojawia się zarządzanie dostępem:
CREATE USER 'jan'@'localhost' IDENTIFIED BY 'Haslo123!';
GRANT SELECT, INSERT ON szkola.* TO 'jan'@'localhost';
REVOKE INSERT ON szkola.* FROM 'jan'@'localhost';
GRANT nadaje uprawnienia, REVOKE je odbiera.
Sprawdź się
Pytań z baz danych i SQL jest w arkuszach najwięcej. Przećwicz je w bazie pytań z działu MySQL, każde z wyjaśnieniem, dlaczego dana odpowiedź jest poprawna.