Zapytania SQL na INF.03: ściąga z przykładami

Na INF.03 potrzebujesz kilku rodzajów zapytań SQL: SELECT z WHERE i ORDER BY, LIKE, funkcji COUNT i AVG z GROUP BY, złączeń JOIN, INSERT, UPDATE i DELETE oraz GRANT do uprawnień. Każde pokazujemy na krótkim przykładzie.

Redakcja egzamininf.pl 2 min czytania

Tablica z zapytaniem SQL SELECT z JOIN i kartką ze ściągą tematów

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.

Czytaj dalej

  1. Jak uczyć się do części pisemnej INF.03 Najlepiej zacząć od pełnego testu 40 pytań, potem przerabiać najsłabsze działy na prawdziwych pytaniach CKE z wyjaśnieniami i regularnie robić egzami…
  2. Arkusz praktyczny INF.03: plan na 150 minut Na arkusz praktyczny INF.03 masz 150 minut na bazę danych z SQL, stronę w HTML i CSS oraz skrypt w PHP albo JavaScripcie. Zacznij od przeczytania cał…
  3. Egzamin INF.03: jak wygląda i ile trzeba zdobyć punktów Egzamin INF.03 ma dwie części: pisemną (40 pytań w 60 minut, zdajesz od 50%) i praktyczną (arkusz w 150 minut, zdajesz od 75%). Żeby dostać certyfika…