Podstawy SELECT DISTINCT
Zwracaj tylko unikatowe wiersze
Podstawy SELECT DISTINCT to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Dlaczego pojawiają się duplikaty
Tabele często zawierają powtarzające się wartości. Tabela customers może zawierać tę samą wartość city w tysiącach wierszy. Gdy interesuje nas tylko zbiór unikalnych wartości, zwykły SELECT zwraca każdy wiersz, w tym powtórzenia.
SELECT DISTINCT redukuje identyczne wiersze do jednego. W tej lekcji poznasz podstawy zwracania wyłącznie unikalnych wyników.
SELECT city FROM customers;
-- Returns one row per customer, with many repeated citiesSłowo kluczowe DISTINCT
DISTINCT umieszcza się bezpośrednio po SELECT. Usuwa ono zduplikowane wiersze ze zbioru wyników, pozostawiając tylko jedną kopię każdej unikalnej kombinacji wybranych kolumn.
SELECT DISTINCT city
FROM customers;
-- One row per unique cityDISTINCT dotyczy całego wiersza
Częstym błędnym przekonaniem jest to, że DISTINCT dotyczy jednej kolumny. W rzeczywistości dotyczy on całego wybranego wiersza. Każda wymieniona kolumna uczestniczy w ustalaniu, czy dwa wiersze są duplikatami.
Poniżej wiersze są deduplikowane tylko według wartości city, ponieważ jest to jedyna wybrana kolumna.
SELECT DISTINCT country
FROM customers;
-- Unique countries across all customersPrzykładowe dane
Wyobraźmy sobie niewielką tabelę orders. Zwróć uwagę na powtarzające się wartości status i country. Taki układ będzie wykorzystywany w całej lekcji.
id=1, status='paid', country='US'id=2, status='paid', country='US'id=3, status='shipped', country='DE'id=4, status='paid', country='DE'
CREATE TABLE orders (
id int PRIMARY KEY,
status text,
country text,
amount numeric(10,2)
);Unikalna pojedyncza kolumna
Wybranie DISTINCT status z przykładowych danych zwraca unikalne wartości statusu: paid i shipped. Cztery wiersze zostają zredukowane do dwóch.
SELECT DISTINCT status
FROM orders;
-- paid
-- shippedNULL jest traktowane jako jedna wartość
Mimo że NULL zwykle nie jest równe niczemu (nawet sobie), DISTINCT traktuje wszystkie wartości NULL jako jedną grupę. Jeśli kolumna zawiera wiele wierszy z wartością NULL, w wyniku unikalnym pojawi się dokładnie jedna wartość NULL.
SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL rowDISTINCT z ORDER BY
Zwykle unikalne wartości powinny być posortowane. DISTINCT jest wykonywane najpierw w celu utworzenia unikalnego zbioru, a następnie ORDER BY go sortuje. Każda kolumna użyta w ORDER BY musi również pojawić się na liście SELECT podczas używania DISTINCT.
SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- USDISTINCT a GROUP BY
SELECT DISTINCT col i SELECT col GROUP BY col tworzą te same unikalne wiersze. Użyj DISTINCT, gdy potrzebujesz tylko unikalnych wartości; sięgnij po GROUP BY, gdy potrzebujesz również agregatów, takich jak COUNT dla każdej grupy.
-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;
SELECT country FROM orders
GROUP BY country;DISTINCT ma swój koszt
Usuwanie duplikatów nie jest bezpłatne. Baza danych musi posortować lub zahaszować wszystkie potencjalne wiersze, aby znaleźć unikalne wartości. W przypadku dużych tabel zwiększa to obciążenie procesora i pamięci, dlatego należy używać DISTINCT tylko wtedy, gdy unikalność jest rzeczywiście potrzebna.
-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders; -- id is already uniqueDISTINCT w wyrażeniach
Można zastosować DISTINCT do obliczanego wyrażenia, a nie tylko do surowej kolumny. Baza danych oblicza wyrażenie dla każdego wiersza, a następnie deduplikuje wyniki.
SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- USTworzenie listy wyboru
Praktycznym zastosowaniem DISTINCT jest wypełnianie listy rozwijanej lub listy filtrów w aplikacji: można pobrać unikalne statusy, aby wyświetlić użytkownikowi każdą możliwą opcję, która obecnie występuje w danych.
SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shippedSzybki test
Gdzie należy umieścić słowo kluczowe DISTINCT i co ono deduplikuje?
Podsumowanie
Poznano podstawy SELECT DISTINCT:
- Usuwa zduplikowane wiersze ze zbioru wyników.
- Dotyczy całego wybranego wiersza, a nie jednej kolumny.
- Wszystkie wartości
NULLzostają zredukowane do jednej wartości. ORDER BYjest wykonywane po deduplikacji, a użyte w nim kolumny muszą być wybrane.- Wymaga dodatkowej pracy, dlatego należy używać go tylko wtedy, gdy jest potrzebny.
Dalej: rozszerzenie działania DISTINCT na wiele kolumn.
SELECT DISTINCT status
FROM orders
ORDER BY status;Często zadawane pytania
Czy lekcja „Podstawy SELECT DISTINCT” jest bezpłatna?
Tak — pełny tekst „Podstawy SELECT DISTINCT” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podstawy SELECT DISTINCT”?
Zwracaj tylko unikatowe wiersze Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Podstawy SELECT DISTINCT”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy SELECT DISTINCT
- DISTINCT dla wielu kolumn
- PostgreSQL DISTINCT ON
- Zliczanie unikatowych wartości