Jak napisać zapytanie SQL: praktyczny przewodnik z przykładami
Jak napisać zapytanie SQL: praktyczny przewodnik z przykładami
Structured Query Language (SQL) to uniwersalny sposób komunikacji z relacyjnymi bazami danych, jednak napisanie efektywnego zapytania to nie tylko połączenie kilku słów kluczowych. To proces łączący logikę, dokładne zrozumienie danych oraz świadomość, jak działają bazy danych. Ten przewodnik dostarczy Ci wiedzy niezbędnej do tworzenia zapytań SQL, które będą nie tylko poprawne, ale także wydajne, czytelne i łatwe w utrzymaniu, niezależnie od używanego systemu zarządzania bazami danych.
Czego się nauczysz
Po ukończeniu tego przewodnika będziesz w stanie tworzyć zapytania SQL od podstaw, precyzyjnie filtrując, sortując i agregując dane. Zrozumiesz znaczenie kolejności wykonywania zapytania oraz otrzymasz jasny plan pisania złożonych instrukcji SQL, które staną się Twoją profesjonalną przewagą. Pisanie zapytania SQL to ustrukturyzowany proces, w którym klauzule są zapisywane w określonej kolejności, różniącej się od tej, w jakiej wykonuje je silnik bazy danych.
Podstawa: instrukcja SELECT
U podstaw pobierania danych leży instrukcja SELECT. Informuje ona bazę danych, jakie dokładnie informacje chcesz zobaczyć i gdzie je znaleźć. Najprostsza forma zapytania składa się z klauzul SELECT i FROM.
SELECT column1, column2
FROM table_name;
Na przykład, aby pobrać klucze i nazwiska pracowników z tabeli wymiarów, możesz użyć:
SELECT EmployeeKey, LastName
FROM DimEmployee;
Chociaż SELECT * może wydawać się wygodne do szybkiego podglądu wszystkich kolumn, w kodzie produkcyjnym jest to uznawane za złą praktykę, ponieważ może zwracać niepotrzebne dane, wpływać na wydajność i zakłócać działanie aplikacji przy zmianie schematu tabeli. Zawsze określaj tylko niezbędne kolumny.
Budowanie logiki za pomocą klauzuli WHERE
Do filtrowania danych i uzyskiwania tylko potrzebnych wierszy używa się klauzuli WHERE. Określa ona warunek wyszukiwania, który muszą spełniać wiersze, aby zostać uwzględnione w wynikach. Klauzula WHERE występuje po FROM w strukturze zapytania.
Możesz używać różnych operatorów do tworzenia zaawansowanych warunków wyszukiwania. Na przykład, aby znaleźć konkretnego pracownika o nazwisku "Smith", można zastosować proste porównanie równości:
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName = 'Smith';
W przypadku bardziej złożonych filtrów można użyć operatora LIKE do wyszukiwania według wzorca. Poniższe zapytanie znajduje wszystkich pracowników, których nazwisko zawiera wzorzec "Smi":
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName LIKE '%Smi%';
Operatory logiczne, takie jak AND i OR, pozwalają łączyć wiele warunków. AND jest używany, gdy wszystkie warunki muszą być spełnione, a OR – gdy wystarczy spełnienie dowolnego z nich. Na przykład, aby znaleźć wiersze spełniające kilka kryteriów, można napisać:
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE EmployeeKey <= 500
AND LastName LIKE '%Smi%';
Warto zauważyć, że klauzula WHERE filtruje pojedyncze wiersze i nie może filtrować zagregowanych wyników. Operator IN to zwięzły sposób sprawdzenia, czy wartość pasuje do dowolnego elementu z listy, a BETWEEN służy do wyszukiwania wartości w określonym zakresie.
-- Użycie IN
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName IN ('Smith', 'Godfrey', 'Johnson');
-- Użycie BETWEEN
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE EmployeeKey BETWEEN 100 AND 200;
Zgodnie z dokumentacją Microsoft, liczba predykatów w warunku wyszukiwania jest nieograniczona, co pozwala na tworzenie bardzo precyzyjnych i złożonych filtrów logicznych.
Kształtowanie i organizacja wyników
Po przefiltrowaniu danych często konieczne jest ich uporządkowanie dla lepszej czytelności lub wykonanie obliczeń. Klauzula ORDER BY sortuje zestaw wyników według jednej lub kilku kolumn. Występuje po instrukcji SELECT i może określać porządek rosnący (ASC, domyślnie) lub malejący (DESC). Do usuwania zduplikowanych wierszy z zestawu wyników służy słowo kluczowe DISTINCT umieszczone bezpośrednio po SELECT.
SELECT DISTINCT JobTitle
FROM HumanResources.Employee
ORDER BY JobTitle;
Klauzula GROUP BY to potężne narzędzie do agregacji danych. Grupuje wiersze o tych samych wartościach w określonych kolumnach, umożliwiając wykonywanie operacji podsumowujących, takich jak SUM, AVG, COUNT, MAX i MIN. Na przykład, aby znaleźć łączną kwotę każdego zamówienia sprzedaży, można pogrupować dane według SalesOrderID i zsumować wartości wierszy:
SELECT SalesOrderID,
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
Gdy konieczne jest przefiltrowanie wyników GROUP BY, należy użyć klauzuli HAVING. W przeciwieństwie do WHERE, która filtruje pojedyncze wiersze przed grupowaniem, HAVING filtruje grupy po wykonaniu agregacji.
SELECT ProductID
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(OrderQty) > 5;
Kolejność zapisywania tych klauzul ma kluczowe znaczenie. Standardowe zapytanie SQL powinno mieć następującą strukturę: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.
Zaawansowane techniki: złączenia i podzapytania
Dane często są przechowywane w wielu tabelach, a do ich łączenia używa się klauzul JOIN. INNER JOIN pobiera rekordy z dwóch tabel, w których spełniony jest warunek połączenia. Na przykład można połączyć tabelę Product z SalesOrderDetail, aby uzyskać informacje o produkcie wraz z danymi sprzedażowymi.
Podzapytania, czyli zapytania zagnieżdżone, to zapytania umieszczone wewnątrz innego zapytania. Są przydatne do manipulacji danymi i analiz, które zależą od wyników innej operacji. Podzapytanie skorelowane to szczególnie złożony typ, w którym zapytanie wewnętrzne zależy od zewnętrznego w celu uzyskania swoich wartości i jest wykonywane wielokrotnie dla każdego przetwarzanego wiersza. Słowo kluczowe EXISTS jest często używane z podzapytaniami skorelowanymi do sprawdzania istnienia wierszy w podzapytaniu.
Pisanie czytelnego kodu SQL
Napisanie działającego kodu SQL to tylko połowa sukcesu; napisanie kodu łatwego w utrzymaniu to profesjonalna konieczność. Postępuj zgodnie z poniższymi zaleceniami, aby Twoje zapytania były narzędziem do współpracy, a nie źródłem zamieszania:
- Pisz słowa kluczowe wielkimi literami: Używaj wielkich liter dla słów kluczowych SQL, takich jak
SELECT,FROM,WHEREiJOIN. Oddziela to je od nazw kolumn i tabel, czyniąc zapytanie łatwiejszym do odczytania. - Używaj znaków nowej linii i wcięć: Umieszczaj każdą główną klauzulę w nowej linii i stosuj wcięcia, aby pokazać strukturę podzapytań lub złączeń. Taka wizualna hierarchia wyjaśnia złożoną logikę.
- Dodawaj znaczące komentarze: Używaj
--do dodawania komentarzy wyjaśniających dlaczego napisałeś zapytanie w dany sposób, a nie co ono robi. Jest to bezcenne dla Ciebie w przyszłości i dla Twoich współpracowników. - Używaj opisowych aliasów: Przy zmianie nazw kolumn za pomocą
ASlub skracaniu nazw tabel wybieraj znaczące aliasy. Unikaj niejasnych nazw, takich jakt1czya.
Źródła
- WHERE (Transact-SQL) — SQL Server
- T-SQL Tutorial: Write Transact-SQL Statements
- SELECT Examples (Transact-SQL)
- PostgreSQL: Documentation: 17: 2.5. Querying a Table
- Data Management with SQL for Ecologists: Accessing Data With Queries
- EXISTS (Transact-SQL) — SQL Server
- Transact-SQL Syntax Conventions (Transact-SQL)
- How to Write SQL Queries Anyone Can Understand
— Editorial Team
Brak komentarzy.