INF.03 HUB - SQL

Dokumentacja SQL pod egzamin INF.03. Każda sekcja zawiera opis, zastosowanie, przykłady i najczęstsze błędy.

SELECT

Co robi? Pobiera dane z tabeli.

Częstotliwość: ~90%

SELECT * FROM produkty; 
SELECT nazwa, cena FROM produkty;
SELECT nazwa AS Produkt FROM produkty;
SELECT DISTINCT miasto FROM klienci;

Błędy: brak FROM, brak kolumn po SELECT.

WHERE

Filtrowanie rekordów.

SELECT * FROM produkty WHERE id = 1;
SELECT * FROM produkty WHERE cena > 100;
SELECT * FROM produkty WHERE cena < 100;
SELECT * FROM produkty WHERE cena >= 100;
SELECT * FROM produkty WHERE cena <= 100;
SELECT * FROM produkty WHERE cena <> 100;

Częstotliwość: ~65%

BETWEEN

Wybór rekordów z zakresu.

SELECT * FROM produkty WHERE cena BETWEEN 100 AND 500;

IN

Sprawdza czy wartość znajduje się na liście.

SELECT * FROM produkty WHERE id IN (1,2,3);

LIKE

Wyszukiwanie tekstu.

WHERE nazwa LIKE '%kot%';
WHERE nazwa LIKE 'Kot%';
WHERE nazwa LIKE '%Kot';
Najczęstszy błąd: brak apostrofów wokół wzorca.

AND / OR / NOT

SELECT * FROM produkty WHERE cena > 100 AND cena < 500;
SELECT * FROM produkty WHERE id = 1 OR id = 2;
SELECT * FROM produkty WHERE NOT cena > 100;

ORDER BY

Sortowanie wyników.

ORDER BY nazwa ASC;
ORDER BY cena DESC;

LIMIT

Ograniczenie liczby rekordów.

SELECT * FROM produkty LIMIT 5;
SELECT * FROM produkty LIMIT 5,5;

COUNT

Liczenie rekordów.

SELECT COUNT(*) FROM produkty;
SELECT COUNT(*) FROM produkty WHERE cena > 100;

AVG / MIN / MAX / SUM

SELECT AVG(cena) FROM produkty;
SELECT MIN(cena) FROM produkty;
SELECT MAX(cena) FROM produkty;
SELECT SUM(cena) FROM produkty;

GROUP BY

Grupowanie rekordów.

SELECT kategoria, COUNT(*) FROM produkty GROUP BY kategoria;

Typowe zadanie CKE: policz elementy w każdej kategorii.

HAVING

Warunek dla GROUP BY.

SELECT kategoria, COUNT(*) FROM produkty
GROUP BY kategoria
HAVING COUNT(*) > 5;

JOIN

Łączenie tabel.

Częstotliwość: ~80%

SELECT * FROM produkty
JOIN kategorie ON produkty.idKat = kategorie.id;
Najczęstszy błąd: brak ON.

INNER JOIN

SELECT * FROM produkty
INNER JOIN kategorie ON produkty.idKat = kategorie.id;

LEFT JOIN

SELECT * FROM produkty
LEFT JOIN kategorie ON produkty.idKat = kategorie.id;

INSERT

Dodawanie rekordów.

INSERT INTO produkty(nazwa,cena) VALUES('Laptop',5000);

UPDATE

UPDATE produkty SET cena = 4000 WHERE id = 1;
Bez WHERE zmienisz wszystkie rekordy.

DELETE

DELETE FROM produkty WHERE id = 1;
Bez WHERE usuniesz wszystkie rekordy.

ALTER TABLE

ALTER TABLE produkty ADD opis VARCHAR(255);

CREATE TABLE

CREATE TABLE produkty( 
    id INT PRIMARY KEY, nazwa VARCHAR(100), cena FLOAT
);

Funkcje dat

SELECT CURRENT_DATE;
SELECT CURRENT_TIME;
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 7 DAY);

Gotowiec egzaminacyjny #1

SELECT produkty.nazwa, kategorie.nazwa FROM produkty
JOIN kategorie ON produkty.idKat = kategorie.id
WHERE produkty.cena > 100
ORDER BY produkty.nazwa ASC;

Gotowiec egzaminacyjny #2

SELECT kategoria, COUNT(*) AS liczba FROM produkty GROUP BY kategoria;