Najczęściej podczas korzystania z SQL do pobierania próbek z tabel użytkownik otrzymuje nadmiarowe dane, które polegają na obecności absolutnie identycznych powtarzających się ciągów. Aby wykluczyć tę sytuację, używany jest odrębny argument SQL w instrukcji Select. W tym artykule omówimy przykłady użycia tego argumentu, a także sytuacje, w których lepiej odrzucić użycie argumentu. Zanim zaczniemy rozważać konkretne przykłady, utworzymy w bazie danych kilka wymaganych tabel.
Przygotowanie tabel
Wypełnij tabele danymi. W tabeli z tapetą dodaj 9 rekordów:
Oboi
id
typ
kolor
struktura
cena
1
Papier
Multicolor
Tłoczone
569
(51 )
2
Papier dwuwarstwowy
Beżowy
Gładki
)
1148
3
Winyl
Orange
Podkreślono
504
4
(97 ) Flizelin
Beżowy
5
Papier dwuwarstwowy
1506
6
papieru
Multykolor
Gładkie
954 (150 )
7
Winyl
Brązowy
Gładki
372
8
między liniami
(181 ) biała
wytłaczanego
9801
, 9
,
,
Tkanina
Gładki
11665
W tabeli z pozostałościami - także dev " pięć wyniki:
Ostatki
id_oboi
grubości
1
8
2
12
257) 5
16
6
, 7
(272 )
7
24
8
32
9
11
Zacznijmy od opisu zamówienia używaj różnych w SQL.
Miejsce w zdaniu Wybierz odrębny
Należy pamiętać, że większość bazy danych i nie rozpoznaje formularz zgłoszenia:
SELECT odrębną Ostatki.Count, odrębny Oboi * FROM Oboi INNER JOIN Ostatki NA Oboi. .id = Ostatki.id_oboi
Ten argument jest rozpatrywany kilka razy lub określony jeden raz, ale przed drugą, trzecią lub inną kolumną do wybrania. Otrzymasz błąd z odniesieniem do niedokładności w składni.
Stosowanie różnych w standardowych zapytaniach
SELECT Oboi.type OD Oboi kolejności według typu
i uzyskać wynik
typu
papieru
papieru
papieru dwuwarstwowa (327 )
papieru dwuwarstwowa
winyl
winyl
tkanina
między liniami
między liniami
,
, jak jest to widoczne w tabeli są zduplikowane wierszy. Jeśli dodamy zdanie odrębne Wybierz:
SELECT odrębną Oboi.type OD Oboi kolejności według typu
otrzymujemy wynik bez powtórzeń:
typu
papieru
papieru dwuwarstwowa
winyl
tkaniny
Flizelin
TakiW związku z tym powinny zostać wykonane prawidłowo podano w tabeli od razu na wezwanie lub życzenie klientów możemy odpowiedzieć, że ciecz tapety, tapety i akrylowy Pokrycie dostępne w sklepie nie. Biorąc pod uwagę, że asortyment w sklepach zwykle nie ogranicza się do stu tapet, lista nietypowych typów byłaby dość pracochłonna.
Stosowanie różnych w funkcjach zagregowanych
SELECT sum (Ostatki.count) FROM Ostatki
Wniosek wyda odpowiedzi 143 . Jeśli zmienimy na:
(suma SELECT odrębną Ostatki.count) ze Ostatki
otrzymujemy 119 jako tapetę na mocy artykułu 3 i 7 są w magazynie w tej samej wysokości. Jest jednak oczywiste, że ta odpowiedź jest błędna. Często SQL distinct jest używany z funkcją Count. W ten sposób możemy łatwo zobaczyć, jak wiele unikalnych rodzajów tapet wszyscy jesteśmy
SELECT count (odrębną Oboi.type) FROM Oboi
5 i uzyskać wyniki - zwykły papier dwuwarstwową, winyl, tkanina i bambus. Prawdopodobnie wszystkie widoczne reklamy typu: „Tylko mamy ponad 20 różnych rodzajów tapet!”, W ramach którego jest to zrozumiałe, że nie jest to sklep kilkadziesiąt rolki i tapetywiele nowoczesnych typów. Co ciekawe, w jednym zapytaniu można określić kilka funkcji Count z atrybutem distinct lub bez niego. Oznacza to, że jest to jedyna sytuacja, kiedy odrębna w Select'e może być kilka razy.
W przypadku odstąpić od argumentu
SELECT odrębną Oboi.type, Oboi.color OD Oboi ORDER BY Oboi.type
I - stracić niektóre dane:
Typ
kolor
Papier
Multykolor
papieru dwuwarstwowa
Beige
winyl
Brown
,
, winyl
, pomarańczowy
, tkaniny
różowy
(450 )
kojarzenia
beżowy
kojarzenia
Biały
Mo ale sprawiają wrażenie, że tapety papieru (konwencjonalne i podwójnej warstwy) mamy tylko jeden rodzaj, w rzeczywistości nawet w naszym stoliku dwóch pozycji (wynik nie odrębny):
typu
kolor
Papier
Multykolor
papieru
Multykolor
papieru dwuwarstwowa
,
,
Beige
papieru dwuwarstwowa
Beige
winyl
,
Brown
winyl
, pomarańczowy
, tkaniny
różowy
między liniami
biała
między liniami (541 )
beżowy
w związku z tym, podobnie jak w piśmie każdego wniosku odrębnego argument powinien być schludny i dobrze trąba powietrzna Kwestie uvaty z jego stosowanie w zależności od zadania.