IT Akademia
Panel / ๐Ÿ’ป Programowanie i skrypty โ€” Git, Python, SQL, API / Lekcja 4/9

SQL: jak pytac bazy o dane

โฑ 18 min ยท poziom 3/5
๐Ÿ“œ Wprowadzenie โ€” od historii do szczegolu 1970-dzis

W 1970 Edgar Codd, matematyk w IBM, opublikowal prace, ktora zmienila swiat danych: model relacyjny, gdzie informacje trzyma sie w tabelach powiazanych logicznie, a nie w chaotycznych plikach. Na jego bazie powstal SQL โ€” jezyk, w ktorym MOWISZ, czego chcesz ('daj klientow z Warszawy'), a nie JAK to wyliczyc. Po ponad 50 latach wciaz rzadzi wiekszoscia baz na swiecie.

Umiejetnosc zapytania bazy to supermoc w IT โ€” raporty, diagnostyka, audyt. Od historii modelu relacyjnego zejdziemy do konkretu: struktura tabel, SELECT z warunkami (WHERE), sortowanie i grupowanie oraz laczenie tabel (JOIN). To praktyczny fundament, ktory w glebszych lekcjach rozwiniemy w normalizacje, transakcje i wydajnosc zapytan.

Po tej lekcji bedziesz umiec:

Dane firmy zyja w bazach. Umiejetnosc zadania pytania w SQL โ€” 'ilu userow nie logowalo sie 90 dni?' โ€” zamienia Cie z osoby proszacej o raport w osobe, ktora sama go zdobywa. To supermoc w IT.

Model relacyjny

Baza relacyjna to zbior **tabel** (wiersze = rekordy, kolumny = pola). Tabele lacza sie przez **klucze**: **klucz glowny (PK)** unikalnie identyfikuje wiersz, **klucz obcy (FK)** wskazuje na wiersz w innej tabeli.

SELECT โ€” serce SQL

SELECT login, ostatnie_logowanie
FROM uzytkownicy
WHERE aktywny = 1
ORDER BY ostatnie_logowanie ASC
LIMIT 10;

Agregacje i grupowanie

SELECT dzial, COUNT(*) AS liczba
FROM uzytkownicy
GROUP BY dzial
HAVING COUNT(*) > 5;
WHERE filtruje POJEDYNCZE wiersze PRZED grupowaniem; HAVING filtruje juz ZGRUPOWANE wyniki. Mylenie tych dwoch to klasyczny blad poczatkujacego.

JOIN โ€” laczenie tabel

Typ JOINZwraca
INNER JOINTylko pasujace wiersze z obu tabel
LEFT JOINWszystkie z lewej + pasujace z prawej (reszta NULL)
RIGHT JOINWszystkie z prawej + pasujace z lewej
FULL JOINWszystkie z obu, dopasowane gdzie sie da
SELECT u.login, d.nazwa
FROM uzytkownicy u
INNER JOIN dzialy d ON u.dzial_id = d.id;

Indeksy i CRUD

**Indeks** to jak spis tresci ksiazki โ€” przyspiesza wyszukiwanie kosztem miejsca i wolniejszych zapisow. Zapytanie po niezindeksowanej kolumnie na duzej tabeli = przemial calosci. Cztery operacje **CRUD**: INSERT (create), SELECT (read), UPDATE, DELETE.

Zawsze pisz UPDATE/DELETE z WHERE i sprawdz je najpierw jako SELECT. `DELETE FROM tabela;` bez WHERE kasuje CALA tabele. Miej backup przed zmianami masowymi.

๐ŸŽฏ Cwiczenia podsumowujace

Gotowe? Oznacz lekcje jako ukonczona
Postep zapisuje sie automatycznie.
โ† Poprzednia Nastepna โ†’