Računala, Tipove datoteka
SQL različita: opis, primjere, svojstva
Često kada koristite SQL dohvatiti podatke iz tablice, korisnik dobija suvišan podatak je postojanje apsolutno identična duplih redova. Da biste izbjegli ovu situaciju, koristite SQL poseban argument u rečenici Select. Ovaj članak će razgovarati primjere upotrebe ovog argumenta, kao i situacije u kojima se aplikacija treba biti napušten od strane argumenta.
Prije nego što nastavimo da razmotre konkretne primjere, stvoriti bazu podataka potrebno nekoliko stolova.
priprema stola
Zamislite da imamo trgovine baze podataka informacije o tapeta predstavljena u dva stola. Ova tabela oboi (wallpaper) sa id polja (jedinstveni identifikator), tipa (tip tapeta -. Papir, vinil, itd), boja (boja), strukturu (strukturu) i cijena (cijena). I sto Ostatki (ostaci) sa id_oboi polja (referenca na jedinstveni identifikator u tabeli Oboi) i count (broj valjaka u prodaji).
Popunite tablicu podataka. U tabeli dodati pozadinu 9 zapisa:
oboi | ||||
id | tip | boja | struct | cijena |
1 | papir | šaren | isklesan | 56.9 |
2 | papir dvoslojna | bež | glatko | 114.8 |
3 | vinil | narandža | isklesan | 504 |
4 | runo | bež | isklesan | 1020,9 |
5 | papir dvoslojna | bež | glatko | 150.6 |
6 | papir | šaren | glatko | 95.4 |
7 | vinil | braon | glatko | 372 |
8 | runo | bijel | isklesan | 980,1 |
9 | tkanina | roze | glatko | 1166,5 |
U tabeli sa ostacima - i devet zapisa:
Ostatki | |
id_oboi | računati |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Mi smo prešli na opis različitih reda u SQL.
Postavite različita u SELECT klauzuli
poseban argument treba staviti odmah nakon Izaberite ključnu riječ u upita. On se obratio sve kolone navedene u rečenici Select, jer će biti isključeni iz rezultata konačnog upita je apsolutno identična žice. Tako, kada je dovoljno navesti prilikom pisanja SQL «SELECT distinct» Potražnja. Izuzetak je upotreba različitih unutar funkcija agregatne da pogledamo malo kasnije.
Treba imati na umu da je većina podataka i ne prepoznaje vrstu zahtjeva:
SELECT distinct Ostatki.Count, različita Oboi. * IZ oboi INNER JOIN Ostatki NA Oboi.id = Ostatki.id_oboi |
Nije se smatralo argument nekoliko puta ili jednom navedeno, ali prije nego što je drugi, treći ili drugi izabrane kolone. Ćete dobiti greška se odnosi na greške u sintaksi.
Primjena različite upite u standardnom
Očigledno je da se uz odgovarajuću konstrukciju zgrade tablice i da ih punjenje unutar jedne sto isključena situaciji kada postoje apsolutno identična žice. Stoga, izvršenje upit «SELECT distinct *» na uzorku od jednog stola je nepraktično.
Razmislite o situaciji kada moramo znati kakvu vrstu imamo pozadina, samo za udobnost, sortirati po tipu:
SELECT Oboi.type IZ Oboi bi prema vrsti |
I dobiti rezultate:
tip |
papir |
papir |
papir dvoslojna |
papir dvoslojna |
vinil |
vinil |
tkanina |
runo |
runo |
Kao što se vidi u tablici ima duplih redova. Ako se tome doda i prijedlog SELECT distinct:
SELECT distinct Oboi.type IZ Oboi bi prema vrsti |
dobijamo rezultat bez ponavljanja:
tip |
papir |
papir dvoslojna |
vinil |
tkanina |
runo |
Prema tome, ako se pravilno unesete podatke u tablici, a zatim odmah nakon telefonskog poziva ili zahtjev kupaca možemo odgovoriti da tekućina pozadina, fiberglasa i akril pozadina dostupna u prodavnici nisu. S obzirom da je opseg radnji obično nije ograničen na stotinu pozadina, vidite listu nejedinstveni vrste bi bilo radno-intenzivne.
Primjena različitih agregata funkcije unutar
SQL poseban argument se može koristiti sa bilo kojim agregatne funkcije. Ali za Min i Max njegova primjena neće imati efekta, ali pri obračunu iznosa ili prosječne vrijednosti je rijetko situaciju u kojoj niko ne bi uzeti u obzir i ponavljanja.
Pretpostavimo da želite provjeriti kapacitet naših skladišta i pošaljite zahtjev izračunava ukupan broj namotaja na lageru:
SELECT sum (Ostatki.count) IZ Ostatki |
Zahtjev će dati odgovor 143. Ako, međutim, mi ćemo promijeniti u:
SELECT sum (različita Ostatki.count) IZ Ostatki |
dobijamo ukupno 119, kao pozadinu za brojeve dio 3 i 7 su na lageru u istom iznosu. Međutim, očito je da je odgovor pogrešan.
Najčešće se koristi u SQL različitih funkcija Count. Dakle, možemo lako saznati koliko je jedinstvena vrsta tapeta, mi imamo:
SELECT count (različita Oboi.type) IZ oboi |
I dobiti rezultat 5 - običnom papiru i dvoslojne vinil i ne-tkanih materijala. Sigurno svi vidjeli reklame kao što su: "Samo mi imamo preko 20 različitih vrsta tapeta", pod kojom se podrazumijeva da je ova trgovina je ne samo nekoliko desetina peciva i raznih pozadina modernog tipa.
Zanimljivo je da je u istom upita, možete odrediti višestruke funkcije poput grofa pripisuju jasna, i bez njega. To je jedina situacija u kojoj razlikuje u Select'e može biti prisutan nekoliko puta.
Kada napustiti korištenje argumenta
Iz upotrebe SQL različita argumenta treba napustiti u jednom od dva slučaja:
- Vršite izbor stolova i uvjereni u jedinstvenoj vrijednosti svakog. U ovom slučaju, korištenje argumenta je neprikladno, jer je to dodatno opterećenje na server ili klijent (ovisno o vrsti DBMS).
- Da li se plašite gubitka podataka. Neka nam objasniti.
Pretpostavimo da gazda traži od vas na listu pozadinu da imate, uz naznaku samo dvije kolone - vrstu i boje. Iz navike, vam dati argument različita:
SELECT distinct Oboi.type, Oboi.color IZ oboi ORDER BY Oboi.type |
I - izgubiti neke podatke:
tip | boja |
papir | šaren |
papir dvoslojna | bež |
vinil | braon |
vinil | narandža |
tkanina | roze |
runo | bež |
runo | bijel |
To može dati utisak da je papir pozadinu (konvencionalna i dual-layer) smo samo jedan um, u stvari, čak u našem malom stolu dva člana (rezultirati bez različita):
tip | boja |
papir | šaren |
papir | šaren |
papir dvoslojna | bež |
papir dvoslojna | bež |
vinil | braon |
vinil | narandža |
tkanina | roze |
runo | bijel |
runo | bež |
Zbog toga, kao što je u pisanoj formi bilo koji zahtjev argument jasnu potrebu da budu oprezni i nadležan da odlučuje o njegovoj primeni, u zavisnosti od zadatka.
alternativa različita
Za razliku od argument različita - Svi argument. U njegovoj primjeni duplih redova se čuvaju. Ali kao default baze podataka i smatra da je potrebno da biste prikazali sve vrijednosti, argument sve - to je više kvalifikacija od stvarnog argument funkcije.
Similar articles
Trending Now