SQL odlišné: popis, príklady, vlastnosti

, často pri použití SQL na vzorke dát z tabuľky, užívateľských redundantných dát, ktoré sú k dispozícii úplne identické opakované linky. Ak chcete túto situáciu vylúčiť, použije sa výraz SQL v príkaze Select. Tento článok bude obsahovať príklady použitia tohto argumentu, ako aj situácie, v ktorých je lepšie odmietnuť použitie argumentu. Skôr než začneme skúmať konkrétne príklady, vytvoríme v databáze niekoľko požadovaných tabuliek.

Príprava tabuľky

Predpokladajme, že máme databázu sú uložené informácie o tapety, prezentované v dvoch tabuľkách. Táto tabuľka Oboi (tapety) s poľami: id (jednoznačný identifikátor), typ (druh tapiet - papier, vinyl, atď.), Farba (color), struct (štruktúra) a rhise (cena). Tabuľka Ostatky (zvyšky) marže id_oboi (a odkaz na jednoznačný identifikátor tabuľky Oboi) a počet (počet valcov na sklade).


Vyplňte tabuľky s údajmi. Tabuľka tapiet pridať 9 položiek:
,
Oboi



Číslo hodnoty



typu



farby



struct



, cena



1



papiera



Multykolor



Reliéfne



569
(51 )

, 2



papiera dvojvrstvová



béžová



hladký (66 )


, 1148



3



vinyl



Oranžová



Reliéfne



504



4


(97 ) Flizelin



Béžová







5



Papierový dvojvrstvový papier








1506



6 135)

papiera



Multykolor



, hladký



, 954 (150 )


7



vinyl



, Brown



Hladké



, 372



8



v prepojení


(181 ) bielej



Reliéfne



, 9801
,
,
,
, 9



Látka



Pink



, Smooth



, 11665

Tabuľka s pozostatkami - a deväť ' päť záznamy:

ostatky



id_oboi



počtu



1
,
,
,
8



2



12











257) 5



16



6



7

(272 )
7



24



8



32



9



11

Začnime s popisom objednávky používať odlišné v SQL.

Miesto vo vetve Zvoľte rozdielne

Značný argument by mal byť umiestnený bezprostredne za kľúčovým slovom Výber dotazu. Vzťahuje sa na všetky stĺpce špecifikované v ponuke Vybrať, pretože vylúči absolútne identické riadky od výsledku dopytu. Tak stačí, keď raz napíšeme dotaz SQL "select distinct". Výnimkou je použitie odlišných v rámci agregovaných funkcií, ktoré považujemetrochu neskôr.



Je potrebné pripomenúť, že väčšina databáz a nerozpoznáva prihlášky:

SELECT zreteľný Ostatki.Count, odlišný Oboi * FROM Oboi INNER JOIN pozostatkov ON Oboi. .id = Ostatki.id_oboi

skúmal niekoľkokrát uvedené alebo uvedené tvrdenie, raz, ale pred druhým, tretím alebo iné vыbyraemыm stĺpci. Zobrazí sa chyba s odkazom na nepresnosti v syntaxe.

Uplatnenie inej štandardná požiadavka

Je zrejmé, že so správnymi stavebné konštrukcie stolov a ich plnenie vnútri tabuľky vylúčiť situáciu, keď existujú úplne identické línie. Preto je prakticky nevhodné vykonať dotaz "Vybrať zrozumiteľný výraz" so vzorkou z jednej tabuľky.
Predstavte si situáciu, kedy potrebujeme vedieť, aký typ tapiet je tu práve pre pohodlie vykonávame triedenie podľa typu:

SELECT Oboi.type FROM Oboi poradie podľa typu

a získať výsledok :
,
, typ



papiera



papiera



papiera dvojvrstvová (327 )


papiera dvojvrstvová



vinyl



vinyl



tkanina



v prepojení



v prepojení

Ako je vidieť v tabuľke existujú duplicitné riadky. Pridáme Ak vetu Vyberte odlišný:

SELECT zreteľný Oboi.type FROM Oboi poradie podľa typu

dostaneme výsledok bez opakovania:

typu



papiera



papiera dvojvrstvová



vinyl



tkaniny



Flizelin

TakétoV súlade s tým by mali byť vykonané správne uvedené v tabuľke naraz na volanie či priania zákazníkov môžeme odpovedať, že kvapalina tapety, tapety a akrylové Krycie k dispozícii v obchode tu. Vzhľadom na to, že sortiment v obchodoch sa zvyčajne neobmedzuje na sto tapiet, zoznam neunikátnych typov by bol dosť namáhavý.

Použitie v rôznych agregačné funkcie

Tento argument odlišný SQL môže byť použitý s akýmkoľvek agregačné funkcie. Ale Min a Max jej aplikácie nedáva žiadny efekt, a pri výpočte sumy alebo priemernú hodnotu málokedy si predstaviť situáciu, kedy by nikto musieť vziať do úvahy opakovaní. Predpokladajme, že chceme vidieť, ako naplnené nášho skladu a zaslať túto požiadavku, ktorý počíta celkový počet cievok Na sklade:

SELECT sum (Ostatki.count) FROM ostatky

Žiadosť vydá odpoveď 143 . Ak zmeníme na:

SELECT SUM (zreteľný Ostatki.count) FROM ostatky

dostaneme 119 ako tapetu podľa článku 3 a 7 sú na sklade v rovnakej výške. Je však zrejmé, že táto odpoveď je nesprávna. Často sa používa výraz SQL s funkciou Count. Tak môžeme ľahko vidieť, ako veľa jedinečných druhov tapiet sme všetci

SELECT count (zreteľný Oboi.type) FROM Oboi

5 a získať výsledky - obvyklý dvojvrstvový papier, vinyl, tkaniny a bambusu. Pravdepodobne každý videl typ reklamy: "Iba máme viac ako 20 druhov rôznych tapiet!", Čo znamená, že v tomto obchode nie sú desiatky rollov a tapietrôznych moderných typov. Je zaujímavé, že jeden dotaz môžete zadať celý rad funkcií Count atribút na rozdiel od, a bez neho. To je jediná situácia, keď odlišné Select'e možná niekoľkokrát.

Ak sa vzdať tvrdenie

z používania odlišného argumentu SQL je potrebné sa vyhnúť v jednom z dvoch prípadov:
  • Ak je vykonať výber tabuliek a dôveru v jedinečnej hodnoty každého. V tomto prípade použite tento argument je zbytočné, pretože sa jedná o dodatočný náklad na serveri alebo klienta (v závislosti od typu databázy).
  • Budete stratiť potrebné údaje. Vysvetlite to.
  • Predpokladajme, že vedúci sa vás spýta na zoznam tapety, ktoré máte, zobrazujúci dva stĺpce - typ a farbu. Zo zvyku zreteľná argumentácia zadať:


    SELECT zreteľný Oboi.type, Oboi.color FROM Oboi ORDER BY Oboi.type

    I - k strate niektorých dát:

    typu



    farba



    papier



    Multykolor



    papiera dvojvrstvová



    Beige



    vinyl



    , Brown


    ,
    , vinyl



    , oranžová



    tkaniny



    Pink
    (450 )

    , vložka



    Beige



    v prepojení



    bielej

    Mo ale vyvolávajú dojem, že papierové tapety (konvenčné a dual-layer) máme len jeden druh, v skutočnosti aj v našej malej tabuľke dvoch bodu (za následok nelíši):

    typu


    ,
    , farba



    papiera



    Multykolor



    papiera



    Multykolor



    papiera dvojvrstvová





    Vinyl



    , Brown



    vinyl



    , oranžová



    tkaniny

    , ​​
    ,
    , Pink



    v prepojení



    biele



    v prepojení (541 )


    Beige

    Preto, ako je písomne ​​akúkoľvek žiadosť odlišný argument by mal byť čistý a dobre víchrica Problémy uvaty sa jeho použitie v závislosti od úlohy.

    Alternatívne odlišný

    Opakom odlišného argumentu je argument Všetko. Po aplikácii sa uložia reťazce opakovania. Ale keďže predvolené DBMS tiež verí, že musíte zobraziť všetky hodnoty, argument All je skôr refincer ako skutočný funkčný argument.
    Dúfame, že teraz je jasné, keď používame odlišné (SQL). Opis vám dal úplné informácie o účelnosti použitia tohto argumentu pri riešení rôznych problémov. Ukázalo sa, že aj jednoduchý argument, vo svojej žiadosti zakrýva pomerne znateľný pravdepodobnosť straty niektoré dáta a zobrazovať nepresné informácie.

    Súvisiace publikácie