DatorerFiltyper

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:

  1. 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).
  2. Ä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. Vi hoppas att du nu förstår att distinkt (SQL) används. Beskrivning ge dig fullständig information om möjligheten att använda argumentet att lösa olika problem. När allt kommer omkring, som det visade sig, inte ens en sådan enkel argument i sin ansökan döljer mycket påtagligt möjligheten att förlora en del data och visa felaktig information.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 sv.birmiss.com. Theme powered by WordPress.