ComputereFiltyper

SQL distinkt: beskrivelse, eksemplerne egenskaber

Ofte når du bruger SQL til at hente data fra tabellerne, at brugeren modtager den redundante data er eksistensen af en absolut identiske dublerede rækker. For at undgå denne situation, bruger SQL distinkt argument i sætningen Vælg. Denne artikel vil diskutere eksempler på anvendelsen af dette argument, samt situationer, hvor ansøgningen bør opgives af argumentet.

Før vi går over til at overveje de konkrete eksempler, oprette databasen krævede et par borde.

forberedelse bordet

Forestil dig, at vi har en database lagrer information om tapetet præsenteret i to tabeller. Denne tabel oboi (tapet) med id felter (entydig identifikator), af typen (type tapet -. Papir, vinyl, etc.), farve (farve), en struct (struktur) og prisen (pris). Og tabel Ostatki (rester) med id_oboi felter (en henvisning til den entydige identifikator i tabellen Oboi) og count (antallet af ruller på lager).

Fyld datatabel. I tabellen tilføje tapetet 9 poster:

Oboi

id

typen

farve

struct

pris

1

papir

flerfarvet

prægede

56,9

2

papir dobbeltlaget

beige

glat

114,8

3

vinyl

Orange

prægede

504

4

Fleece

beige

prægede

1020,9

5

papir dobbeltlaget

beige

glat

150,6

6

papir

flerfarvet

glat

95,4

7

vinyl

brun

glat

372

8

Fleece

hvid

prægede

980,1

9

klud

pink

glat

1166,5

Tabellen med resterne - og ni poster:

Ostatki

id_oboi

tælle

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

Vi går videre til beskrivelsen af den særskilte orden i SQL.

Placer tydelig i Select klausul

særskilt argument skal placeres umiddelbart efter Vælg nøgleord i forespørgsler. Han anvendes på alle de kolonner er specificeret i sætningen Select, fordi det vil blive udelukket fra den endelige forespørgslen resultat er absolut identiske strenge. Således engang er nok til at angive, når du skriver SQL «select distinct» anmodning. Undtagelsen er brugen af distinkte inde aggregerede funktioner, der ser på lidt senere.

Det bør erindres, at de fleste af databasen og genkender ikke din type anmodning:

SELECT distinkt Ostatki.Count, distinkt Oboi. *

FRA oboi

INNER JOIN Ostatki PÅ Oboi.id = Ostatki.id_oboi

Der blev ikke anset argument flere gange eller en gang angivet, men før det andet, tredje eller anden valgt kolonne. Du vil få en fejl med henvisning til en fejl i syntaksen.

Ansøgning særskilte forespørgsler i standard

Det er indlysende, at med ordentlig bygningsstruktur borde og fylde dem i en enkelt tabel udelukket situationen, når der er absolut identiske strenge. Derfor forespørgslen henrettelse «Vælg distinkt *» med en prøve af en tabel er upraktisk.

Overvej en situation, hvor vi har brug for at vide, hvilken type vi har tapet, bare for nemheds skyld, for at sortere efter type:

SELECT Oboi.type

FRA Oboi ordre efter type

Og få resultaterne:

typen

papir

papir

papir dobbeltlaget

papir dobbeltlaget

vinyl

vinyl

klud

Fleece

Fleece

Som det ses af tabellen er der dublerede rækker. Hvis vi tilføjer forslaget Vælg tydelig:

SELECT distinkt Oboi.type

FRA Oboi ordre efter type

vi får det resultat uden gentagelse:

typen

papir

papir dobbeltlaget

vinyl

klud

Fleece

Så hvis korrekt indtaste data i en tabel, så umiddelbart efter et telefonopkald eller anmodning fra købere, vi kan svare, at de flydende tapet, glasfiber og akryl tapet til rådighed i butikken er ikke. I betragtning af, at udvalget af butikker normalt er ikke begrænset til et hundrede tapet, få vist listen over de ikke-unikke typer ville være helt arbejdskrævende.

Anvendelse af forskellige aggregerede funktioner inden

SQL distinkt argument kan anvendes med enhver samlede funktion. Men for min og Max dens anvendelse vil ikke have nogen effekt, men ved beregning af beløb eller den gennemsnitlige værdi er sjældent en situation, hvor ingen ville have til at tage hensyn til de gentagelser.

Antag, at vi ønsker at kontrollere kapaciteten af vores lager og til at sende denne anmodning, beregner det samlede antal spoler på lager:

SELECT sum (Ostatki.count)

FRA Ostatki

Anmodning vil give svaret 143. Men hvis vi vil ændre sig til:

SELECT sum (distinkt Ostatki.count)

FRA Ostatki

vi opnå den samlede 119, som baggrund for varenumre 3 og 7 er på lager i den samme mængde. Men det er indlysende, at svaret er forkert.

Oftest anvendes i SQL distinkt funktion Count. Så kan vi nemt finde ud af, hvor mange unikke typer af tapet, har vi:

SELECT count (distinkt Oboi.type)

FRA oboi

Og få resultatet af 5 - almindeligt papir og to lag vinyl og ikke-vævet stof. Sikkert alle set de reklamer som: "Kun vi har over 20 forskellige slags tapet", hvormed menes, at denne butik er ikke bare et par dusin ruller og en bred vifte af tapet moderne typer.

Det er interessant, at i den samme forespørgsel, kan du angive flere funktioner som Grev attribut DISTINCT, og uden det. Det er den eneste situation, hvor distinkt i Select'e kan være til stede flere gange.

Når at opgive brugen af argumentet

Fra brugen af SQL distinkt argument bør opgives i én af følgende betingelser:

  1. Du udfører et udvalg af borde og er overbeviste i den unikke hver værdi. I dette tilfælde brugen af argumentet er uhensigtsmæssigt, fordi det er en ekstra belastning på serveren eller klienten (afhængigt af typen af DBMS).
  2. Er du bange for at miste dine data. Lad os forklare.

Antag chef beder dig om at angive den tapet, som du har, med angivelse af kun to søjler - den type og farve. Ud af vane, du giver et argument særskilt:

SELECT distinkt Oboi.type, Oboi.color

FRA oboi

ORDER BY Oboi.type

Og - miste informationer:

typen

farve

papir

flerfarvet

papir dobbeltlaget

beige

vinyl

brun

vinyl

Orange

klud

pink

Fleece

beige

Fleece

hvid

Det kan give indtryk af, at papir tapet (konventionel og dual-layer) har vi kun ét sind, i virkeligheden, selv i vores lille tabel to artiklen (resultere uden tydelig):

typen

farve

papir

flerfarvet

papir

flerfarvet

papir dobbeltlaget

beige

papir dobbeltlaget

beige

vinyl

brun

vinyl

Orange

klud

pink

Fleece

hvid

Fleece

beige

Derfor, som skriftligt enhver anmodning med det argument distinkt behov for at være forsigtig og kompetent til at træffe afgørelse om dens anvendelse, afhængigt af opgaven.

alternativ distinkt

I modsætning til det argument tydelig - Alle argument. I sin anvendelse lagres dublerede rækker. Men som standard databasen og finder, at det er nødvendigt for at vise alle de værdier, det argument Alle - det er snarere en kvalifikationskamp end den faktiske funktion argument. Vi håber, at du nu forstår, at distinkt (SQL) bruges. Beskrivelse giver dig fuld information om mulighederne for at bruge dette argument til at løse forskellige problemer. Efter alt, da det viste sig, selv sådan en simpel argument i sin ansøgning skjuler meget konkret mulighed for at miste nogle data og vise ukorrekte oplysninger.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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