SQL odrębny: opis, przykłady, właściwości

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

Wyobraźmy sobie, że w naszej bazie znajdują się informacje o tapecie, przedstawione w dwóch tabelach. Oto tabela Oboi z polami: identyfikator (unikalny identyfikator), typ (rodzaj tapety - papier, winyl, itp.), Kolor (kolor), struktura (struktura) i rgis (cena). Tabela Ostatki (pozostałości) z polami id_oboi (odniesienie do unikalnego identyfikatora tabeli Oboi) i liczba (liczba rolek w magazynie).


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

Odrębny argument powinien zostać umieszczony zaraz po słowie kluczowym Wybierz zapytanie. Dotyczy to wszystkich kolumn określonych w Wybierz ofertę, ponieważ wyklucza całkowicie identyczne wiersze z wyniku zapytania. W związku z tym wystarczy podać jeden raz podczas pisania zapytania SQL "select distinct". Wyjątkiem jest użycie odrębnych w ramach zagregowanych funkcji, które rozważamytrochę później.



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

Jest oczywiste, że przy kompetentnej konstrukcji struktur i ich wypełnianiu w ramach jednej tabeli występują sytuacje, w których występują całkowicie identyczne linie. Dlatego niewłaściwe jest wykonywanie zapytania "Wybierz różne *" za pomocą próbki z jednej tabeli.
Wyobraźmy sobie sytuację, w której musimy wiedzieć, jakiego rodzaju tapety jest tutaj, tylko dla wygody wykonywać sortowanie wg typu:

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

Odrębny argument SQL może być używany z dowolną funkcją agregującą. Ale Min i Max jego zastosowanie nie daje żadnego efektu, a przy obliczaniu sumy lub średnia wartość rzadko sobie wyobrazić sytuację, w której nikt nie będzie musiał wziąć pod uwagę powtórzeń. Załóżmy, że chcemy zobaczyć, jak wypełnić nasz magazyn i wysłać ten wniosek, który oblicza łączną liczbę zwojów w magazynie:

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

z wykorzystaniem SQL odrębnego argumentu należy unikać w jednym z dwóch przypadków:
  • wykonać wybór stołów i pewnie w każdej unikatowej wartości. W tym przypadku należy użyć argument nie ma sensu, ponieważ jest to dodatkowe obciążenie na serwerze lub klienta (w zależności od typu bazy danych).
  • Boisz się utracić niezbędne dane. Wyjaśnijmy.
  • Załóżmy szef prosi cię do listy tapety, które masz, pokazując dwie kolumny - typ i kolor. Z przyzwyczajenia odrębnego argumentu należy podać:


    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.

    Alternatywa odrębna

    Przeciwieństwem odrębnego argumentu jest argument All. Po zastosowaniu powtarzane ciągi są zapisywane. Ale jako domyślnej bazy danych i stwierdza, że ​​wszystkie wymagane wartość wyjściowa, argument Wszystkie - utochnytel jest więcej niż realnym argumentem funkcjonalnej.
    Mamy nadzieję, że teraz jest jasne, kiedy używamy odrębnego (SQL). Opis dał ci pełną informację o celowości użycia tego argumentu w rozwiązywaniu różnych problemów. Wszakże, jak się okazało, nawet taki prosty argument w jego aplikacji kryje bardzo namacalne prawdopodobieństwo utraty danych i wyświetlania niedokładnych informacji.

    Powiązane publikacje