Formatuj SQL

Upiększ i formatuj zapytania SQL. Wiele dialektów. Za darmo, na zawsze.
Dialekt SQL
SQL wejściowy
Sformatowany SQL
SQL wejściowy

Prywatne i bezpieczne

Wszystko dzieje się w Twojej przeglądarce. Twoje pliki nigdy nie dotykają naszych serwerów.

Błyskawicznie

Bez przesyłania, bez czekania. Konwertuj w momencie upuszczenia pliku.

Rzeczywiście za darmo

Nie wymaga konta. Brak ukrytych kosztów. Brak sztuczek z rozmiarem pliku.

SQL (Structured Query Language) to wspólny język używany przez prawie każdą poważną relacyjną bazę danych na planecie—od PostgreSQL, MySQL, i SQLite po systemy komercyjne takie jak SQL Server i Oracle. Pozwala definiować struktury danych, przechowywać dane, efektywnie je przeszukiwać i egzekwować reguły dotyczące zachowania tych danych.

Poniżej znajduje się dogłębna wycieczka o około 2,500 słów dotycząca SQL: czym jest, jak działa i jak dobrze go używać w rzeczywistych systemach.

1. Czym jest SQL (i dlaczego nadal jest ważny)

SQL jest językiem deklaratywnym: opisujesz jakie dane chcesz, a baza danych decyduje jak je uzyskać. Tutoriale takie jak przewodnik SQL na W3Schools i seria SQL W3Schools.in przedstawiają SQL jako standardowy język do przechowywania, manipulowania i pobierania danych w wielu silnikach baz danych.

Ponieważ SQL jest standaryzowany i szeroko wspierany, możesz używać tego samego modelu mentalnego dla:

  • aplikacji internetowych na MySQL lub PostgreSQL
  • aplikacji wbudowanych używających SQLite
  • systemów korporacyjnych takich jak SQL Server lub Oracle

Większość codziennych danych biznesowych—zamówienia, użytkownicy, płatności, logi, analityka—jest ostatecznie przechowywana w tabelach, które możesz przeszukiwać za pomocą SQL.

2. Standardy i dialekty SQL

SQL jest standaryzowany przez rodzinę standardów ISO/IEC 9075, która definiuje język rdzeniowy i wiele opcjonalnych rozszerzeń. Standard ewoluował przez wersje takie jak SQL-86, SQL-92, SQL:1999, SQL:2003, aż do SQL:2023. Artykuły takie jak przegląd ANSI dotyczący standardu SQL ISO/IEC 9075:2023 wyjaśniają, jak standardy ANSI i ISO wyrównują się w czasie.

Sam standard jest podzielony na wiele części, takich jak:

  • Część 1 (Framework) i Część 2 (Foundation)
  • Część 3 (Call-Level Interface) dla API
  • Część 4 (Persistent Stored Modules) dla procedur składowanych
  • Późniejsze części takie jak SQL/XML, SQL/MED, i nawet SQL/PGQ dla zapytań grafów właściwości

Możesz zobaczyć pełną listę na stronie katalogu ISO dla SQL i w zasobach takich jak rozbicie Modern SQL części standardu.

W praktyce każda baza danych implementuje własny dialekt:

  • PostgreSQL dodaje rozszerzenia takie jak zaawansowane typy danych i wyszukiwanie pełnotekstowe, udokumentowane w podręczniku PostgreSQL.
  • MySQL ma własną odmianę instrukcji SQL i funkcji.
  • SQLite obsługuje znaczący podzbiór SQL z niektórymi unikalnymi zachowaniami, szczegółowo opisany w jego dokumentacji SELECT.

Kluczowe koncepcje—tabele, wiersze, kolumny, złączenia, agregaty—są przenośne, ale każdy nietrywialny system będzie wymagał nauki osobliwości i funkcji konkretnego dialektu.

3. Podstawy relacyjne: Tabele, Wiersze, Klucze

W sercu, SQL jest zaprojektowany wokół modelu relacyjnego: dane żyją w tabelach (relacjach), gdzie każdy wiersz reprezentuje fakt, a każda kolumna opisuje atrybut.

Typowe elementy obejmują:

  • Tabela: np. customers, orders
  • Kolumna: np. id, name, order_date, total_amount
  • Klucz główny: unikalny identyfikator dla każdego wiersza (częstoid)
  • Klucz obcy: kolumna odnosząca się do klucza głównego innej tabeli (np. orders.customer_idcustomers.id)

Przewodniki normalizacji—takie jak tutorial normalizacji DigitalOcean lub wyjaśnienie freeCodeCamp dotyczące 1NF, 2NF, 3NF—ujmują dobre projektowanie relacyjne jako minimalizację redundancji i zapobieganie anomalii aktualizacji poprzez dzielenie danych na dobrze ustrukturyzowane tabele i łączenie ich kluczami.

Gdy przeszukujesz za pomocą SQL, zasadniczo pytasz bazę danych: "Z tych tabel, pod tymi warunkami, jakie wiersze i kolumny powinienem zobaczyć?"

4. Główne zapytanie: SELECT

Instrukcja SELECT jest koniem roboczym SQL i prawdopodobnie jego najbardziej złożonym poleceniem. Referencja SELECT SQLite nazywa to "najbardziej skomplikowanym poleceniem w języku SQL", a zarówno dokumentacja SELECT MySQL jak i tutoriale takie jak przewodnik SELECT SQLite Tutorial przechodzą przez jego wiele opcji.

SELECT id, name
FROM customers;

Kluczowe części:

  • SELECT wymienia kolumny (lub * dla wszystkich kolumn, chociaż zwykle lepiej być jawnym).
  • FROM wybiera jedną lub więcej tabel.
  • WHERE filtruje wiersze.
  • ORDER BY sortuje wyniki.
  • LIMIT ogranicza, ile wierszy widzisz.
SELECT id, name, created_at
FROM customers
WHERE active = TRUE
ORDER BY created_at DESC
LIMIT 50;

Tutoriale wprowadzające takie jak tutorial SQL W3Schools i przegląd W3Schools MySQL dotyczący powszechnych poleceń używają SELECT do pokazania, jak wyodrębniasz dane z tabel w pojedynczym, czytelnym wyrażeniu.

5. Filtrowanie, sortowanie i wyrażenia

SQL błyszczy, gdy łączysz filtrowanie i wyrażenia bezpośrednio w zapytaniu:

SELECT
 id,
 total_amount,
 total_amount * 0.1 AS tax_estimate
FROM orders
WHERE status = 'paid'
 AND total_amount >= 100
ORDER BY total_amount DESC;

Klauzula WHERE może używać operatorów porównania (=, <>, >, <), operatorów logicznych (AND, OR, NOT), dopasowywania wzorców (LIKE, ILIKE), i więcej. Bazy danych takie jak MySQL dokumentują bogaty zestaw wbudowanych funkcji i operatorów dla operacji numerycznych, ciągów, daty/czasu, JSON i innych.

Możesz również:

  • użyć IN do dopasowania z listą: WHERE status IN ('paid', 'refunded')
  • użyć BETWEEN dla zakresów: WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31'
  • użyć IS NULL / IS NOT NULL do obsługi brakujących wartości

Dobre tutoriale i podręczniki podkreślają, że wyrażenia pojawiają się w wielu klauzulach— WHERE, ORDER BY, HAVING, a nawet SELECT sam. Dokumentacja MySQL podkreśla to w swojej sekcji dotyczącej oceny wyrażeń w rozdziale funkcji i operatorów.

6. Łączenie tabel

Prawdziwe bazy danych rzadko przechowują wszystko w jednej tabeli. Zamiast tego normalizujesz dane do wielu tabel i łączysz je podczas przeszukiwania. Złączenia są szeroko omówione w zasobach takich jak strona W3Schools dotycząca złączeń SQL, tutorial złączeń GeeksforGeeks, przegląd złączeń TutorialsPoint, i interaktywne przewodniki takie jak tutorial złączeń SQL na SQL Practice Online.

SELECT
 id,
 c.name,
 o.order_date,
 o.total_amount
FROM orders AS o
JOIN customers AS c
 ON c.id = o.customer_id;

Typowe typy złączeń:

  • INNER JOIN – tylko wiersze z dopasowaniami w obu tabelach
  • LEFT JOIN – wszystkie wiersze z lewej tabeli, plus dopasowania z prawej
  • RIGHT JOIN – przeciwieństwo lewego złączenia (nieobsługiwane w niektórych silnikach takich jak SQLite)
  • FULL OUTER JOIN – wiersze z obu stron, nawet jeśli niedopasowane

Wizualne i oparte na kodzie wyjaśnienia, takie jak artykuł DbSchema "SQL joins explained" lub przykłady złączeń LearnSQL.com, są świetnymi sposobami na zbudowanie silnej intuicji dotyczącej zachowania złączeń.

7. Agregacja, grupowanie i funkcje okienkowe

Aby podsumować dane—sumy, średnie, zliczenia—używasz funkcji agregujących (COUNT, SUM, AVG, MIN, MAX) z GROUP BY:

SELECT
 customer_id,
 COUNT(*) AS order_count,
 SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(total_amount) >= 1000
ORDER BY total_spent DESC;

Referencje takie jak rozdział funkcji i operatorów MySQL i dokumentacja PostgreSQL dotycząca funkcji agregujących i okienkowych katalogują wbudowane funkcje, których możesz użyć w tych wyrażeniach.

Nowoczesny SQL obsługuje również funkcje okienkowe, które pozwalają obliczać agregaty nad przesuwającymi się "oknami" wierszy, nadal zwracając indywidualne wiersze—na przykład, bieżące sumy lub rankingi. Funkcje okienkowe weszły do SQL poprzez poprawki do SQL:1999, później zintegrowane w SQL:2003, jak podsumowano w notatkach dotyczących standardów SQL:1999 i SQL:2003.

SELECT
 customer_id,
 order_date,
 total_amount,
 SUM(total_amount) OVER (
   PARTITION BY customer_id
   ORDER BY order_date
 ) AS running_total
FROM orders;

Ten rodzaj zapytania jest niezwykle potężny do analiz bezpośrednio w bazie danych.

8. Definicja danych: Tworzenie i ewolucja schematów

SQL nie jest tylko do przeszukiwania; definiuje również kształt twoich danych poprzez instrukcje Data Definition Language (DDL), dobrze udokumentowane w sekcjach takich jak przewodnik Definicji Danych PostgreSQL i rozdział instrukcji SQL MySQL.

Typowe polecenia DDL:

  • CREATE DATABASE my_app; – utworzyć bazę danych
  • CREATE TABLE customers (...); – zdefiniować tabelę
  • ALTER TABLE customers ADD COLUMN phone TEXT; – zmienić strukturę tabeli
  • DROP TABLE customers; – usunąć tabelę
CREATE TABLE customers (
 id           SERIAL PRIMARY KEY,
 email        VARCHAR(255) UNIQUE NOT NULL,
 name         TEXT NOT NULL,
 created_at   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 active       BOOLEAN NOT NULL DEFAULT TRUE
);

Punkty do zauważenia:

  • Typy danych: liczby całkowite, ciągi, daty, wartości logiczne, JSON, itp.
  • Ograniczenia: PRIMARY KEY, UNIQUE, NOT NULL, wyrażenia CHECK
  • Wartości domyślne i generowane kolumny

Każdy główny podręcznik RDBMS— sekcja języka SQL PostgreSQL, podręcznik referencyjny MySQL, i referencja języka SQLite —podkreśla ostrożne myślenie o DDL, ponieważ decyzje dotyczące schematu są trudne do zmiany później.

9. Transakcje, współbieżność i ograniczenia

Bazy danych SQL zazwyczaj implementują właściwości ACID—Atomowość, Spójność, Izolacja, Trwałość—poprzez transakcje:

BEGIN;

UPDATE accounts
SET balance = balance - 200
WHERE id = 1;

UPDATE accounts
SET balance = balance + 200
WHERE id = 2;

COMMIT;

Jeśli coś się nie powiedzie między BEGIN a COMMIT, transakcja może zostać wycofana, aby zmiany pośrednie nie wyciekły do bazy danych.

Sekcja MySQL dotycząca instrukcji transakcyjnych i blokujących obejmuje START TRANSACTION, COMMIT, ROLLBACK, i punkty zapisu, podczas gdy rozdziały PostgreSQL dotyczące kontroli współbieżności i zarządzania transakcjami wyjaśniają, jak działają poziomy izolacji i MVCC pod maską.

Ograniczenia—takie jak klucze obce lub ograniczenia sprawdzające—są sposobem bazy danych na egzekwowanie reguł biznesowych:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);

Używane dobrze, przekształcają twoją bazę danych w strażnika niezmienników, zapobiegając nieprawidłowym danym u źródła zamiast polegania tylko na logice aplikacji.

10. Projektowanie schematu i normalizacja

Właściwe wykonanie schematu jest często ważniejsze niż sprytne zapytania. Normalizacja to proces strukturyzowania tabel w celu zmniejszenia redundancji i poprawy spójności. Tutoriale takie jak:

Typowa progresja:

  • 1NF: brak powtarzających się grup; każda kolumna przechowuje wartości atomowe.
  • 2NF: każdy atrybut niekluczowy zależy od całego klucza głównego (dla kluczy złożonych).
  • 3NF: brak zależności przechodnich (atrybuty niekluczowe nie zależą od innych atrybutów niekluczowych).

Nadmierna normalizacja może zaszkodzić wydajności i skomplikować zapytania; pragmatyczne zespoły często normalizują do 3NF, a następnie denormalizują selektywnie (na przykład, buforując agregaty) tam, gdzie wydajność tego wymaga.

11. Indeksy i wydajność zapytań

Indeksy są głównym narzędziem do przyspieszania zapytań SQL. Są to pomocnicze struktury danych, które pozwalają bazie danych przeskakiwać bezpośrednio do odpowiednich wierszy zamiast skanować całe tabele.

Bardzo szanowanym zasobem dotyczącym indeksowania jest Use The Index, Luke! Markusa Winanda, darmowa książka online całkowicie skupiona na wydajności SQL i strategii indeksowania. Główna strona witryny, UseTheIndexLuke.com, i artykuły takie jak "Indexing LIKE filters" i "More indexes, slower INSERT" wyjaśniają, kiedy indeksy pomagają, a kiedy szkodzą.

Kluczowe idee:

  • Indeksy B-tree przyspieszają wyszukiwania równości i zakresów (WHERE email = ..., WHERE created_at >= ...).
  • Indeksy złożone uwzględniają kolejność kolumn—na przykład, (customer_id, created_at) dobrze działa dla WHERE customer_id = ? AND created_at >= ?.
  • Indeksy pomagają SELECT, UPDATE, i DELETE z filtrami, ale spowalniają wstawianie, ponieważ każde wstawienie musi zaktualizować wszystkie odpowiednie indeksy.

Przewodniki takie jak artykuł MSSQLTips dotyczący projektowania indeksów SQL Server pokazują, jak wybór i kolejność kolumn w indeksie wpływają na rzeczywiste zapytania.

Praktyczne zasady:

  • Indeksuj swoje klucze główne i częste kolumny złączeń/filtrów.
  • Unikaj indeksowania każdej kolumny—zbyt wiele indeksów zabija wydajność zapisu.
  • Użyj EXPLAIN/EXPLAIN ANALYZE bazy danych, aby zobaczyć, jak wykonywane są zapytania.

12. Funkcje nowoczesnego SQL: CTE, JSON i dalej

Podczas gdy podstawy pozostały stabilne, nowoczesny SQL znacznie się rozwinął:

  • Common Table Expressions (CTE) poprzez WITH pozwalają na bardziej czytelne, modułowe zapytania:
    WITH recent_orders AS (
     SELECT *
     FROM orders
     WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
    )
    SELECT customer_id, COUNT(*) 
    FROM recent_orders
    GROUP BY customer_id;
  • Wsparcie JSON pozwala mieszać dane półstrukturalne z tabelami relacyjnymi. PostgreSQL, MySQL i inni dokumentują rozległe funkcje JSON w swoich podręcznikach, takie jak funkcje JSON MySQL wymienione pod funkcje JSON.
  • Zaawansowane typy danych (tablice, hstore, geometria, wyszukiwanie pełnotekstowe) są opisane w rozdziałach dotyczących typów danych i indeksów PostgreSQL w podręczniku PostgreSQL.

Sam standard SQL dodał części dla XML, tablic wielowymiarowych i zapytań grafów właściwości, jak udokumentowano w katalogu standardu SQL ISO i w artykułach dotyczących ewolucji SQL, takich jak artykuł dotyczący standardu SQL ANSI.

Nowoczesny SQL jest wystarczająco potężny, że wiele aplikacji może przenieść złożoną logikę—hierarchie, analitykę, przetwarzanie zdarzeń—do warstwy bazy danych.

13. Skuteczne uczenie się SQL

Ponieważ SQL pozostaje fundamentalny dla pracy z danymi, istnieje bogaty ekosystem zasobów do nauki:

Praktyczna strategia uczenia się:

  1. Opanuj SELECT i podstawowe filtrowanie. Zacznij od prostych zapytań i stopniowo dodawaj WHERE, ORDER BY, i LIMIT.
  2. Przyzwyczaj się do złączeń. Ćwicz wszystkie typy złączeń, aż będziesz mógł pewnie przewidzieć wyniki.
  3. Dodaj grupowanie i agregację. Naucz się odpowiadać na pytania takie jak "przychód na miesiąc" lub "top 10 klientów" za pomocą GROUP BY.
  4. Naucz się projektowania schematu. Studiuj normalizację i ćwicz modelowanie rzeczywistych systemów—na przykład, sklepy, systemy rezerwacji, sieci społecznościowe.
  5. Eksploruj funkcje swojego ulubionego silnika. Przeczytaj oficjalną dokumentację swojej bazy danych— sekcję języka SQL PostgreSQL, podręcznik referencyjny MySQL, lub referencję języka SQLite —aby odkryć narzędzia specyficzne dla silnika.
  6. Wreszcie, naucz się wydajności. Eksperymentuj z indeksami używając koncepcji z Use The Index, Luke! i podobnych zasobów, i profiluj zapytania za pomocą EXPLAIN.

Jeśli możesz wygodnie czytać i pisać SQL, możesz bezpośrednio sprawdzać dane w produkcji, budować raporty bez eksportowania do arkuszy kalkulacyjnych, debugować logikę aplikacji patrząc na podstawowe tabele, i skuteczniej współpracować z inżynierami i analitykami.

14. Duży obraz

SQL znajduje się na unikalnym skrzyżowaniu: ma ponad 40 lat, ale jest głęboko istotny w dzisiejszych systemach cloud-native i ciężkich analitycznie. Standard ISO/IEC 9075 i jego wiele części nadal ewoluuje, podczas gdy bazy danych open-source takie jak PostgreSQL, MySQL, i SQLite napędzają praktyczne funkcje i ulepszenia wydajności.

Jeśli pracujesz z danymi—deweloper, analityk, naukowiec danych lub menedżer produktu—SQL jest wspólnym językiem, który pozwala zadawać pytania bezpośrednio do bazy danych. Warto się go nauczyć raz, i płaci za resztę twojej kariery.

Często Zadawane Pytania

Co to jest formatowanie SQL?

Formatowanie SQL to proces organizowania zapytań SQL z odpowiednimi wcięciami, podziałami linii i wielkością liter słów kluczowych w celu poprawy czytelności i utrzymania.

Które dialekty SQL są obsługiwane?

Nasz formatujer obsługuje wiele dialektów SQL, w tym MySQL, PostgreSQL, SQL Server, SQLite, Oracle i wiele innych.

Czy mój kod SQL jest bezpieczny?

Tak! Całe formatowanie SQL odbywa się całkowicie w przeglądarce. Twoje zapytania nigdy nie opuszczają komputera, zapewniając pełną prywatność i bezpieczeństwo.

Czy mogę formatować wiele instrukcji SQL?

Tak, możesz formatować wiele instrukcji SQL jednocześnie. Formatujer odpowiednio obsłuży każdą instrukcję na podstawie wybranego dialektu.

Co jeśli mój SQL ma błędy składniowe?

Formatujer spróbuje sformatować Twój SQL, nawet jeśli zawiera błędy składniowe. Jednak możesz zobaczyć komunikaty o błędach dla nieprawidłowego SQL, którego nie można przeanalizować. Zawsze sprawdzaj swój SQL za pomocą systemu bazy danych.