SQL različen: opis, primeri, lastnosti

Najpogosteje, ko uporabite SQL za vzorčenje informacij iz tabel, uporabnik prejme odvečne podatke, ki so sestavljeni iz popolnoma enakih ponavljajočih se nizov. Za izključitev te situacije je uporabljen ločen argument SQL v stavku Izberi. Ta članek bo obravnaval primere uporabe tega argumenta, pa tudi primere, v katerih je bolje zavrniti uporabo argumenta. Preden začnemo razmišljati o posebnih primerih, bomo v bazi podatkov ustvarili nekaj zahtevanih tabel.

Priprava tabel

Predstavljajmo si, da so v naši bazi podatkov shranjene informacije o ozadju, predstavljene v dveh tabelah. To je tabela Oboi s polji: id (enolični identifikator), tip (vrsta ozadja - papir, vinil itd.), Barva (barva), struct (struktura) in rgis (cena). Tabela Ostatki (ostanki) s polji id_oboi (sklic na edinstveni identifikator tabele Oboi) in štetjem (število zvitkov v skladišču).


Izpolnite tabele s podatki. V tabeli z ozadjem dodajte 9 zapisov:

Oboi



id



tip



barva



struct



cena



1


36)
Papir



Večbarvni



Vtisnjeni



569

)

2



dvojna plast papirja



bež



gladka
)


1148



3



Vinil







Poudarjeno



504



4



) Flizelin



bež







5



papirni dvoslojni papir









1506



6
135)

Papir



Večbarvni



Smooth



954
)


7



vinil



rjava



gladka



372



8



Flizelin



)



Poudarjeno



9801



9



tkanina




Smooth



11665

V tabeli z ostanki - tudi dev

Ostatki



id_oboi



count



1



8



2



12











257) 5



16



6



7


)
7



24



8



32



9



11

Začnimo z opisom naročila uporabljajo v SQL ločeno.

Kraj v stavku Izberi ločeno

Razločen argument je treba postaviti takoj za ključno besedo Izberi poizvedbo. Uporablja se za vse stolpce, ki so podani v ponudbi Izberi, ker izključuje popolnoma enake vrstice iz rezultata poizvedbe. Tako je dovolj, da se pri pisanju poizvedbe SQL enkrat navede "select distinct". Izjema je uporaba ločenih znotraj agregatnih funkcij, ki jih upoštevamomalo kasneje.



Ne smemo pozabiti, da večina DBMS ne pozna vašega obrazca za poizvedbo:

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

Ta argument se obravnava večkrat ali enkrat, vendar pred izbiranjem drugega, tretjega ali drugega stolpca. Prejeli boste napako s sklicevanjem na netočnosti v skladnji.

Uporaba ločenih standardnih poizvedb

Očitno je, da pri kompetentni konstrukciji strukture tabel in njihovega polnjenja znotraj ene tabele pride do situacij, ko se pojavijo popolnoma enake linije. Zato je praktično neprimerno izvesti poizvedbo "Izberi ločeno *" z vzorcem iz ene tabele.
Predstavljajte si situacijo, v kateri moramo ugotoviti, kakšne vrste ozadje imamo, samo za udobje razvrščanja po vrsti:

IZBIRAj Oboi.type OD Oboi vrstnega reda

In dobimo rezultat :





Papir



Papir



Papir dvoslojni
)


Papir dvoslojni



vinil



vinil



Tkanine



Flizelin



Flizelin

Kot lahko vidite, tabela vsebuje ponavljajoče se nizove. Če dodamo stavku, izberite ločeno:

SELECT ločen Oboi.type OD Oboi vrstnega reda po tipu

potem dobimo rezultat brez ponavljanja:

tip



Papir



Papir dvoslojni



Vinil



Tkanine



Flizelin

Takoče kompetentno vnesete podatke v tabelo, potem takoj po pozivu ali zahtevi kupcev, lahko odgovorimo, da v trgovini ni tekočih tapet, steklenih izdelkov in akrilnih tapet. Glede na to, da asortiman v trgovinah običajno ni omejen na sto ozadij, bi bil seznam neenotnih vrst precej težaven.

Uporaba ločenih v agregatnih funkcijah

SQL ločen argument se lahko uporablja z vsako agregatno funkcijo. Toda za Min in Max njegova uporaba ne bo imela nobenega učinka, pri izračunu zneska ali povprečne vrednosti pa si lahko le redko predstavljamo situacijo, v kateri ponovitev ni bilo treba upoštevati. Recimo, da želimo vedeti, kako se zapolni naše skladišče in za to pošljemo zahtevo, ki izračuna skupno število zvitkov v skladišču:

SELECT sum (Ostatki.count) FROM Ostatki

Na vprašanje bo odgovorjeno 143 Če se spremenimo v:

SELECT sum (različen Ostatki.count) IZ Ostatki

, potem bomo dobili samo 119, ker je ozadje po členih 3 in 7 na zalogi v enakem znesku. Vendar je očitno, da je ta odgovor napačen. Pogosto se SQL funkcija uporablja s funkcijo Count. Torej, brez težav, lahko ugotovimo, koliko edinstvenih tipov ozadij sploh imamo:

SELECT count (ločeno Oboi.type) IZ OBOI

In dobili rezultat 5 - navaden papir dvojni sloj, vinil, tkanina in bambus. Verjetno so vsi videli vrsto oglasa: "Samo imamo več kot 20 vrst različnih ozadij!", Kar pomeni, da v tej trgovini ni na ducate zvitkov in ozadja.različne sodobne vrste. Zanimivo je, da lahko v eni poizvedbi določite več funkcij števila z ločenim atributom ali brez njega. To pomeni, da je to edina situacija, ko je v Select'e različna lahko večkrat.

Če ne želite uporabiti argumenta

Iz ločenega stavka SQL, morate zapustiti enega od dveh primerov:
  • Izvedete vzorec tabel in ste prepričani o edinstvenosti vrednosti v vsakem. V tem primeru uporaba argumenta ni izvedljiva, ker je dodatno breme za strežnik ali odjemalca (odvisno od vrste baze podatkov).
  • Bojite se izgubiti potrebne podatke. Pojasnimo.
  • Recimo, da vas šef prosi, da prikažete seznam ozadij, ki jih imate, z navedbo dveh stolpcev - vrste in barve. Po navadi določite argument ločeno:


    IZBIRAJTE ločene Oboi.type, Oboi.color OD OBOI ORDER PO Oboi.type

    In - izgubite del podatkov:

    Tip



    barva



    papir



    večbarvna


    420) Papir dvoslojni



    bež



    vinil



    rjavi

    435)
    Vinil



    oranžna



    tkanina



    roza

    )

    Flizelin



    Bež




    Flizelin



    Bela

    Mo enak vtis, da imamo papirnate tapete (navadne in dvoslojne) samo eno vrsto, čeprav v resnici celo v naši majhni tabeli zanje obstajata dva članka (rezultat brez ločenih):

    tip



    barva



    Papir




    Večbarvni



    Papir



    Večbarvni



    Dvoplastni papir





    Vinil



    rjava



    vinil



    oranžna



    tkanine
    526)

    roza



    flizelin



    bela



    flizelin
    )


    Beech

    Zato mora biti, tako kot pri pisanju katere koli zahteve, poseben argument natančen in kompetenten vprašanja uvaty z njegovo uporabo glede na nalogo.

    Alternativa različna

    Nasprotje različnega argumenta je argument All. Ko se uporabi, se shranijo nizi za ponavljanje. Ker pa privzeti DBMS tudi verjame, da morate prikazati vse vrednosti, potem je argument All precej rafiniran kot pravi funkcionalni argument.
    Upamo, da je zdaj jasno, če uporabljamo različen (SQL). Opis vam je dal popolne informacije o smotrnosti uporabe tega argumenta pri reševanju različnih problemov. Konec koncev, kot se je izkazalo, tudi taka preprosta utemeljitev v svoji aplikaciji prikriva zelo oprijemljivo verjetnost izgube nekaterih podatkov in prikaz netočnih informacij.

    Sorodne publikacije