Computers, Bestandstypen
SQL onderscheiden: beschrijving, voorbeelden eigenschappen
Vaak wanneer u SQL gebruiken om gegevens op te halen uit de tabellen, de gebruiker ontvangt de redundante data is het bestaan van een absoluut identieke dubbele rijen. Om deze situatie te voorkomen, gebruikt u SQL duidelijke argument in de zin Select. Dit artikel geeft voorbeelden van het gebruik van dit argument, maar ook situaties waarin de aanvraag moet worden opgegeven door het argument te bespreken.
Voordat we overgaan tot de specifieke voorbeelden beschouwen, maakt de vereiste een paar tafels database.
voorbereidingslijst
Stel je voor dat we een database slaat informatie over het behang in twee tafels. Deze tabel oboi (wallpaper) met id velden (unieke identificeerder), van het type (type behang -. Papier, vinyl, enz.), Kleur (kleur), een structuur (structuur) en de prijs (prijs). En lijst Ostatki (residuen) met id_oboi velden (een verwijzing naar de unieke identificator in de tabel Oboi) en aantal (het aantal rollen op voorraad).
Vul de gegevens tafel. In de tabel toe te voegen het behang 9 dossiers:
Oboi | ||||
id | type | kleur | struct | prijs |
1 | papier | veelkleurig | reliëf | 56.9 |
2 | Twee lagen papier, | beige | glad | 114,8 |
3 | vinyl | oranje | reliëf | 504 |
4 | vacht | beige | reliëf | 1020,9 |
5 | Twee lagen papier, | beige | glad | 150.6 |
6 | papier | veelkleurig | glad | 95.4 |
7 | vinyl | bruin | glad | 372 |
8 | vacht | wit | reliëf | 980.1 |
9 | doek | roze | glad | 1166,5 |
De tabel met de overblijfselen - en negen dossiers:
Ostatki | |
id_oboi | tellen |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
We gaan naar de beschrijving van de verschillende orde in SQL.
Plaats onderscheiden in de Select-component
duidelijke argument moet onmiddellijk na de Select zoekwoord in de query's worden geplaatst. Hij toegepast op alle in de zin Select columns, omdat het zal worden uitgesloten van de uiteindelijke vraag resultaat is absoluut identiek strings. Zo, een keer is genoeg om aan te geven bij het schrijven van SQL «afzonderlijk selecteren» aanvraag. De uitzondering is het gebruik van verschillende in statistische functies die later kijken naar een beetje.
Men mag niet vergeten dat de meeste van de database en niet uw type verzoek te herkennen:
SELECT verschillende Ostatki.Count onderscheiden Oboi. * FROM Oboi BINNEN SLUIT Ostatki ON Oboi.id = Ostatki.id_oboi |
Er werd niet beschouwd als argument meerdere malen of eenmaal opgegeven, maar voordat de tweede, derde of een andere geselecteerde kolom. U krijgt een foutmelding verwijst naar een fout in de syntaxis te krijgen.
Application verschillende query's in standaard
Het is duidelijk dat met de juiste bouwwerk tafels en binnen een enkele tafel ze te vullen uitgesloten de situatie wanneer er absoluut identiek strings. Daarom is de uitvoering van een query «Selecteer onderscheiden *» met een monster van een tafel is onpraktisch.
Denk aan een situatie waarin we moeten weten wat voor soort we hebben behang, maar voor het gemak, om te sorteren op type:
SELECT Oboi.type FROM Oboi order type |
En krijgen de resultaten:
type |
papier |
papier |
Twee lagen papier, |
Twee lagen papier, |
vinyl |
vinyl |
doek |
vacht |
vacht |
Zoals te zien is in de tabel zijn er dubbele rijen. Als we het voorstel toe te voegen Selecteer onderscheiden:
SELECT afzonderlijke Oboi.type FROM Oboi order type |
krijgen we het resultaat zonder herhaling:
type |
papier |
Twee lagen papier, |
vinyl |
doek |
vacht |
Dus, als de juiste gegevens in te voeren in een tabel, dan direct na een telefoontje of een verzoek van de kopers kunnen we antwoorden dat de vloeistof behang, glasvezel en acryl behang verkrijgbaar in de winkel niet. Gezien het feit dat het aanbod van winkels meestal niet beperkt is tot honderd behang, bekijk de lijst van de niet-unieke types nogal arbeidsintensief zou zijn.
Toepassing afzonderlijke statistische functies binnen
SQL afzonderlijke argument kan worden gebruikt met elke statistische functie. Maar voor de Min en Max zijn toepassing zal geen effect hebben, maar bij de berekening van de som of de gemiddelde waarde is zelden een situatie waar niemand zou moeten rekening houden met de herhalingen.
Stel dat we de capaciteit van ons magazijn te controleren en om dit verzoek te sturen, berekent het totale aantal windingen in voorraad:
SELECT sum (Ostatki.count) FROM Ostatki |
Verzoek zal het antwoord 143. Indien echter, zullen we veranderen te geven:
SELECT sum (afzonderlijke Ostatki.count) FROM Ostatki |
krijgen we de totale 119, als achtergrond voor onderdeelnummers 3 en 7 op voorraad in dezelfde hoeveelheid. Het is echter duidelijk dat het antwoord fout is.
Het meest gebruikt in SQL aparte functie tellen. Dus, kunnen we gemakkelijk te weten komen hoeveel unieke soorten behang, hebben we:
SELECT count (afzonderlijke Oboi.type) FROM Oboi |
En krijg het resultaat van 5 - gewoon papier en double-layer vinyl en niet-geweven stof. Zeker allemaal gezien dat de advertenties zoals: "Alleen hebben we meer dan 20 verschillende soorten behang", waarmee wordt bedoeld dat deze winkel is niet slechts een paar dozijn broodjes en een verscheidenheid van behang moderne types.
Het is interessant dat in dezelfde query, kunt u meerdere taken aan te geven, zoals Count toeschrijven DISTINCT, en zonder. Dat is de enige situatie waarin onderscheiden in Select'e aanwezig meerdere malen kan zijn.
Wanneer het gebruik van het argument te verlaten
Uit het gebruik van SQL onderscheiden argument moet worden achtergelaten in een van de twee gevallen:
- U voert een selectie van tafels en hebben er alle vertrouwen in de unieke waarde van elk. In dit geval is het gebruik van het argument ongeschikt, omdat het een extra belasting van de server of client (afhankelijk van het type DBMS).
- Ben je bang om uw gegevens te verliezen. Laat ons uit te leggen.
Stel dat de baas vraagt u om een lijst van de wallpaper die je hebt, met de aanduiding van slechts twee kolommen - het type en kleur. Uit gewoonte, je een argument duidelijk te geven:
SELECT verschillende Oboi.type, Oboi.color FROM Oboi ORDER BY Oboi.type |
En - verliezen enkele gegevens:
type | kleur |
papier | veelkleurig |
Twee lagen papier, | beige |
vinyl | bruin |
vinyl | oranje |
doek | roze |
vacht | beige |
vacht | wit |
Het kan de indruk wekken dat het papier behang (conventioneel en dual-layer) we hebben slechts een geest, in feite, zelfs in onze kleine tafel van twee artikel (resultaat zonder duidelijke) te geven:
type | kleur |
papier | veelkleurig |
papier | veelkleurig |
Twee lagen papier, | beige |
Twee lagen papier, | beige |
vinyl | bruin |
vinyl | oranje |
doek | roze |
vacht | wit |
vacht | beige |
Daarom, zoals in het schrijven van elk verzoek met het argument duidelijke behoefte aan een zorgvuldige en bevoegd om te beslissen over de toepassing ervan, afhankelijk van de taak te zijn.
alternatief onderscheiden
In tegenstelling tot het argument onderscheiden - All argument. In haar verzoekschrift dubbele rijen zijn opgeslagen. Maar als de standaard database en vindt dat het nodig is om alle waarden, het argument All weer te geven is - het is eerder een qualifier dan de eigenlijke functie argument.
Similar articles
Trending Now