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.
Obsah
Než začneme zvažovat konkrétní příklady, vytvoříme v databázi několik potřebných tabulek.
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.
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ý.
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ů:
- 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).
- 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. Doufá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í.
- Coalesce sql: popis, použití, příklady
- Jak si vybrat tapetu kompetentně?
- Jak si vzít tapety: praktické doporučení
- Jak vytvořit databázi v aplikaci Access. Práce s databází aplikace Access
- Jak psát dotazy SQL - podrobné příklady
- Mohu tapetu tapetu na staré tapety? Odpovědi odborníků
- Co je identifikátor a kde se používá?
- Použití kódu HTML v tabulce
- Jaký je rozdíl mezi vinylovou tapetou a netkanou tapetou? Podobnosti a zásadní rozdíly
- SQL Kde: aplikační metody a příklady
- MySQL JOIN: popis, příklad použití příkazu a doporučení
- Příkaz SQL INNER JOIN: příklady, syntaxe a funkce
- Funkce vytvoření tabulky v SQL - Vytvoření tabulky
- Tabulační funkce: jak psát program?
- Vytváření dotazů v aplikaci Access. Typy požadavků
- Vlookup Excel: jak používat (příklady)
- Vymazání duplicit MySQL
- Vyberte jedinečné záznamy v dotazu MySQL: vyberte odlišné
- Podrobnosti o přístupu k tabulkám
- Která tapeta pro chodbu?
- Vinyl tapety na netkané bázi a jejich vlastnosti