/ / SQL tydelig: beskrivelse, eksempler, egenskaper

SQL tydelig: beskrivelse, eksempler, egenskaper

Ofte når du bruker SQL for prøvetakinginformasjon fra tabellene mottar brukeren overflødige data, som består av tilstedeværelsen av helt identiske dupliserte linjer. For å utelukke denne situasjonen, bruk SQL-distinkt argumentet i Select-klausulen. I denne artikkelen vil vi vurdere eksempler på å bruke dette argumentet, samt situasjoner der det er bedre å forlate argumentet.

Før vi begynner å vurdere spesifikke eksempler, vil vi opprette et par nødvendige tabeller i databasen.

sql tydelig

Forbereder tabeller

Tenk deg at vi har lagret i vår databaseinformasjon om bakgrunnen, presentert i to tabeller. Dette er Oboi-tabellen (bakgrunnsbilde) med feltene id (unik identifikator), type (type tapet - papir, vinyl, etc.), farge, struktur og pris. Og Ostatki-bordet (rester) med feltene id_oboi (referanse til den unike identifikatoren i Oboi-tabellen) og telle (antall ruller i lageret).

Fyll inn tabellene med data. I bordet med tapet legg til 9 oppføringer:

Oboi

id

typen

farge

struct

pris

1

papir

flerfarget

pregede

56,9

2

Dobbellags papir

beige

glatt

114,8

3

vinyl

Orange

pregede

504

4

Ikke-vevde fleecehansker

beige

pregede

1020,9

5

Dobbellags papir

beige

glatt

150,6

6

papir

flerfarget

glatt

95,4

7

vinyl

brun

glatt

372

8

Ikke-vevde fleecehansker

hvit

pregede

980,1

9

klut

rosa

glatt

1166,5

I tabellen med remainders er det også ni poster:

Ostatki

id_oboi

telle

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

La oss begynne med å beskrive hvordan du bruker distinkt i SQL.

Legg merke til i Select-klausulen

Det distinkte argumentet bør plasseres umiddelbart etterVelg søkeordet i spørringene. Den brukes umiddelbart til alle kolonnene som er angitt i Select-klausulen, fordi den ekskluderer helt identiske rader fra resultatet av spørringen. Dermed er det tilstrekkelig å spesifisere "velg distinkte" når du skriver SQL-spørringen. Det eneste unntaket er bruk av forskjellig inne i aggregatfunksjonene, som vi vil vurdere litt senere.

sql velg distinkte

Det skal huskes at de fleste DBMSer ikke gjenkjenner spørringen av skjemaet:

VELG utmerket Ostatki.Count, tydelig Oboi. *

FRA Oboi

INNER KJØP Ostatki ON Oboi.id = Ostatki.id_oboi

Her angis argumentet flere ganger, eller det er angitt en gang, men før den andre, tredje eller andre valgbare kolonne. Du får en feil med henvisning til unøyaktigheter i syntaksen.

Brukes tydelig i vanlige spørsmål

Tydeligvis med riktig strukturTabeller og fylling, inne i samme tabell, er situasjoner der helt identiske rader oppstår, utelukket. Derfor er utførelsen av spørringen "Select distinct *" med et utvalg fra ett bord praktisk talt upraktisk.

tydelig i sql

Tenk deg en situasjon der vi må finne ut hvilken type tapet vi har, umiddelbart etter bekvemmelighet, sorterer vi etter type:

VELG Oboi.type

FRA Oboi rekkefølge etter type

Og vi får resultatet:

typen

papir

papir

Dobbellags papir

Dobbellags papir

vinyl

vinyl

klut

Ikke-vevde fleecehansker

Ikke-vevde fleecehansker

Som du kan se inneholder tabellen dupliserte rader. Hvis vi legger til Select distinkt-klausulen:

VELG utmerket Oboi.type

FRA Oboi rekkefølge etter type

så får vi resultatet uten gjentakelser:

typen

papir

Dobbellags papir

vinyl

klut

Ikke-vevde fleecehansker

Dermed, hvis dataene ble riktig inngåttbordet, så umiddelbart etter en samtale eller kundeforespørsel, vil vi kunne svare på at det ikke er væske tapeter, glassveggbelegg og akryl tapet i butikken. Med tanke på at sortimentet i butikkene vanligvis ikke er begrenset til hundre bakgrunnsbilder, ville det være ganske arbeidskrevende å se gjennom listen over ikke-unike typer.

Bruke forskjellige innvendige aggregatfunksjoner

SQL-tydelig argument kan brukes med noenaggregatfunksjon. Men for Min og Max vil søknaden ikke ha noen effekt, og når man beregner summen eller gjennomsnittsverdien, er det sjelden å tenke seg en situasjon når det ikke ville være nødvendig å ta hensyn til gjentakelser.

Anta at vi vil vite hvor fullt vårt lager er, og for dette sender vi en forespørsel som beregner totalt antall ruller på lager:

SELECT sum (Ostatki.count)

FRA Ostatki

Forespørselen vil returnere 143. Hvis vi bytter til:

SELECT sum (tydelig Ostatki.count)

FRA Ostatki

da får vi bare 119, fordi tapetet under artiklene 3 og 7 er på lager i samme mengde. Det er imidlertid åpenbart at dette svaret er feil.

Oftest i SQL, er distinkt brukt med Count-funksjonen. Så uten vanskeligheter kan vi finne ut hvor mange unike typer tapeter vi alle har:

SELECT telle (tydelig Oboi.type)

FRA Oboi

Og få resultatet 5 - papir normalt ogto-lags, vinyl, stoff og ikke-vevd. Sikkert har alle sett en annonse av typen: "Bare vi har mer enn 20 typer forskjellige bakgrunnsbilder!", Som betyr at i denne butikken er det ikke et par dusin ruller av alt, men bakgrunnsbilder av de mest varierte moderne typene.

Interessant, i en forespørsel kan du spesifisereflere teller funker både med og uten den forskjellige attributten. Det vil si, dette er den eneste situasjonen hvor forskjellige i Select "e kan være tilstede flere ganger.

Når skal forlate argumentet

Bruken av SQL-tydelig argument bør kasseres i ett av to tilfeller:

  1. Du er prøvetaking fra bordene og er selvsikkerunikt verdier i hver. I dette tilfellet er bruken av argumentet upraktisk, fordi det er en ekstra belastning på serveren eller klienten (avhengig av typen av database).
  2. Du er redd for å miste de nødvendige dataene. Vi vil forklare.

Anta at sjefen ber deg om å vise en liste over bakgrunnsbilder du har, og viser kun to kolonner - type og farge. Uten vaner spesifiserer du et tydelig argument:

VELG markert Oboi.type, Oboi.color

FRA Oboi

BESTILL BY Oboi.type

Og - du mister noen data:

typen

farge

papir

flerfarget

Dobbellags papir

beige

vinyl

brun

vinyl

Orange

klut

rosa

Ikke-vevde fleecehansker

beige

Ikke-vevde fleecehansker

hvit

Det kan gi inntrykk av at vi bare har en type papirbakgrunn (vanlig og dobbeltlags), selv om det faktisk er i vårt lille bord to artikler hver (resultatet er ikke klart):

typen

farge

papir

flerfarget

papir

flerfarget

Dobbellags papir

beige

Dobbellags papir

beige

vinyl

brun

vinyl

Orange

klut

rosa

Ikke-vevde fleecehansker

hvit

Ikke-vevde fleecehansker

beige

Derfor, som med skrivingen av et søk, med det tydelige argumentet, må du være forsiktig og løse kompetent løse problemet ved bruk av dette, avhengig av oppgaven.

Alternativ til distinkt

Det motsatte av det distinkte argumentet er argumentetAll. Når det brukes, blir dupliserte linjer bevaret. Men siden DBMS mener som standard at det er nødvendig å skrive ut alle verdier, er argumentet All en spesifier snarere enn et ekte funksjonelt argument.

tydelig sql beskrivelse
Vi håper at du nå forstår nårgjelder tydelig (SQL). Beskrivelsen har gitt deg fullstendig informasjon om hvorvidt det er hensiktsmessig å bruke dette argumentet for å løse ulike problemer. Tross alt, som det viste seg, skjuler et slikt enkelt argument i søknaden sin helt konkrete sannsynlighet for å miste noen data og vise unøyaktig informasjon.

Les mer: