Računalniki, Vrste datotek
SQL prepoznavna: opis, primeri, lastnosti
Pogosto, ko uporabljate SQL za pridobivanje podatkov iz tabel, uporabnik prejme odveč podatki o obstoju povsem identičnih podvojenih vrstic. Da bi se izognili tej situaciji, uporabite SQL poseben argument v stavku Izberi. Ta članek bodo razpravljali primeri uporabe tega argumenta, kot tudi primere, v katerih je treba zahtevek zapuščene trditev.
Preden bomo nadaljevali preučiti konkretne primere, ustvariti bazo podatkov potreboval nekaj tabel.
priprava miza
Predstavljajte si, da imamo zbirki podatkov o ozadje, predstavljeno v dveh tabelah je. Ta tabela OBOI (ozadje) z id polja (edinstvena oznaka), po vrsti (vrsti ozadje -. Papir, vinil, itd), barva (barve), ki je struct (struktura) in cena (cena). In miza Ostatki (ostanki) z id_oboi področjih (sklic na enolično identifikacijsko oznako v tabeli OBOI) in število (število valjev na zalogi).
Izpolnite tabelo podatkov. V tabeli dodati ozadje 9 evidence:
OBOI | ||||
id | tip | barva | struct | cena |
1 | papir | multicolor | reliefna | 56,9 |
2 | papir dvoslojna | bež | gladka | 114,8 |
3 | vinil | Oranžna | reliefna | 504 |
4 | Fleece | bež | reliefna | 1020,9 |
5 | papir dvoslojna | bež | gladka | 150,6 |
6 | papir | multicolor | gladka | 95.4 |
7 | vinil | rjava | gladka | 372 |
8. | Fleece | bela | reliefna | 980,1 |
9. | krpo | roza | gladka | 1166,5 |
V tabeli z ostanki - in devet evidenc:
Ostatki | |
id_oboi | računati |
1 | 8. |
2 | 12 |
3 | 24 |
4 | 9. |
5 | 16 |
6 | 7 |
7 | 24 |
8. | 32 |
9. | 11 |
Nadaljujemo z opisom izrazito da v SQL.
Postavite razlikuje v SELECT
razlikuje argument je treba dati takoj po Izberite ključno besedo na poizvedbe. On uporablja za vse stolpce, določenih v stavku Izberite, ker bo izključen iz končnega rezultata poizvedbe je popolnoma identični strune. Torej, ko je dovolj, da določite pri pisanju SQL "izberite poseben» zahtevo. Izjema je uporaba različnih znotraj sestavljenih funkcij, ki so videti na malo kasneje.
Ne smemo pozabiti, da je večina baze podatkov in ne prepozna vrsto zahteve:
SELECT izrazito Ostatki.Count, ki se razlikuje OBOI. * IZ OBOI INNER JOIN Ostatki NA Oboi.id = Ostatki.id_oboi |
Tam ni zdelo večkrat argument ali enkrat določena, vendar pred drugega, tretjega ali drugega izbranega stolpca. Boste dobili napako, ki se nanaša na napake v skladnji.
Uporaba različnih poizvedb v standardni
Očitno je, da z ustrezno strukturo tabel, stavb in njihovo polnjenje v eni tabeli izključena situacijo, ko so popolnoma enake strune. Zato je izvedba izraz "Izberite poseben *» z vzorcem ene tabele je nepraktično.
Pomislite na situacijo, ko moramo vedeti, kakšne vrste imamo ozadje, samo za udobje, razvrstiti po vrsti:
SELECT Oboi.type IZ OBOI, da po vrsti |
In dobili rezultate:
tip |
papir |
papir |
papir dvoslojna |
papir dvoslojna |
vinil |
vinil |
krpo |
Fleece |
Fleece |
Kot je razvidno iz tabele so podvojene vrstice. Če k temu dodamo še predlog Izberite razlikuje:
IZBERITE poseben Oboi.type IZ OBOI, da po vrsti |
smo dobili rezultat brez ponavljanja:
tip |
papir |
papir dvoslojna |
vinil |
krpo |
Fleece |
Torej, če pravilno vnesti podatke v tabeli, nato pa takoj po telefonskem klicu ali zahtevo kupcev bomo lahko odgovorili, da se tekočina ozadje, steklena vlakna in akril ozadje na voljo v trgovini, niso. Glede na to, da se je obseg trgovine navadno ni omejena na sto ozadje, pogled na seznam, ki niso edinstvene vrste bi bilo zelo delovno intenzivna.
Uporaba različnih agregatnih funkcij znotraj
SQL razlikuje argument se lahko uporablja s katerim koli agregatno funkcijo. Ampak za Min in Max tožbi ne bo imelo učinka, vendar pri izračunu vsoto ali povprečno vrednost je redko stanje, v katerem bi bilo nikogar, ki bi upoštevala ponovitev.
Recimo, da želimo preveriti zmogljivost našega skladišča in poslati to zahtevo, izračuna skupno število tuljav na zalogi:
SELECT vsota (Ostatki.count) IZ Ostatki |
Zahteva bo Odgovor 143. Če pa bomo spremeniti, da:
SELECT vsota (prepoznavna Ostatki.count) IZ Ostatki |
dobimo skupno 119, kot ozadje za del številk 3 in 7 so na zalogi v enakem znesku. Vendar pa je očitno, da je odgovor napačen.
Najpogosteje se uporablja v SQL različni funkciji grofa. Torej, bomo z lahkoto ugotovili, kako veliko različnih vrst ozadje, nam še:
SELECT count (ločena Oboi.type) IZ OBOI |
In dobili rezultat 5 - običajni papir in dvoplastni vinil in netkane tkanine. Zagotovo vsi videli oglase, kot so: "Samo imamo več kot 20 različnih vrst ozadje", s katerim je pomenilo, da je ta trgovina ni samo par ducat rol in različne ozadje sodobnih vrst.
Zanimivo je, da v istem poizvedbo, lahko podate več funkcij kot Štetje pripisujejo DISTINCT, in brez nje. To je edini primer, v katerem se lahko razlikuje v Select'e biti prisotni večkrat.
Ko opustiti uporabo argumenta
Z uporabo SQL izrazito trditev bi bilo treba opustiti v enem od dveh primerov:
- Izvedete izbor tabel in so prepričani v edinstveno vrednost vsakega. V tem primeru je uporaba argumenta je neprimerna, ker je to dodatna obremenitev za strežnik ali odjemalec (odvisno od vrste DBMS).
- Se bojite izgube podatkov. Naj nam pojasni.
Recimo šef zahteva, da seznam ozadje, ki ga imajo, z navedbo le dveh stebrov - vrsto in barvo. Iz navade, daš argument poseben:
SELECT poseben Oboi.type, Oboi.color IZ OBOI ORDER BY Oboi.type |
In - izgubili nekaj podatkov:
tip | barva |
papir | multicolor |
papir dvoslojna | bež |
vinil | rjava |
vinil | Oranžna |
krpo | roza |
Fleece | bež |
Fleece | bela |
To lahko daje vtis, da je papir ozadje (konvencionalno in dvoslojni) smo le en um, v resnici, tudi v naši majhni mizi dva člena (posledica ne razlikuje):
tip | barva |
papir | multicolor |
papir | multicolor |
papir dvoslojna | bež |
papir dvoslojna | bež |
vinil | rjava |
vinil | Oranžna |
krpo | roza |
Fleece | bela |
Fleece | bež |
Zato, kot je v pisni obliki vsak zahtevek z argumentom izrazito treba biti previden in je pristojen za odločanje o tožbi, glede na nalogo.
alternativa razlikuje
V nasprotju s trditvijo izrazito - All argument. V tožbi so podvojene vrstice shranjeni. Ampak kot privzeti bazi podatkov in ugotovi, da je treba za prikaz vseh vrednosti, argument vse - to je precej kvalifikacijski od dejanske funkcije argumenta.
Similar articles
Trending Now