Datorer, Filtyper
SQL distinkt: beskrivning, exempel, egenskaper
Ofta när du använder SQL för att hämta data från tabellerna, får användaren den redundanta data är förekomsten av en helt identiska dubbla rader. För att undvika denna situation, använda SQL distinkt argument i meningen Select. Denna artikel kommer att diskutera exempel på användning av detta argument, liksom situationer där ansökan ska överges av argumentet.
Innan vi går vidare för att ta hänsyn till specifika exempel, skapa databasen krävs ett par tabeller.
beredningsbordet
Föreställ dig att vi har en databas lagrar information om tapeten presenteras i två tabeller. Denna tabell oboi (tapeter) med id fält (unik identifierare), av typen (typ av tapet -. Papper, vinyl, etc), färg (färg), en struct (struktur), och priset (pris). Och bord Ostatki (rester) med id_oboi fält (en hänvisning till den unika identifieraren i tabellen Oboi) och räknevärdet (antalet rullar i lager).
Fyll datatabellen. I tabellen lägga tapeten 9 poster:
Oboi | ||||
id | Typ | färg | struct | pris |
1 | papper | multicolor | präglade | 56,9 |
2 | dubbel pappers skiktat | beige | släta | 114,8 |
3 | vinyl | Orange | präglade | 504 |
4 | fleece | beige | präglade | 1020,9 |
5 | dubbel pappers skiktat | beige | slät | 150,6 |
6 | papper | multicolor | slät | 95,4 |
7 | vinyl | brun | slät | 372 |
8 | fleece | vit | präglade | 980,1 |
9 | duk | rosa | slät | 1166,5 |
Tabellen med resterna - och nio poster:
Ostatki | |
id_oboi | räkna |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Vi fortsätter till beskrivningen av den distinkta ordning i SQL.
Placera distinkta i SELECT-satsen
distinkt argument som ska placeras direkt efter Välj sökord i frågorna. Han tillämpas på alla kolumner som anges i meningen Select, eftersom det kommer att uteslutas från det slutliga frågeresultatet är helt identiska strängar. Således är en gång tillräckligt att ange när du skriver SQL «väljer distinkt» begäran. Undantaget är användningen av olika inuti mängdfunktioner som tittar på lite senare.
Man bör komma ihåg att de flesta av databasen och känner inte igen din typ av förfrågan:
SELECT distinkt Ostatki.Count, distinkt Oboi. * FRÅN oboi INNER GÅ Ostatki ON Oboi.id = Ostatki.id_oboi |
Det ansågs inte argument flera gånger eller en gång anges, men inför den andra, tredje eller annan vald kolumn. Du kommer att få ett felmeddelande som hänvisar till ett fel i syntax.
Applikations tydliga frågor i standard
Det är uppenbart att med rätt byggnadskonstruktion tabeller och fylla dem i en enda tabell uteslutit situation när det finns absolut identiska strängar. Därför, utförande frågan «Välj distinkt *» med ett prov av en tabell är opraktiskt.
Tänk dig en situation när vi behöver veta vilken typ vi har tapeter, bara för enkelhetens skull, för att sortera efter typ:
VÄLJ Oboi.type FRÅN Oboi ordning efter typ |
Och få resultaten:
Typ |
papper |
papper |
dubbel pappers skiktat |
dubbel pappers skiktat |
vinyl |
vinyl |
duk |
fleece |
fleece |
Som framgår av tabellen finns dubbla rader. Om vi lägger förslaget Välj distinkta:
SELECT distinkt Oboi.type FRÅN Oboi ordning efter typ |
vi får resultatet utan repetition:
Typ |
papper |
dubbel pappers skiktat |
vinyl |
duk |
fleece |
Således om det är korrekt att mata in data i en tabell, sedan omedelbart efter ett telefonsamtal eller begäran av köpare kan vi svara att flytande tapeter, glasfiber och akryl tapeter finns i butiken är det inte. Med tanke på att utbud av affärer oftast inte är begränsad till hundra tapeter, visa listan över icke-unika typer skulle vara ganska personalintensiv.
Applicering av distinkta aggregat funktioner inom
SQL distinkt argument kan användas med en sammanlagd funktion. Men för Min och Max dess tillämpning kommer att ha någon effekt, men vid beräkning av summan eller medelvärdet är sällan en situation där ingen skulle behöva ta hänsyn till repetitioner.
Antag att vi vill kontrollera kapaciteten i vårt lager och skicka denna begäran, beräknar det totala antalet spolar i lager:
VÄLJ summan (Ostatki.count) FRÅN Ostatki |
Begäran kommer att ge svaret 143. Men om vi kommer att ändras till:
VÄLJ summan (distinkt Ostatki.count) FRÅN Ostatki |
vi erhålla den totala 119, som bakgrund för artikelnummer 3 och 7 finns i lagret i samma mängd. Det är dock uppenbart att svaret är fel.
Oftast används i SQL distinkt funktion Count. Så kan vi lätt ta reda på hur många unika typer av tapeter, vi har:
VÄLJ count (distinkt Oboi.type) FRÅN oboi |
Och få resultatet av fem - vanligt papper och dubbla lager vinyl och fiberduk. Visst alla sett reklam som "Bara vi har över 20 olika typer av tapeter" varmed menas att denna affär är inte bara ett par dussin rullar och en mängd olika tapeter moderna slag.
Det är intressant att i samma fråga, kan du ange flera funktioner som greve attribut distinkt och utan den. Det är det enda situation där distinkta i Select'e kan förekomma flera gånger.
När att överge användningen av argumentet
Från användningen av SQL distinkt argument bör överges i ett av två fall:
- Du utför ett urval av tabeller och är övertygade om det unika värdet vardera. I detta fall är användningen av argumentet olämpligt eftersom det är en extra belastning på servern eller klienten (beroende på vilken typ av DBMS).
- Är du rädd för att förlora data. Låt oss förklara.
Antag chef ber dig att lista tapeten som du har, med angivande av endast två kolumner - typ och färgen. Av gammal vana, du ger ett argument distinkt:
VÄLJ distinkt Oboi.type, Oboi.color FRÅN oboi ORDER BY Oboi.type |
Och - förlora en del data:
Typ | färg |
papper | multicolor |
dubbel pappers skiktat | beige |
vinyl | brun |
vinyl | Orange |
duk | rosa |
fleece | beige |
fleece | vit |
Det kan ge intryck av att papperstapet (konventionella och dual-layer) har vi bara ett sinne, i själva verket, även i våra små bord med två artikel (resultatet utan tydlig):
Typ | färg |
papper | multicolor |
papper | multicolor |
dubbel pappers skiktat | beige |
dubbel pappers skiktat | beige |
vinyl | brun |
vinyl | Orange |
duk | rosa |
fleece | vit |
fleece | beige |
Därför, som skriftligen varje begäran med argumentet distinkta behov av att vara försiktig och behörig att fatta beslut om sin ansökan, beroende på uppgiften.
alternativ distinkt
I motsats till vad distinkt - Alla argument. I sin ansökan dubbla rader lagras. Men som standarddatabas och finner att det är nödvändigt att visa alla värden, argumentet allt - det är snarare en kval än själva funktionen argument.
Similar articles
Trending Now