SQL

Język zapytań do relacyjnych baz danych, służący do pobierania, dodawania i modyfikowania danych w tabelach. Standard w pracy z bazami danych.

SQL (Structured Query Language) to język, którym rozmawiasz z relacyjną bazą danych. Nie piszesz w nim aplikacji ani pętli — mówisz bazie co chcesz dostać albo zmienić, a silnik bazy sam wymyśla jak to zrobić. Stąd nazwa „deklaratywny”: deklarujesz wynik, nie przepis. Standard opisuje go ISO/IEC 9075, a używają go praktycznie wszystkie popularne bazy: PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Server czy Oracle.

Dane w takiej bazie leżą w tabelach — wiersze (rekordy) i kolumny (pola), trochę jak arkusz, tylko z regułami. SQL dzieli się umownie na kilka rodzin poleceń: DQL/DML do pracy na danych (SELECT, INSERT, UPDATE, DELETE), DDL do struktury (CREATE, ALTER, DROP) i DCL do uprawnień (GRANT, REVOKE). Siła SQL-a to JOIN — łączenie tabel po wspólnym kluczu, żeby z osobnych „userów” i „zamówień” zrobić jeden sensowny widok.

Przykład z praktyki

Załóżmy, że masz sklep w PostgreSQL i chcesz dziesięciu klientów, którzy wydali najwięcej. Odpalasz w psql (albo w DBeaverze) coś takiego:

SELECT u.name, SUM(o.amount) AS total FROM users u JOIN orders o ON o.user_id = u.id GROUP BY u.name ORDER BY total DESC LIMIT 10;

Baza łączy tabele, sumuje kwoty per klient, sortuje malejąco i obcina do dziesięciu wierszy. Jedno zdanie zamiast ręcznego grzebania w danych.

Na co uważać

Klasyczny błąd początkującego to mylenie WHERE z HAVING — pierwsze filtruje wiersze przed grupowaniem, drugie filtruje już zagregowane grupy. Drugi klasyk: NULL to nie zero i nie pusty string, to „brak wartości”, więc WHERE kolumna = NULL nigdy nie zadziała — potrzebujesz IS NULL.

Najgroźniejszy jest jednak SQL injection: jeśli wkleisz dane od użytkownika prosto do zapytania przez sklejanie stringów, ktoś podstawi własny SQL i wyczyści Ci bazę. Zawsze używaj zapytań parametryzowanych (prepared statements). I drobnostka, która ratuje życie: zanim odpalisz DELETE albo UPDATE bez WHERE na produkcji — policz do dziesięciu.

Warto też wiedzieć, że SQL ma swoje dialekty: składnia bywa lekko inna między PostgreSQL a MySQL, mimo wspólnego standardu.

Pojęcia powiązane

Relacyjna baza danych (RDBMS), klucz główny i obcy, indeks, normalizacja, transakcja i ACID, ORM, a po drugiej stronie barykady — bazy NoSQL.