nisfarm.ru

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

Často při použití SQL k načtení informací z tabulek, uživatel přijímá redundantní data, která spočívá v přítomnosti absolutně identických duplicitních řádků. Chcete-li tuto situaci vyloučit, použijte v klauzuli Vybrat argument SQL. V tomto článku budeme zvažovat příklady použití tohoto argumentu, stejně jako situace, ve kterých je lepší opustit argument.

Než začneme zvažovat konkrétní příklady, vytvoříme v databázi několik potřebných tabulek. sql odlišný

Příprava stolů

Představte si, že máme v databázi uložené informace o tapetu, které jsou uvedeny ve dvou tabulkách. Jedná se o tabulku Oboi (tapetu) s identifikátory polí (jedinečný identifikátor), typ (typ tapety - papír, vinyl atd.), Barva, struktura a cena. A tabulka Ostatki (zbytky) s poli id_oboi (odkaz na jedinečný identifikátor v tabulce Oboi) a počet (počet rolí ve skladu).

Vyplňte tabulky s údaji. V tabulce s tapetou přidejte 9 položek:

Oboi

id

typ

barvy

struct

cena

1

Papír

Vícebarevná

Reliéfní

56.9

2

Dvouvrstvý papír

Béžová

Hladký

114,8

3

Vinyl

Orange

Reliéfní

504

4

Netkané fleece rukavice

Béžová

Reliéfní

1020,9

5

Dvouvrstvý papír

Béžová

Hladký

150,6

6.

Papír

Vícebarevná

Hladký

95,4

7.

Vinyl




Brown

Hladký

372

8.

Netkané fleece rukavice

Bílá

Reliéfní

980,1

9.

Fabric

Pink

Hladký

1166,5

V tabulce se zbytky je také devět záznamů:

Ostatní

id_oboi

počet

1

8.

2

12.

3

24

4

9.

5

16

6.

7.

7.

24

8.

32

9.

11

Začněme tím, že popisujeme, jak používat odlišné v SQL.

V klauzuli Select vyberte místo

Zvláštní argument by měl být umístěn bezprostředně za klíčem Select v dotazy. Aplikuje se okamžitě na všechny sloupce zadané v klauzuli Vybrat, protože bude vyloučit absolutně identické řádky z výsledku dotazu. Proto stačí specifikovat "při výběru výrazu" při psaní dotazu SQL. Jedinou výjimkou je použití odlišných uvnitř agregátních funkcí, které o trochu později uvažujeme. sql vyberte odlišný

Mělo by být zapamatováno, že většina DBMS nerozpozná vaši žádost takto:

SELECT zřetelný jiný účet, odlišný Oboi. *

Z Oboi

INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi

Zde je argument zadán několikrát nebo zadán jednou, ale před druhým, třetím nebo jiným volitelným sloupcem. Dostanete chybu s odkazem na nepřesnosti v syntaxi.

Použití odlišných standardních dotazů

Je zřejmé, že při správné konstrukci struktury tabulek a jejich naplnění jsou situace v jedné tabulce vyloučeny, když se vyskytují zcela identické řetězce. Výkon dotazu "Select distinct *" s výběrem z jedné tabulky je tedy prakticky nepraktický. odlišný v sql

Představte si situaci, kdy musíme zjistit, jaký typ tapety máme, jen pro pohodlí, třídit podle typu:

ZVOLIT Oboj.typ

Z příkazu Oboi podle typu

A dostaneme výsledek:

typ

Papír

Papír

Dvouvrstvý papír

Dvouvrstvý papír

Vinyl

Vinyl

Fabric

Netkané fleece rukavice

Netkané fleece rukavice

Jak vidíte, v tabulce jsou duplicitní řádky. Pokud přidáme k oddělené klauzuli Vybrat:

ZVOLTE výrazný typ Oboi

Z příkazu Oboi podle typu

pak získáme výsledek bez opakování:

typ

Papír

Dvouvrstvý papír

Vinyl

Fabric

Netkané fleece rukavice

Pokud byly údaje správně zadány do tabulek, pak ihned po volání nebo požadavku kupujících budeme schopni odpovědět, že tekuté tapety, skleněné stěny a akrylové tapety nejsou k dispozici v obchodě. Vzhledem k tomu, že sortiment v obchodech není obvykle omezen na sto tapet, bylo by spíše náročné na práci prohledávat seznam ne-jedinečných typů.

Použití odlišných agregačních funkcí

SQL odlišný lze použít s libovolnou agregační funkcí. Ale pro Min a Max své žádosti nebude mít žádný efekt, ale při výpočtu částky nebo průměrná hodnota je zřídka k situaci, kdy by nikdo vzít v úvahu opakování.

Řekněme, že chceme vědět, kolik je náš sklad plný, a za to posíláme požadavek, který vypočítá celkový počet rolí ve skladu:

SELECT součet (Ostatki.count)

FROM Ostatki

Dotaz vrátí odpověď 143. Pokud se změníme na:

SELECT součet (zřetelný jiný účet)

FROM Ostatki

pak máme jen 119, protože tapety podle článků 3 a 7 jsou na skladě ve stejném množství. Je však zřejmé, že tato odpověď je nesprávná.

Nejčastěji se používá funkce SQL s funkcí Count. Takže bez problémů zjistíme, kolik unikátních typů tapet máme obecně:

Počet SELECT (odlišný typ Oboi)

Z Oboi

A získat výsledek 5 - papír běžné a dvouvrstvé, vinylové, textilní a netkané. Určitě všichni viděli reklamu jako: "Pouze máme více než 20 druhů různých tapet!", Což znamená, že v tomto obchodě není pár desítek rolí všeho, ale tapety nejrůznějších moderních typů.

Je zajímavé, že v jedné žádosti můžete zadat několik funkcí Počítání s nebo bez odlišného atributu. To znamená, že toto je jediná situace, ve které může být několikrát odlišná.

Kdy bych měl odmítnout použití argumentu

Použití odlišného argumentu SQL by mělo být vyřazeno jedním ze dvou způsobů:

  1. Vybíráte z tabulek a jste si jisti, že v jednotlivých hodnotách jsou jedinečné. V tomto případě je použití argumentu neúspěšné, protože to je další zatížení serveru nebo klienta (v závislosti na typu DBMS).
  2. Budete se bát ztráty potřebných údajů. Vysvětlíme to.

Předpokládejme, že šéf vás požádá, abyste zobrazili seznam tapet, které máte, a uveďte pouze dva sloupce - typ a barvu. Zvykem zadáte argument odlišný:

ZVOLTE zřetelný typ Oboi, Oboi.color

Z Oboi

OBJEDNAT podle typu Oboi

A - ztratit některé údaje:

typ

barvy

Papír

Vícebarevná

Dvouvrstvý papír

Béžová

Vinyl

Brown

Vinyl

Orange

Fabric

Pink

Netkané fleece rukavice

Béžová

Netkané fleece rukavice

Bílá

Může se zdát, že máme pouze jeden typ papírové tapety (konvenční a dvouvrstvé), i když ve skutečnosti dokonce i v našem malém stole mají dva články (výsledek bez rozdílu):

typ

barvy

Papír

Vícebarevná

Papír

Vícebarevná

Dvouvrstvý papír

Béžová

Dvouvrstvý papír

Béžová

Vinyl

Brown

Vinyl

Orange

Fabric

Pink

Netkané fleece rukavice

Bílá

Netkané fleece rukavice

Béžová

Proto, stejně jako při psaní jakéhokoli dotazu, s odlišným argumentem, musíte být opatrní a správně vyřešit problém s jeho aplikací v závislosti na úkolu.

Alternativně odlišné

Opakem odlišného argumentu je argument Vše. Když ji použijete, budou uloženy duplicitní řádky. Ale protože DBMS ve výchozím nastavení myslí, že je nutné vytisknout všechny hodnoty, argument All je spíše specifikátorem než skutečným funkčním argumentem. odlišný popis sqlDoufáme, že nyní pochopíte, kdy je použita odlišná (SQL). Popis vám poskytl úplné informace o vhodnosti 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 odvození nepřesných informací.

Sdílet na sociálních sítích:

Podobné
© 2021 nisfarm.ru