Rekenaars, Lêertipes
SQL duidelike: beskrywing, voorbeelde, eienskappe
Dikwels wanneer jy SQL te gebruik om data te haal uit die tafels, die gebruiker ontvang die oortollige data is die bestaan van 'n absoluut identies dubbele rye. Om hierdie situasie te vermy, gebruik SQL duidelike argument in die sin Select. In hierdie artikel sal voorbeelde van die gebruik van hierdie argument, asook situasies waarin die aansoek moet laat vaar word deur die argument te bespreek.
Voordat ons voortgaan om die spesifieke voorbeelde oorweeg, skep die vereiste 'n paar tafels databasis.
voorbereiding tafel
Stel jou voor dat ons 'n databasis winkels inligting oor die agtergrond aangebied in twee tafels. Hierdie tabel oboi (gallery) met id velde (unieke identifikasie), van die tipe (tipe agtergrond -. Papier, vinyl, ens), kleur (kleur), 'n struct (struktuur) en die prys (prys). En tafel Ostatki (oorblyfsels) met id_oboi velde ( 'n verwysing na die unieke identifikasie in die tabel Oboi) en telling (die aantal rolle in voorraad).
Vul die data tafel. In die tafel voeg die agtergrond 9 rekords:
Oboi | ||||
id | tipe | kleur | struct | prys |
1 | papier | kleurige | gebosseleer | 56.9 |
2 | papier dubbel-lae | beige | gladde | 114,8 |
3 | vinyl | Orange | gebosseleer | 504 |
4 | fleece | beige | gebosseleer | 1020,9 |
5 | papier dubbel-lae | beige | gladde | 150,6 |
6 | papier | kleurige | gladde | 95,4 |
7 | vinyl | bruin | gladde | 372 |
8 | fleece | wit | gebosseleer | 980,1 |
9 | doek | pienk | gladde | 1166,5 |
Die tafel met die oorblyfsels - en nege rekords:
Ostatki | |
id_oboi | tel |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Ons gaan na die beskrywing van die verskillende volgorde SQL.
Plaas duidelike in die Gekose klousule
duidelike argument moet onmiddellik na die Gekose navraag in die navrae geplaas word. Hy het aansoek gedoen om al die gespesifiseerde in die sin Select kolomme, want dit sal nie by die finale navraag resultaat is absoluut identies snare. Dus, sodra dit genoeg om te spesifiseer wanneer die skryf van SQL «kies duidelike» versoek. Die uitsondering is die gebruik van verskillende binnekant totaal funksies wat later na 'n bietjie.
Daar moet onthou word dat die meeste van die databasis en nie jou tipe versoek erken:
SELECT DISTINCT Ostatki.Count, duidelike Oboi. * UIT oboi INNER JOIN Ostatki OP Oboi.id = Ostatki.id_oboi |
Daar is nie beskou as 'n argument 'n paar keer of een keer vermeld, maar voor die tweede, derde of 'n ander gekies kolom. Jy sal 'n fout met verwysing na 'n fout in sintaksis kry.
Aansoek duidelike navrae in standaard
Dit is duidelik dat met behoorlike gebou struktuur tafels en binne 'n enkele tafel te vul uitgesluit die situasie wanneer daar absoluut identies snare. Daarom is die vraag uitvoering «Kies afsonderlike *» met 'n monster van 'n tafel is onprakties.
Dink aan 'n situasie wanneer ons nodig het om te weet watter tipe het ons agtergrond, net vir gerief, om te sorteer deur type:
SELECT Oboi.type UIT Oboi orde deur die tipe |
En kry die resultate:
tipe |
papier |
papier |
papier dubbel-lae |
papier dubbel-lae |
vinyl |
vinyl |
doek |
fleece |
fleece |
Soos gesien in die tafel is daar dubbele rye. As ons die voorstel te voeg Kies afsonderlike:
SELECT DISTINCT Oboi.type UIT Oboi orde deur die tipe |
ons kry die resultaat sonder herhaling:
tipe |
papier |
papier dubbel-lae |
vinyl |
doek |
fleece |
Dus, indien dit behoorlik data in te voer in 'n tabel, dan onmiddellik na 'n telefoonoproep of versoek van kopers wat ons kan beantwoord wat die vloeistof plakpapier, veselglas en akriel plakpapier beskikbaar in die winkel is nie. Gegee dat die omvang van die winkels gewoonlik nie beperk tot 'n honderd agtergrond, sien die lys van die nie-unieke tipes nogal arbeidsintensiewe sou wees.
Toepassing van verskillende totaal funksies binne
SQL duidelike argument kan gebruik word met enige totaal funksie. Maar vir die Min en Max sy aansoek sal geen effek hê nie, maar by die berekening van die bedrag of die gemiddelde waarde is selde 'n situasie waar niemand sal moet rekening hou met die herhalings.
Gestel ons wil die kapasiteit van ons pakhuis te gaan en om hierdie versoek te stuur, bere die totale aantal rolle in voorraad:
SELECT som (Ostatki.count) UIT Ostatki |
Versoek sal die antwoord 143. As, egter, sal ons verander om te gee:
SELECT som (afsonderlike Ostatki.count) UIT Ostatki |
ons kry die totale 119, as agtergrond vir 'n gedeelte nommers 3 en 7 is in voorraad in die dieselfde hoeveelheid. Dit is egter duidelik dat die antwoord is verkeerd.
Die meeste gebruik word in SQL duidelike funksie Telling. So, ons kan maklik uit te vind hoeveel unieke soorte agtergrond, het ons:
SELECT telling (afsonderlike Oboi.type) UIT oboi |
En kry die resultaat van 5 - gewone papier en dubbel-laag vinyl en nie-geweefde stof. Sekerlik al gesien die advertensies soos: "Slegs ons het meer as 20 verskillende soorte agtergrond," deur wat beteken dat hierdie winkel is nie net 'n paar dosyn rolletjies en 'n verskeidenheid van plakpapier moderne tipes.
Dit is interessant dat in dieselfde navraag, kan jy verskeie funksies spesifiseer soos Telling skryf DISTINCT, en sonder dit. Dit is die enigste situasie waar verskillende in Select'e teenwoordig 'n paar keer kan wees.
Wanneer die gebruik van die argument te laat vaar
Uit die gebruik van SQL duidelike argument moet laat vaar word in een van twee gevalle:
- Jy voer 'n seleksie van tafels en is vol vertroue in die unieke waarde elk. In hierdie geval, die gebruik van die argument is onvanpas, want dit is 'n bykomende las op die bediener of kliënt (afhangende van die tipe van DBMS).
- Is jy bang vir jou data verloor. Kom ons verduidelik.
Dink baas vra jou om 'n lys van die agtergrond wat jy het, met die aanduiding van slegs twee kolomme - die tipe en kleur. Uit gewoonte, jy 'n argument duidelike gee:
SELECT DISTINCT Oboi.type, Oboi.color UIT oboi ORDER BY Oboi.type |
En - verloor sommige data:
tipe | kleur |
papier | kleurige |
papier dubbel-lae | beige |
vinyl | bruin |
vinyl | Orange |
doek | pienk |
fleece | beige |
fleece | wit |
Dit kan die indruk skep dat die papier agtergrond (konvensionele en 'n dubbele laag) ons het net een gedagte, in werklikheid, selfs in ons klein tafel van twee artikel (lei sonder duidelike) gee:
tipe | kleur |
papier | kleurige |
papier | kleurige |
papier dubbel-lae | beige |
papier dubbel-lae | beige |
vinyl | bruin |
vinyl | Orange |
doek | pienk |
fleece | wit |
fleece | beige |
Daarom, as in die skryf van 'n versoek met die argument duidelike behoefte versigtig en bevoeg is om te besluit oor die toepassing daarvan, na gelang van die taak te wees.
alternatiewe duidelike
In teenstelling met die argument duidelike - Alle argument. In sy aansoek dubbele rye gestoor. Maar as die verstek databasis en bevind dat dit nodig is om al die waardes, die argument Alle vertoon is - dit is eerder 'n kwalifiseerder as die werklike funksie argument.
Similar articles
Trending Now