Kompjûters, File types
SQL ûnderskate: beskriuwing, foarbylden, eigenskippen
Faak as jo brûk meitsje fan SQL te heljen gegevens út 'e tafels, de brûker krijt de oerstallich gegevens is it bestean fan in absolút identike dûbele rigen. Om foar te kommen dat dizze situaasje, brûk SQL ûnderskieden argumint yn 'e sin selektearje. Dit artikel sil beprate foarbylden fan it brûken fan dit argumint, en ek situaasjes dêr't de tapassing moat wurde ferlitten troch it argumint.
Foardat wy fierder te beskôgje de spesifike foarbylden, meitsje de databank nedich in pear tabellen.
tarieding tafel
Yntinke dat wy hawwe der in databank bewarret ynformaasje oer it behang presintearre yn twa tafels. Dizze tabel oboi (wallpaper) mei id fjilden (unique identifier), fan it type (soarte fan wallpaper -. Papier, vinyl, ensfh), kleur (kleur), in struct (struktuer) en de priis (priis). En tafel Ostatki (resten) mei id_oboi fjilden (in ferwizing nei de unike identifier yn de tabel Oboi) en greve (it tal rollen op foarrie).
Folje de gegevens tafel. Yn de tabel heakjen de wallpaper 9 records:
Oboi | ||||
id | type | kleur | struct | priis |
1 | papier | multicolor | reliëf | 56.9 |
2 | papier double-layered | beige | glêd | 114.8 |
3 | vinyl | Oranje | reliëf | 504 |
4 | fleece | beige | reliëf | 1020,9 |
5 | papier double-layered | beige | glêd | 150,6 |
6 | papier | multicolor | glêd | 95.4 |
7 | vinyl | brown | glêd | 372 |
8 | fleece | white | reliëf | 980,1 |
9 | doek | pink | glêd | 1166,5 |
De tafel mei de oerbliuwsels - en njoggen records:
Ostatki | |
id_oboi | telle |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Wy gean nei de beskriuwing fan 'e distinct folchoarder yn SQL.
Place ûnderskieden yn de Selektearje clause
distinct argumint moatte wurde pleatst fuort nei de Selektearje kaaiwurd yn de queries. Hy tapast nei alle kolommen oantsjutte yn 'e sin selektearje, om't it wurdt útsletten fan de definitive query resultaat is perfoarst gelikense snaren. Sa, ien kear is genôch foar opjaan by it skriuwen SQL «selektearje ûnderskieden» fersyk. De útsûndering is it brûken fan distinct binnen aggregaat funksjes dy't sjen op in bytsje letter.
Dêrby moat betocht wurde dat de measte fan de databank en net werkenne jo type fersyk:
SELECT ûnderskieden Ostatki.Count, ûnderskieden Oboi. * FROM oboi Binnenste JOIN Ostatki ON Oboi.id = Ostatki.id_oboi |
Der waard net sjoen as argumint ferskate kearen of ienris oantsjutte, mar foardat it twadde, tredde of in oar selektearre kolom. Jo krije dan in flater ferwizing nei in flater yn syntaks.
Applikaasje ûnderskieden queries in standert
It leit foar de hân, dat mei in goede gebou struktuer tafels en ynfoljen se binnen ien tafel útsletten de situaasje as der hielendal gelyk snaren. Dêrom, de query útfiering «Selektearje ûnderskieden *» mei in stekproef fan ien tabel is impractical.
Betink in situaasje as wy moatte witte hokker type wy hawwe wallpaper, krekt foar gemak, te sortearjen troch type:
SELECT Oboi.type FROM Oboi folchoarder by type |
En krije de resultaten:
type |
papier |
papier |
papier double-layered |
papier double-layered |
vinyl |
vinyl |
doek |
fleece |
fleece |
As sjoen yn de tabel binne der dûbele rigen. As wy tafoegje it foarstel Selektearje ûnderskieden:
SELECT distinct Oboi.type FROM Oboi folchoarder by type |
Wy krije it resultaat sûnder werhelling:
type |
papier |
papier double-layered |
vinyl |
doek |
fleece |
Sa, as goed fieren gegevens yn in tabel, dan daliks nei in tillefoantsje of fersyk fan keapers kinne wy antwurd dat it floeibere wallpaper, glêstried en Acryl wallpaper beskikber yn 'e winkel net. Jûn dat it oanbod fan winkels wurdt meastal net beheind ta ien hûndert wallpaper, besjen de list fan it net-unike types soe hiel arbeid-yntinsyf.
Tapassing fan distinct aggregate funksjes binnen
SQL distinct argumint kin brûkt wurde mei alle aggregaat funksje. Mar foar de Min en Max syn tapassing sille hawwe gjin effekt, mar doe't it berekkenjen fan de som of de gemiddelde wearde is komselden in situaasje dêr't nimmen soe moatte rekken holden mei de werhellings.
Stel, wy wolle kontrolearje de kapasiteit fan ús magazyn en stjoere dit fersyk, computes it totale oantal Coils op voorraad:
SELECT sum (Ostatki.count) FROM Ostatki |
Fersyk sil jaan it antwurd 143. As, lykwols, wy sille feroarje nei:
SELECT sum (ûnderskieden Ostatki.count) FROM Ostatki |
wy krije de totale 119, as eftergrûn foar part nûmers 3 en 7 binne yn foarrie yn itselde bedrach. It is lykwols dúdlik dat it antwurd is ferkeard.
Meast faak brûkt yn SQL ûnderskieden funksje Count. Sa, wy kinne maklik fine út hoefolle unike soarten behang, wy hawwe:
SELECT count (ûnderskieden Oboi.type) FROM oboi |
En helje it resultaat fan 5 - gewoane papier en dûbel-laach vinyl en non-woven stof. Wiswier allegear sjoen de advertinsjes sa as: "Allinne wy ha mear as 20 ferskillende soarten fan wallpaper", dat wurdt bedoeld dat dy winkel is net allinnich in pear tsientallen rollen en in ferskaat oan wallpaper moderne typen.
It is nijsgjirrich, dat yn deselde query, kinne jo oanjaan meardere funksjes lykas greve attribute DISTINCT, en sûnder it. Dat is it iennichste situaasje dêr't ûnderskieden yn Select'e kin wêze oanwêzich meardere kearen.
Wannear't te ferlitten fan it brûken fan it argumint
Ut it brûken fan SQL distinct argumint moatte wurde ferlitten yn ien of twa gefallen:
- Jo fiere in seleksje fan de tafels en fertrouwe yn de unike wearde elk. Yn dit gefal, it brûken fan it argumint is ûnskiklik, want it is in ekstra lêst fan de tsjinner of kliïnt (ôfhinklik fan it type fan DBMS).
- Binne jim bang te ferliezen jo gegevens. Lit ús útlizze.
Stel dat baas freget jo om list de wallpaper dat jo hawwe, mei de yndikaasje fan mar twa kolommen - it type en kleur. Ut de gewoante, jo jouwe in argumint ûnderskieden:
SELECT ûnderskieden Oboi.type, Oboi.color FROM oboi ORDER BY Oboi.type |
En - ferlieze wat gegevens:
type | kleur |
papier | multicolor |
papier double-layered | beige |
vinyl | brown |
vinyl | Oranje |
doek | pink |
fleece | beige |
fleece | white |
It kin jouwe de yndruk dat de papieren Wallpaper (konvinsjonele en dual-layer) wy hawwe mar ien geast, yn feite, sels yn ús lytse tabel fan twa artikel (resultaat sûnder distinct):
type | kleur |
papier | multicolor |
papier | multicolor |
papier double-layered | beige |
papier double-layered | beige |
vinyl | brown |
vinyl | Oranje |
doek | pink |
fleece | white |
fleece | beige |
Dêrom, sa as yn it skriuwen eltse fersyk mei it argumint ûnderskieden needsaak te wêzen foarsichtich en foech om beslute op syn programma, ôfhinklik fan 'e taak.
alternative ûnderskate
Yn tsjinstelling ta it argumint ûnderskieden - All argumint. Yn syn tapassing dûbele rigen wurde opslein. Mar as de standert databank en fynt dat it needsaaklik is om de werjefte fan alle wearden, it argumint All - it is earder in kwalifikaasjewedstriid as de feitlike funksje argument.
Similar articles
Trending Now