SQL Cheat Sheet: polecenia SQL
Ostatnia aktualizacja
Odpytywanie danych (SELECT)
Serce SQL: odczyt wierszy z jednej lub kilku tabel.
| Operacja | Składnia |
|---|---|
| Wybór wszystkich kolumn | SELECT * FROM users; |
| Wybór konkretnych kolumn | SELECT id, name FROM users; |
| Zmiana nazwy kolumny (alias) | SELECT name AS full_name FROM users; |
| Unikalne wartości | SELECT DISTINCT country FROM users; |
| Ograniczenie liczby wierszy | SELECT * FROM users LIMIT 10; |
| Pominięcie i ograniczenie (stronicowanie) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Zliczanie wierszy | SELECT COUNT(*) FROM users; |
Filtrowanie wierszy (WHERE)
Zawężanie wierszy zwracanych przez zapytanie.
| Operacja | Składnia |
|---|---|
| Równość / porównanie | WHERE age >= 18 |
| Kilka warunków | WHERE age >= 18 AND country = 'US' |
| Jeden z warunków | WHERE role = 'admin' OR role = 'owner' |
| W zbiorze | WHERE country IN ('US', 'CA', 'MX') |
| W zakresie | WHERE price BETWEEN 10 AND 50 |
| Dopasowanie wzorca | WHERE email LIKE '%@gmail.com' |
| Jest / nie jest null | WHERE deleted_at IS NULL |
| Negacja | WHERE status NOT IN ('archived') |
Sortowanie i grupowanie
| Operacja | Składnia |
|---|---|
| Sortowanie rosnąco (domyślnie) | ORDER BY created_at |
| Sortowanie malejąco | ORDER BY created_at DESC |
| Sortowanie po kilku kolumnach | ORDER BY country, name DESC |
| Grupowanie wierszy | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Filtrowanie grup | GROUP BY country HAVING COUNT(*) > 100 |
Złączenia (JOIN)
Łączenie wierszy z dwóch tabel na podstawie pasującej kolumny.
| Typ złączenia | Zwraca | Składnia |
|---|---|---|
| INNER JOIN | Tylko wiersze pasujące w obu tabelach | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Wszystkie wiersze z lewej + dopasowania (w przeciwnym razie null) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Wszystkie wiersze z prawej + dopasowania | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Wszystkie wiersze z obu stron | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Każda kombinacja (iloczyn kartezjański) | FROM sizes CROSS JOIN colors |
| Self join | Tabela złączona sama ze sobą | FROM employees e JOIN employees m ON e.manager_id = m.id |
Funkcje agregujące
Obliczanie jednej wartości dla grupy wierszy.
| Funkcja | Co robi |
|---|---|
COUNT(*) | Liczba wierszy |
COUNT(col) | Liczba wartości różnych od null |
SUM(col) | Suma kolumny liczbowej |
AVG(col) | Wartość średnia |
MIN(col) / MAX(col) | Najmniejsza / największa wartość |
STRING_AGG(col, ',') | Łączenie wartości (Postgres; GROUP_CONCAT w MySQL) |
Funkcje okna
Obliczenia na zbiorze wierszy bez zwijania ich do jednego.
| Funkcja | Składnia |
|---|---|
| Numer wiersza | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Ranking (z lukami) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Ranking gęsty | DENSE_RANK() OVER (ORDER BY score DESC) |
| Suma narastająca | SUM(amount) OVER (ORDER BY created_at) |
| Poprzedni / następny wiersz | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Zmiana danych (INSERT, UPDATE, DELETE)
| Operacja | Składnia |
|---|---|
| Wstawienie wiersza | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Wstawienie kilku wierszy | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Aktualizacja wierszy | UPDATE users SET active = true WHERE id = 1; |
| Usunięcie wierszy | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Definiowanie tabel (DDL)
| Operacja | Składnia |
|---|---|
| Utworzenie tabeli | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Dodanie kolumny | ALTER TABLE users ADD COLUMN age INTEGER; |
| Usunięcie kolumny | ALTER TABLE users DROP COLUMN age; |
| Usunięcie tabeli | DROP TABLE users; |
| Utworzenie indeksu | CREATE INDEX idx_users_email ON users (email); |
| Klucz obcy | FOREIGN KEY (user_id) REFERENCES users (id) |
Wszystkie polecenia, klauzule i złączenia SQL, których potrzebujesz, na jednej stronie. Ten SQL cheat sheet to szybka ściąga do odpytywania i zmieniania danych relacyjnych: klauzule SELECT, cztery typy JOIN, agregacja oraz DDL i DML do tworzenia i aktualizowania tabel.
Składnia opisana tutaj to standardowy ANSI SQL, który działa w PostgreSQL, MySQL, SQLite i SQL Server, chyba że zaznaczono inaczej. Skopiuj to, czego potrzebujesz, albo uruchom każde zapytanie w edytorze online SQL, bez instalowania bazy danych. Dopiero zaczynasz z bazami danych? Darmowy interaktywny kurs SQL w Coddy przeprowadzi cię przez zapytania, złączenia i agregację.
SQL cheat sheet: FAQ
Czy ten SQL cheat sheet jest darmowy?
Czy to działa w MySQL, PostgreSQL i SQLite?
SELECT, WHERE, JOIN, GROUP BY i DDL pokazana tutaj to standardowy ANSI SQL, który działa tak samo w MySQL, PostgreSQL, SQLite i SQL Server. Kilka zaawansowanych funkcji różni się między dialektami (najczęściej upsert i agregacja stringów) i przy tych wierszach zaznaczono różnicę.Czym różni się INNER JOIN od LEFT JOIN?
INNER JOIN zwraca tylko wiersze, które mają dopasowanie w obu tabelach. LEFT JOIN zwraca każdy wiersz z lewej (pierwszej) tabeli, a kolumny z prawej tabeli wypełnia wartością NULL, gdy nie ma dopasowania. Przydaje się, gdy chcesz wszystkich użytkowników, nawet jeśli niektórzy nie mają zamówień.Czy mogę ćwiczyć te polecenia SQL online?
SELECT do złączeń i funkcji okna.