SQL odlišný: popis, příklady, vlastnosti

, často při použití SQL na vzorku dat z tabulky, uživatelských redundantních dat, které jsou k dispozici zcela identické opakované linky. Pro odstranění tohoto stavu pomocí SQL zřetelné tvrzení ve větě Select. Tento článek se bude diskutovat o příklady tohoto argumentu, a situace, v nichž by mělo být použití argumentu opuštěné. Než začneme zvažovat konkrétní příklady, vytvoříme v databázi několik požadovaných tabulek.

Příprava tabulky

Předpokládejme, že máme databázi jsou uloženy informace o tapety, prezentované ve dvou tabulkách. Tato tabulka Oboi (tapety) s poli: id (jednoznačný identifikátor), typ (druh tapet - papír, vinyl, atd.), Barva (color), struct (struktura) a rhise (cena). Tabulka Ostatki (zbytky) marže id_oboi (a odkaz na jednoznačný identifikátor tabulky Oboi) a počet (počet válců na skladě).


Vyplňte tabulky s údaji. Tabulka tapet přidat 9 položek:
,
Oboi



Číslo hodnoty



typu



barvy



struct



, cena



1



papíru



Multykolor



Reliéfní



569
(51 )

, 2



papíru dvouvrstvá



béžová



hladký (66 )


, 1148



3



vinyl



Oranžová



Reliéfní



504



4


(97 ) vložka



Beige



Reliéfní



, 10209



5



papíru dvojité vrstvě
,


Beige



, Smooth



, 1506
,
,
,
6



papíru



Multykolor



, hladký



, 954 (150 )


7



vinyl



, Brown



Hladké



, 372



8



v propojení


(181 ) bílé



Reliéfní



, 9801
,
,
,
, 9



Látka



Pink



, Smooth



, 11665

Tabulka s ostatky - a devět ' pět záznamy:

Ostatki



id_oboi



počtu



1
,
,
,
8



2



12



3



24



4



, 9



5



16



6



7

(272 )
7



24



8



32



9



11

Začneme s popisem objednávky použití odlišné v SQL.

Umístěte ve větě Zvolte zřetelné

Zřetelný argument by měl být umístěn bezprostředně za klíčové slovo Vybrat dotaz. Platí pro všechny sloupce zadané v nabídce Select, protože vyloučí absolutně identické řádky z výsledku dotazu. Takže stačí zadat jednou při psaní dotazu SQL "select distinct". Výjimkou je použití odlišných v souhrnných funkcích, které považujemeo něco později.



Je třeba připomenout, že většina databází a nerozpozná formuláře žádosti:

SELECT zřetelný Ostatki.Count, odlišný Oboi * FROM Oboi INNER JOIN Ostatki ON Oboi. .id = Ostatki.id_oboi

zkoumal několikrát uvedeno nebo uvedené tvrzení, jednou, ale před druhým, třetím nebo jiné vыbyraemыm sloupci. V syntaxi se zobrazí chyba s odkazem na nepřesnosti.

Použití odlišné standardní požadavek

Je zřejmé, že se správnými stavební konstrukce stolů a jejich plnění uvnitř tabulky vyloučit situaci, kdy existují naprosto identické linie. Proto je prakticky nevhodné provést dotaz "Select distinct *" se vzorkem z jedné tabulky.
Představte si situaci, kdy potřebujeme vědět, jaký typ tapet je tu právě pro pohodlí provádíme třídění podle typu:

SELECT Oboi.type FROM Oboi pořadí podle typu

a získat výsledek :
,
, typ



papíru



papíru



papíru dvouvrstvá (327 )


papíru dvouvrstvá



vinyl



vinyl



tkanina



v propojení



v propojení

Jak je vidět v tabulce existují duplicitní řádky. Přidáme-li větu Vyberte odlišný:

SELECT zřetelný Oboi.type FROM Oboi pořadí podle typu

dostaneme výsledek bez opakování:

typu



papíru



papíru dvouvrstvá



vinyl



tkaniny



Flizelin

TakovéV souladu s tím by měly být provedeny správně uvedeny v tabulce najednou na volání či přání zákazníků můžeme odpovědět, že kapalina tapety, tapety a akrylové Krycí k dispozici v obchodě zde. Vzhledem k tomu, že sortiment v obchodech není obvykle omezen na sto tapet, seznam ne-jedinečných typů by byl docela pracný.

Použití odlišných v souhrnných funkcích

Rozdílný argument SQL lze použít s libovolnou agregační funkcí. Ale Min a Max její aplikace nedává žádný efekt, a při výpočtu částky nebo průměrnou hodnotu málokdy si představit situaci, kdy by nikdo muset vzít v úvahu opakování. Předpokládejme, že chceme vidět, jak naplněné našeho skladu a zaslat tento požadavek, který počítá celkový počet cívek Na skladě:

SELECT sum (Ostatki.count) FROM Ostatki

Žádost vydá odpověď 143 . Pokud změníme na:

SELECT sUM (zřetelný Ostatki.count) FROM Ostatki

dostaneme 119 jako tapetu podle článku 3 a 7 jsou na skladě ve stejné výši. Je však zřejmé, že tato odpověď je nesprávná. Často se používá SQL s funkcí Count. Tak můžeme snadno vidět, jak mnoho jedinečných druhů tapet jsme všichni

SELECT count (zřetelný Oboi.type) FROM Oboi

5 a získat výsledky - obvyklý dvouvrstvý papír, vinyl, tkaniny a bambusu. Pravděpodobně všichni viděli reklamy, jako je: „Jen máme více než 20 různých druhů tapet!“, Podle něhož je zřejmé, že se nejedná o obchod pár desítek rolí a tapetyrůzné moderní typy. Je zajímavé, že v jednom dotazu můžete zadat několik funkcí Count s odlišným atributem nebo bez něj. To znamená, že toto je jediná situace, kdy se v Selektu může lišit několikrát.

Pokud se vzdát tvrzení

z používání odlišného argumentu SQL je třeba se vyhnout v jednom ze dvou případů:
  • Je-li provést výběr tabulek a důvěru v jedinečné hodnoty každého. V tomto případě použijte tento argument je zbytečné, protože se jedná o dodatečný náklad na serveru nebo klienta (v závislosti na typu databáze).
  • Obáváte se, že ztratíte potřebná data. Vysvětlete.
  • Předpokládejme, že vedoucí se vás zeptá na seznam tapety, které máte, zobrazující dva sloupce - typ a barvu. Ze zvyku zřetelná argumentace zadat:


    SELECT zřetelný Oboi.type, Oboi.color FROM Oboi ORDER BY Oboi.type

    I - ke ztrátě některých dat:

    typu



    barva



    papír



    Multykolor



    papíru dvouvrstvá



    Beige



    vinyl



    , Brown


    ,
    , vinyl



    , oranžová



    tkaniny



    Pink
    (450 )

    , vložka



    Beige



    v propojení



    bílé

    Mo ale vyvolávají dojem, že papírové tapety (konvenční a dual-layer) máme jen jeden druh, ve skutečnosti i v naší malé tabulce dvou bodu (za následek neliší):

    typu


    ,
    , barva



    papíru



    Multykolor



    papíru



    Multykolor



    papíru dvouvrstvá





    Vinyl



    , Brown



    vinyl



    , oranžová



    tkaniny

    , ​​
    ,
    , Pink



    v propojení



    bílé



    v propojení (541 )


    Beige

    Proto, jak je písemně jakoukoliv žádost odlišný argument by měl být čistý a dobře vichřice Problémy uvaty se jeho použití v závislosti na úkolu.

    Alternativně odlišný

    Opačný rozdíl je argument Vše. Při použití jsou ukládány opakované řetězce. Ale jako výchozí databázi a zjistí, že všechny požadované výstupní hodnota argument All - utochnytel je více než v reálném funkčním argumentem.
    Doufáme, že je nyní jasné, když používáme odlišný (SQL). Popis poskytuje úplné informace o účelnosti použití tohoto argumentu při řešení různých problémů. Koneckonců, jak se ukázalo, dokonce takový jednoduchý argument ve své aplikaci skrývá velmi hmatatelnou pravděpodobnost ztráty dat a zobrazení nepřesných informací.

    Související publikace