TRAŽI

SQL različita: opis, primjeri, svojstva

Često kada koristite SQL za dohvaćanjeinformacije iz tablica, korisnik prima suvišne podatke koji se sastoje od prisutnosti apsolutno identičnih duplih redaka. Da biste uklonili tu situaciju, upotrijebite zasebnu SQL argumentaciju u odabiru klauzule. Ovaj će članak raspravljati o primjenama ovog argumenta, kao io situacijama u kojima bi se upotreba argumenata trebala napustiti.

Prije nego što počnemo razmotriti konkretne primjere, izradit ćemo nekoliko potrebnih tablica u bazi podataka.

sql različit

Priprema tablica

Zamislite što je pohranjeno u našoj bazi podatakapozadinske informacije, prikazane u dvije tablice. To su Oboi stol (pozadina) s idovima polja (jedinstveni identifikator), tipa (vrsta tapeta - papir, vinil, itd.), Boja (boja), struktura (struktura) i cijena (cijena). I tablica Ostatki (ostatke) s polja id_oboi (povezati se s jedinstvenim identifikatorom u tablici Oboi) i računati (broj role u zalihama).

Ispunite podatke tablice. Dodajte 9 unosa u tablicu s pozadinom:

Oboi

id

vrsta

boja

struct

cijena

1

papir

šaren

isklesan

56,9

2

Dvostruki sloj papira

bež

glatko

114,8

3

vinil

narančasta

isklesan

504

4

runo

bež

isklesan

1020,9

5

Dvostruki sloj papira

bež

glatko

150,6

6

papir

šaren

glatko

95,4

7

vinil

smeđ

glatko

372

8

runo

bijela

isklesan

980,1

9

tkanina

roze

glatko

1166,5

U tablici se nalaze devet unosa sa stanjima:

Ostatki

id_oboi

računati

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

Nastavljamo do opisa kako koristiti različite u SQL.

Mjesto razlikuje u klauzuli Odaberi

Određeni argument trebao bi biti postavljen odmah poslijeOdaberite ključnu riječ u upitu. Primjenjuje se odmah na sve stupce navedene u klauzuli Odabir jer će isključiti apsolutno identične retke od konačnog rezultata upita. Dakle, dovoljno je navesti "odabir različita" jednom prilikom pisanja SQL upita. Iznimka je uporaba različitih funkcija unutar agregata, što će se smatrati malo kasnije.

sql odaberite različito

Treba imati na umu da većina DBMS-ova ne prepoznaju vaš upit na obrascu:

ODABIRjte različite Ostatki.Count, različite Oboi. *

OD Oboja

INNER JOIN Ostatki NA Oboi.id = Ostatki.id_oboi

Ovdje je argument naveden nekoliko puta, ili je naveden jednom, ali prije drugog, trećeg ili drugog stupca koji se može odabrati. Primit ćete pogrešku s obzirom na netočnosti u sintaksi.

Koristeći različite u standardnim uputama

Očito, s pravilnom strukturomtablice i njihovo punjenje, unutar istog stola, izuzete su situacije u kojima se susreću apsolutno identični redci. Zbog toga je izvršavanje upita "Odaberi razliku *" s odabirom iz jedne tablice praktički nepraktično.

različita u sql

Zamislite situaciju u kojoj trebamo saznati kakvu vrstu pozadine imamo, odmah radi praktičnosti, sortiramo prema vrsti:

SELECT Oboi.type

OD Oboja po vrsti

I dobijemo rezultat:

vrsta

papir

papir

Dvostruki sloj papira

Dvostruki sloj papira

vinil

vinil

tkanina

runo

runo

Kao što vidite, tablica sadrži dvostruke redove. Ako dodamo stavku Odaberi zasebnu klauzulu:

ODABIRjte različite Oboi.type

OD Oboja po vrsti

onda dobijemo rezultat bez ponavljanja:

vrsta

papir

Dvostruki sloj papira

vinil

tkanina

runo

Dakle, ako su podaci ispravno unesenistol, a potom odmah po pozivu ili zahtjevu kupca, moći ćemo odgovoriti da u trgovini nema tekuće pozadine, staklene zidne tapete i akrilne tapete. S obzirom da asortiman u trgovinama obično nije ograničen na stotinu pozadina, bilo bi radije intenzivnije gledati popis ne-jedinstvenih vrsta.

Upotreba različitih funkcija unutar agregata

SQL različit argument može se koristiti s bilo kojimagregatna funkcija. No, za Min i Max, njezina primjena neće imati nikakvog učinka, a pri izračunavanju suma ili prosječne vrijednosti, rijetko je zamisliti situaciju u kojoj ne bi trebalo uzeti u obzir ponavljanja.

Pretpostavimo da želimo znati koliko je naše skladište puna, a za to nam pošaljemo zahtjev koji izračunava ukupan broj rola u zalihi:

SELECT zbroj (Ostatki.count)

OD Ostatki

Zahtjev će se vratiti 143. Ako se promijenimo na:

SELECT zbroj (različit Ostatki.count)

OD Ostatki

onda dobijemo samo 119, jer je pozadina prema člancima 3 i 7 na zalihi u istoj količini. Međutim, očigledno je da taj odgovor nije točan.

Najčešće u SQL, različita se koristi s funkcijom Count. Dakle, bez poteškoća možemo saznati koliko jedinstvenih vrsta pozadina svi imamo:

Broj SELECT (različit Oboi.type)

OD Oboja

I dobiti rezultat 5 - papir normalno idvoslojni, vinil, tkanina i netkane tkanine. Sigurno je svatko vidio takav oglas: "Imamo samo više od 20 vrsta različitih pozadina!", Što znači da u ovoj trgovini ne postoji nekoliko desetaka svitaka, ali pozadine najrazličitijih modernih tipova.

Zanimljivo je da u jednom zahtjevu možete odreditinekoliko Count funkcionira i sa i bez posebnog atributa. To jest, ovo je jedina situacija u kojoj se razlikuje u Select "e svibanj biti prisutna nekoliko puta.

Kada napustiti argument

Upotreba SQL različitog argumenta treba odbaciti u jednom od dva slučaja:

  1. Ti si uzorkovanje iz tablica i uvjeren samjedinstvenost vrijednosti u svakoj. U ovom slučaju, upotreba argumenta je nepraktična, jer je to dodatno opterećenje na poslužitelju ili klijentu (ovisno o vrsti baze podataka).
  2. Bojite se gubitka potrebnih podataka. Objasnit ćemo.

Pretpostavimo da šef od vas traži da prikažete popis pozadina koje imate, što ukazuje na samo dvije stupce - vrstu i boju. Od navike navodite različit argument:

ODABERITE različite Oboi.type, Oboi.color

OD Oboja

NARUDŽBA Oboi.type

I - izgubite neke podatke:

vrsta

boja

papir

šaren

Dvostruki sloj papira

bež

vinil

smeđ

vinil

narančasta

tkanina

roze

runo

bež

runo

bijela

Moglo bi se dojmiti da imamo samo jednu vrstu papirnate tapete (redovne i dvoslojne), iako je čak i naš mali stol dva članka svaki (rezultat nije različit):

vrsta

boja

papir

šaren

papir

šaren

Dvostruki sloj papira

bež

Dvostruki sloj papira

bež

vinil

smeđ

vinil

narančasta

tkanina

roze

runo

bijela

runo

bež

Stoga, kao i kod pisanja bilo kojeg upita, s različitim argumentom, mora se paziti i ispravno riješiti problem s njegovom upotrebom ovisno o zadatku.

Alternativa razlikuje

Suprotno od različitog argumenta argument jeSve. Kada se primjenjuju, zadržavaju se duplicirane linije. No budući da, prema zadanim postavkama, DBMS smatra da bi sve vrijednosti trebale biti prikazane, argument Sve je specifier, a ne pravi funkcionalni argument.

izrazit sql opis
Nadamo se da sada razumijete kadaprimjenjuje se različita (SQL). Opis vam je dao potpune informacije o prikladnosti korištenja ovog argumenta u rješavanju različitih problema. Naposljetku, kao što se ispostavilo, čak i takav jednostavan argument u svojoj prijavi krije prilično opipljivu vjerojatnost gubitka podataka i prikazivanja netočnih informacija.

  • Ocjenjivanje: