SQL različit: opis, primjeri, svojstva

Najčešće kada se koristi SQL za uzorkovanje informacija iz tablica, korisnik prima redundantne podatke, koji se sastoje od apsolutno identičnih ponavljajućih nizova. Da biste isključili ovu situaciju, koristi se SQL različit argument u izrazu Select. Ovaj će članak raspravljati o primjerima korištenja ovog argumenta, kao io situacijama u kojima je bolje odbiti uporabu argumenta. Prije nego što počnemo razmatrati konkretne primjere, stvorit ćemo u bazi nekoliko potrebnih tablica.

Priprema tablica

Zamislimo da su u našoj bazi podataka pohranjene informacije o pozadini, predstavljene u dvije tablice. To je Oboi tablica s poljima: id (jedinstveni identifikator), tip (vrsta pozadine - papir, vinil, itd.), Boja (boja), struct (struktura) i rgis (cijena). Tablica Ostatki (ostaci) s poljima id_oboi (referenca na jedinstveni identifikator Oboi tablice) i brojem (broj role u skladištu).


Popunite tablice s podacima. U tablici s pozadinom dodajte 9 zapisa:

Oboi



id



tip



boja



struct



cijena



1

36)
Papir



šaren



reljefni



569

)

2



dvoslojni papir



bež



glatki
)


1148



3












Naglašeno



504



4



) Flizelin



bež







5



Papir dvoslojni papir









1506



6
135)

Papir



šaren



glatka



954
)






vinil



smeđa



glatka



372



8



Flizelin



)



naglašeno



9801



9



tkanina




glatko



11665

U tablici s ostacima - također dev '

Ostatki



id_oboi



count



1



8



2



12











257) 5



16



6



7


)
7



24



8



32



9



11

Počnimo s opisom narudžbe razlikovati u SQL-u.

Mjesto u rečenici Odaberite različito

Različiti argument treba postaviti odmah nakon ključne riječi Odaberi upit. Primjenjuje se na sve stupce navedene u Ponudi odabira, jer će izuzeti apsolutno identične linije iz rezultata upita. Dakle, dovoljno je jednom navesti kod pisanja SQL upita "select distinct". Iznimka je upotreba različitog unutar skupnih funkcija koje razmatramomalo kasnije.




Treba zapamtiti da većina DBMS-a ne prepoznaje vaš upit:

SELECT različiti ostatki.Count, različiti Oboi. * OD OBOI INNER JOIN Ostatki ON Oboi .id = Ostatki.id_oboi

Ovaj se argument razmatra nekoliko puta ili se navodi jednom, ali prije nego se odabere drugi, treći ili drugi stupac. Dobit ćete pogrešku u odnosu na netočnosti u sintaksi.

Primjena različitog u standardnim upitima

Očito je da kada kompetentno konstruiramo strukturu tablica i njihovo popunjavanje unutar jedne tablice, događaju se situacije u kojima se pojavljuju apsolutno iste linije. Stoga je praktički neprikladno izvesti upit "Odabir različitog *" s uzorkom iz jedne tablice.
Zamislite situaciju u kojoj trebamo saznati kakvu vrstu pozadine imamo, samo za praktičnost sortiranja prema tipu:

SELECT Oboi.type FROM Oboi poredak po vrsti

I dobili smo rezultat :





Papir



Papir



Papir dvoslojni
)


Papir dvoslojni



vinil



vinil



Tkanine



Flizelin



Flizelin

Kao što možete vidjeti, tablica sadrži nizove koji se ponavljaju. Ako dodamo rečenici, odaberite odvojeno:

ODABERITE različit Oboi.TIP IZ Oboi-a prema tipu

tada dobijemo rezultat bez ponavljanja:

tip



Papir



Papir dvoslojni



Vinil



Tkanine



Flizelin

Takavako kompetentno unesete podatke u tablicu, a zatim odmah nakon poziva ili zahtjeva kupaca, možemo odgovoriti da ne postoje tekuće pozadine, stakleni proizvodi i akrilne tapete u trgovini. S obzirom da asortiman u trgovinama obično nije ograničen na stotinu tapeta, popis ne-jedinstvenih vrsta bio bi prilično naporan.

Primjena različitih agregatnih funkcija

SQL različit argument može se koristiti s bilo kojom agregatnom funkcijom. Ali za Min i Max njegova primjena neće imati nikakvog učinka, a pri izračunu iznosa ili prosječne vrijednosti rijetko se može zamisliti situacija u kojoj nije bilo potrebe za uzimanjem u obzir ponavljanja. Recimo da želimo znati kako je naše skladište popunjeno i za to šaljemo zahtjev koji izračunava ukupan broj rola u skladištu:

SELECT sum (Ostatki.count) FROM Ostatki

Na upit će biti odgovoreno 143 Ako promijenimo u:

SELECT suma (različiti Ostatki.count) iz Ostatki

onda ćemo dobiti samo 119 jer pozadina u člancima 3 i 7 su u zalihama u istom iznosu. Međutim, očito je da je ovaj odgovor netočan. Često se SQL razlikuje s funkcijom Count. Dakle, bez poteškoća, možemo saznati koliko jedinstvenih vrsta pozadina imamo uopće:

SELECT count (različiti Oboi.type) IZ OBOI

I dobiti rezultat 5 - obični papirni sloj, vinil, tkanina i bambus. Vjerojatno je svatko vidio vrstu oglasa: "Samo imamo više od 20 vrsta različitih pozadina!", Što znači da u ovoj trgovini nema desetaka rolni, a pozadinerazne moderne vrste. Zanimljivo je da u jednom upitu možete odrediti nekoliko funkcija Count s različitim atributom ili bez njega. To je, to je jedina situacija kada se razlikuje u Select'e može biti nekoliko puta.

Ako ne želite koristiti argument

Iz SQL različitog izraza, trebali biste napustiti u jednom od dva slučaja:
  • Izvedete uzorak tablica i sigurni ste u jedinstvenost vrijednosti u svakom od njih. U ovom slučaju, uporaba argumenta nije izvediva, jer je dodatni teret na poslužitelju ili klijentu (ovisno o vrsti baze podataka).
  • Bojite se izgubiti potrebne podatke. Objasnimo. Pretpostavimo da vas šef traži da prikažete popis pozadina koje imate, s naznakom dva stupca - vrsta i boja. Prema navici specificirajte argument različit:


    SELECT distinct Oboi.type, Oboi.color IZ OBOI NALOGA Oboi.type

    I - izgubite dio podataka:

    Tip



    boja



    papir



    šaren


    420) Papir dvoslojni



    bež



    vinil



    smeđi

    435)
    Vinil



    narančasta



    tkanine



    ružičasta

    )

    Flizelin



    Bež




    Flizelin



    Bijela

    Mo isti dojam da papirne tapete (obični i dvoslojni) imaju samo jednu vrstu, iako u stvari čak iu našem malom stolu imamo dva članka (rezultat bez jasnog):

    tip

    471)
    boja



    Papir



    Šaren



    Papir



    Šaren



    Papir dvoslojni





    vinil



    smeđa



    vinil



    narančasta



    tkanine
    526)

    Ružičasti



    Flizelin



    Bijeli



    Flizelin
    )


    Beech

    Stoga, kao i kod pisanja bilo kojeg zahtjeva, poseban argument mora biti točan i kompetentan pitanja uvaty s njegova uporaba, ovisno o zadatku.

    Alternativa različita

    Suprotno različitom argumentu je argument All. Kada se primijeni, spremaju se nizovi za ponavljanje. Ali budući da zadani DBMS također vjeruje da morate prikazati sve vrijednosti, onda je argument All zapravo refincer nego stvarni funkcionalni argument.
    Nadamo se da je sada jasno kada se koristi različita (SQL). Opis vam je dao punu informaciju o svrsishodnosti korištenja ovog argumenta u rješavanju različitih problema. Uostalom, kako se ispostavilo, čak i takav jednostavan argument u njegovoj primjeni prikriva vrlo opipljivu vjerojatnost gubitka podataka i prikazivanja netočnih informacija.
  • Povezane publikacije