Datamaskiner, Filtyper
SQL tydelig: beskrivelse, eksempler, egenskaper
Ofte når du bruker SQL til å hente data fra tabellene, mottar brukeren overflødige data er eksistensen av en helt identisk like rader. For å unngå denne situasjonen, bruker SQL tydelig argument i setningen Velg. Denne artikkelen vil diskutere eksempler på bruk av dette argumentet, samt situasjoner der programmet skal bli forlatt av argumentet.
Før vi går videre til å vurdere konkrete eksempler, opprette databasen kreves et par bord.
forberedelse bordet
Tenk deg at vi har en database lagrer informasjon om bakgrunnen presentert i to tabeller. Denne tabellen oboi (bakgrunn) med ID-felt (unik ID), av en type (type tapet -. Papir, vinyl, etc.), farge (farge), en struct (struktur) og pris (spot). Og tabell Ostatki (rest) med id_oboi felt (en referanse til den unike identifikatoren i tabell Oboi) og teller (antall ruller som i lager).
Fyll datatabellen. I tabellen legge tapet 9 poster:
Oboi | ||||
id | typen | farge | struct | pris |
1 | papir | flerfarget | pregede | 56.9 |
2 | papir tolags | beige | glatt | 114.8 |
3 | vinyl | Orange | pregede | 504 |
4 | fleece | beige | pregede | 1020,9 |
5 | papir tolags | beige | glatt | 150,6 |
6 | papir | flerfarget | glatt | 95,4 |
7 | vinyl | brun | glatt | 372 |
8 | fleece | hvit | pregede | 980,1 |
9 | klut | rosa | glatt | 1166,5 |
Tabellen med restene - og ni poster:
Ostatki | |
id_oboi | telle |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Vi fortsetter til beskrivelsen av den distinkte orden i SQL.
Plasser tydelig i SELECT-leddet
tydelig argument bør plasseres umiddelbart etter Velg søkeord i spørringer. Han brukes på alle kolonnene spesifisert i setningen Select, fordi det vil bli ekskludert fra det endelige søkeresultatet er helt identiske strenger. Dermed er en gang nok til å angi når du skriver SQL «velge distinkt» forespørsel. Unntaket er bruk av forskjellige inne samlede funksjoner som ser på litt senere.
Det bør bli husket at det meste av databasen og gjenkjenner ikke din type forespørsel:
VELG tydelig Ostatki.Count, tydelig Oboi. * Fra oboi INNER JOIN Ostatki PÅ Oboi.id = Ostatki.id_oboi |
Det ble ikke ansett som argument flere ganger eller en gang er angitt, men før den andre, tredje eller en annen valgt kolonne. Du vil få en feilmelding henviser til en feil i syntaks.
Søknad forskjellige spørsmål i standard
Det er åpenbart at med riktig bygningsstrukturen tabeller og fylle dem innenfor en enkelt tabell ekskludert situasjonen når det er helt identiske strenger. Derfor spørringen kjøres «Velg distinkt *» med en prøve av ett bord er upraktisk.
Betrakt en situasjon når vi trenger å vite hva slags type vi har tapet, bare for enkelhets skyld, for å sortere etter type:
VELG Oboi.type Fra Oboi rekkefølge etter type |
Og få de resultatene:
typen |
papir |
papir |
papir tolags |
papir tolags |
vinyl |
vinyl |
klut |
fleece |
fleece |
Som det fremgår av tabellen er det like rader. Hvis vi legger forslaget Velg tydelig:
VELG tydelig Oboi.type Fra Oboi rekkefølge etter type |
vi får resultatet uten repetisjon:
typen |
papir |
papir tolags |
vinyl |
klut |
fleece |
Dermed, hvis riktig inn data i en tabell, og deretter umiddelbart etter en telefonsamtale eller anmodning fra kjøperne kan vi svare at de flytende tapet, glassfiber og akryl tapet tilgjengelige i butikken er det ikke. Gitt at utvalget av butikker er vanligvis ikke begrenset til hundre tapet, se listen over de ikke-unike typer ville være ganske arbeidskrevende.
Anvendelse av distinkte samlede funksjoner innenfor
SQL tydelig argumentet kan brukes sammen med en hvilken som helst samlefunksjonen. Men for Min og Max sin søknad vil ikke ha noen effekt, men ved beregning av summen eller gjennomsnittsverdien er sjelden en situasjon der ingen ville ha til å ta hensyn til repetisjoner.
Anta at vi ønsker å sjekke kapasiteten på vårt lager og sende denne forespørselen, beregner det totale antall spoler på lager:
SELECT sum (Ostatki.count) Fra Ostatki |
Forespørselen vil gi svaret 143. Men hvis vi vil endres til:
SELECT sum (distinkt Ostatki.count) Fra Ostatki |
vi får samlet 119, som bakgrunn for delenumre 3 og 7 er på lager i samme mengde. Det er imidlertid åpenbart at svaret er galt.
Oftest brukt i SQL distinkt funksjon Count. Så kan vi lett finne ut hvor mange unike typer tapeter, men vi har:
SELECT count (distinkt Oboi.type) Fra oboi |
Og få resultatet av 5 - ordinært papir og dobbelt-lags vinyl og ikke-vevd stoff. Sikkert alle sett annonsene som: "Bare vi har over 20 forskjellige typer tapeter," hvilket betyr at denne butikken er ikke bare et par dusin rundstykker og en rekke bakgrunns moderne typer.
Det er interessant at i samme spørring, kan du angi flere funksjoner som Count attributt DISTINCT, og uten det. Det er den eneste situasjon hvor tydelig i Select'e kan være til stede flere ganger.
Ved å forlate bruken av argumentet
Fra bruk av SQL tydelig argument bør bli forlatt i en av to tilfeller:
- Du utfører et utvalg av tabeller og er sikker i den unike verdien hver. I dette tilfellet, er bruken av argumentet upassende, fordi det er en ekstra belastning på tjeneren eller klient (avhengig av typen av DBMS).
- Er du redd for å miste data. La oss forklare.
Anta sjefen ber deg om å liste opp bakgrunnsbilde som du har, med angivelse av bare to kolonner - type og farge. Ut av vane, gi deg et argument tydelig:
|
VELG tydelig Oboi.type, Oboi.color Fra oboi ORDER BY Oboi.type |
Og - miste noen data:
typen | farge |
papir | flerfarget |
papir tolags | beige |
vinyl | brun |
vinyl | Orange |
klut | rosa |
fleece | beige |
fleece | hvit |
Det kan gi inntrykk av at papir tapet (konvensjonelle og dual-layer) vi har bare en tanke, faktisk, selv i vårt lille bord av to artikkel (resultat uten distinkt):
typen | farge |
papir | flerfarget |
papir | flerfarget |
papir tolags | beige |
papir tolags | beige |
vinyl | brun |
vinyl | Orange |
klut | rosa |
fleece | hvit |
fleece | beige |
Derfor, som skriftlig enhver forespørsel med argumentet tydelig behovet for å være forsiktig og kompetanse til å avgjøre sin søknad, avhengig av oppgaven.
alternativ tydelig
I motsetning til argumentet tydelig - All argument. I sin anvendelse like rader er lagret. Men som standard database og finner at det er nødvendig å vise alle verdiene, argumentet All - det er snarere en kvalifiseringskamp enn selve funksjonsargument.
Similar articles
Trending Now