SQL različen: opis, primeri, lastnosti
Pogosto pri uporabi SQL za pridobivanje informacij iz tabel uporabnik prejema odvečne podatke, ki so sestavljeni iz popolnoma identičnih podvojenih vrstic. Če želite izključiti to stanje, uporabite ločen argument SQL v klavzuli Select. V tem članku bomo preučili primere uporabe tega argumenta in primerov, v katerih je bolje opustiti argument.
Vsebina
Preden začnemo razmišljati o konkretnih primerih, bomo v bazo podatkov ustvarili nekaj potrebnih tabel.
Priprava miz
Predstavljajte si, da imamo v bazi podatkov shranjene informacije o ozadju, predstavljene v dveh tabelah. To je tabela Oboi (ozadje) s poljem id (posebni identifikator), vrsto (vrsta ozadja - papir, vinil itd.), Barvo, strukturo in ceno. In tabelo Ostatki (ostanki) s polji id_oboi (sklicevanje na edinstveni identifikator v tabeli Oboi) in štetje (število zvitkov v skladišču).
Izpolnite tabele s podatki. V tabeli z ozadjem dodajte 9 vnosov:
Oboi | ||||
id | tip | barva | struct | cena |
1 | Papir | Večbarvna | Embossed | 56.9 |
2 | Dvoslojni papir | Bež | Gladko | 114.8 |
3 | Vinil | Oranžna | Embossed | 504 |
4 | Netkane fleece rokavice | Bež | Embossed | 1020.9 |
5 | Dvoslojni papir | Bež | Gladko | 150.6 |
6 | Papir | Večbarvna | Gladko | 95.4 |
7 | Vinil | Rjava | Gladko | 372 |
8. mesto | Netkane fleece rokavice | Bela | Embossed | 980.1 |
9 | Fabric | Pink | Gladko | 1166.5 |
V tabeli z ostanki je tudi devet zapisov:
Ostatki | |
id_oboi | šteje |
1 | 8. mesto |
2 | 12. mesto |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8. mesto | 32 |
9 | 11 |
Začnimo z opisom uporabe ločenega v SQL-ju.
Postavite se ločeno v klavzulo Izberi
Poseben argument je treba postaviti takoj po ključni besedi Izbira v poizvedbah. Uporabi se takoj za vse stolpce, ki so opredeljeni v klavzuli Select, ker izključi popolnoma identične vrstice iz rezultata poizvedbe. Tako je pri pisanju poizvedbe SQL dovolj, da se pri pisanju poizvedbe SQL navede »izberite ločeno«. Edina izjema je uporaba razločnih znotraj skupnih funkcij, ki jih bomo obravnavali malo kasneje.
Upoštevati je treba, da večina DBMS ne prepozna vašega zahtevka, kot je ta:
SELECT ločen Ostatki.Count, različni Oboi. * IZ Oboja INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi |
Tukaj je argument določen večkrat ali določen enkrat, vendar pred drugim, tretjim ali drugim izbirnim stolpcem. Prišlo je do napake pri sklicevanju na netočnosti v sintaksi.
Uporaba ločenih standardnih poizvedb
Očitno je, da se pri pravilni konstrukciji strukture tabel in njihovega polnjenja v posameznih situacijah tabele izključijo, ko se pojavijo popolnoma identični nizi. Zato je izvedba poizvedbe »Izberite ločeno *« z izbiro iz ene tabele praktično nepraktična.
Predstavljajte si situacijo, v kateri moramo ugotoviti, kakšne vrste ozadij imamo, samo za udobje, razvrstite po vrsti:
SELECT Oboi.type IZ Oboi vrstnega reda |
Dobimo rezultat:
tip |
Papir |
Papir |
Dvoslojni papir |
Dvoslojni papir |
Vinil |
Vinil |
Fabric |
Netkane fleece rokavice |
Netkane fleece rokavice |
Kot vidite, v tabeli so podvojene vrstice. Če dodamo stavku Select distinct:
SELECT razločno Oboi.type IZ Oboi vrstnega reda |
potem dobimo rezultat brez ponavljanja:
tip |
Papir |
Dvoslojni papir |
Vinil |
Fabric |
Netkane fleece rokavice |
Tako, če so bili podatki pravilno vneseni v tabelah, nato pa takoj po pozivu ali zahtevi kupcev bomo lahko odgovorili, da v trgovini niso na voljo tekoče ozadje, steklene stene in akrilne ozadje. Glede na to, da je izbor v trgovinah ponavadi omejen na sto ozadij, bi bilo precej delovno intenzivno, da bi skenirali seznam ne edinstvenih vrst.
Uporaba ločenih znotraj skupnih funkcij
SQL se lahko uporablja z vsemi agregatnimi funkcijami. Toda za Min in Max njegova uporaba ne bo vplivala in pri izračunu vsote ali povprečne vrednosti je redko mogoče predstavljati situacijo, v kateri ni treba upoštevati ponovitev.
Recimo, želimo vedeti, koliko je naše skladišče polno, zato smo poslali zahtevo, ki izračuna skupno število zvitkov v skladišču:
SELECT vsota (Ostatki.count) FROM Ostatki |
Poizvedba bo vrnila odgovor 143. Če se spremenimo v:
Izberi vsoto (razločen Ostatki.count) FROM Ostatki |
potem dobimo le 119, saj so ozadje iz 3. in 7. člena na zalogi v isti količini. Vendar je očitno, da je ta odgovor napačen.
Najpogosteje se SQL uporablja s funkcijo Count. Torej, brez težav lahko ugotovimo, koliko enotnih vrst ozadij imamo na splošno:
Izberi število (različna Oboi.type) IZ Oboja |
In dobili rezultat 5 - papir navaden in dvoslojni, vinil, tkanine in netkanih. Gotovo vsi so videli oglas, kot je: "Samo imamo več kot 20 vrst različnih ozadij!", Kar pomeni, da v tej trgovini ni več ducat zvitkov vsega, ampak ozadje najbolj raznolikih sodobnih tipov.
Zanimivo je, da lahko v eni zahtevi določite več funkcij Count z ali brez posebnega atributa. To pomeni, da je to edina situacija, v kateri je lahko večkrat prisoten izraz Select.
Kdaj naj zavrnem uporabo argumenta?
Uporaba ločenega argumenta SQL je treba zavreči na enega od dveh načinov:
- Izbirate med tabelami in ste prepričani v edinstvenost vrednosti v vsakem. V tem primeru je uporaba argumenta neustrezna, ker je to dodatna obremenitev strežnika ali odjemalca (odvisno od vrste DBMS-ja).
- Bojiš se izgubiti potrebne podatke. Razložili bomo.
Predpostavimo, da vas šef zahteva, da prikažete seznam ozadij, ki jih imate, kar označuje samo dva stolpca - vrsto in barvo. S navado določite argument, ki je ločen:
SELECT razločno Oboi.type, Oboi.color IZ Oboja ORDER BY Oboi.type |
In - izgubite nekaj podatkov:
tip | barva |
Papir | Večbarvna |
Dvoslojni papir | Bež |
Vinil | Rjava |
Vinil | Oranžna |
Fabric | Pink |
Netkane fleece rokavice | Bež |
Netkane fleece rokavice | Bela |
Morda se zdi, da imamo samo eno vrsto papirnatih ozadij (konvencionalnih in dvoplastnih), čeprav v resnici tudi v naši mizi imajo dva člena (rezultat brez jasnega):
tip | barva |
Papir | Večbarvna |
Papir | Večbarvna |
Dvoslojni papir | Bež |
Dvoslojni papir | Bež |
Vinil | Rjava |
Vinil | Oranžna |
Fabric | Pink |
Netkane fleece rokavice | Bela |
Netkane fleece rokavice | Bež |
Zato, kot pri pisanju kakršne koli poizvedbe, z ločenim argumentom moramo biti previdni in pravilno rešiti problem s svojo aplikacijo, odvisno od naloge v roki.
Alternativno ločeno
Nasprotno od ločenega argumenta je argument All. Ko jo uporabljate, se kopirajo podvojene vrstice. Ker pa DBMS po privzetku meni, da je treba natisniti vse vrednosti, je argument All bolj specifični kot pravi funkcijski argument. Upamo, da boste zdaj razumeli, kdaj se uporablja poseben (SQL). Opis je podaril popolne informacije o priporočljivosti uporabe tega argumenta pri reševanju različnih težav. Konec koncev, kot se je izkazalo, tudi tak preprost argument v svoji vlogi skriva zelo očitno verjetnost izgube nekaterih podatkov in sklepanje netočnih informacij.
- Baza podatkov je kompleksen sistem
- Normalizacija baz podatkov
- Izjava Select (SQL)
- Coalesce sql: opis, uporaba, primeri
- Kako združiti dve tabeli v "Wordu" vodoravno ali navpično
- Kako sestaviti poizvedbe SQL - podrobni primeri
- Kako narediti tabelo HTML. Tabela barv
- Podatkovne baze so relacijske. Koncept relacijske baze podatkov
- Delo z bazo podatkov: kakšne so zahteve za
- Kaj je identifikator in kje se uporablja?
- DB je ... Vrste in lastnosti baze podatkov
- SQL Kje: metode in primere uporabe
- MySQL JOIN: opis, primer uporabe ukaza in priporočil
- Izjava SQL INNER JOIN: primeri, sintaksa in funkcije
- Funkcija ustvarjanja tabele v SQL - Ustvari tabelo
- Postopno ustvarjanje tabele SQL po korakih
- Kaj je poizvedba SQL?
- Izbriši stavko Izbriši MySQL
- Brisanje podvojenih kopij MySQL
- V poizvedbi MySQL izberite enolične zapise: izberite ločeno
- Podrobnosti o povezovanju tabel za dostop