Bij het werken met relationele DBMS'en waarin gegevensopgeslagen in een tabelvorm, staan gebruikers vaak voor de taak om waarden op te halen die (niet inbegrepen) in een bepaald bereik zijn. Met de SQL-taal kunt u een set specificeren die (mag) niet tot een waarde behoren door verschillende opties - de operator In, de operator Like, een combinatie van min of meer voorwaarden, en ook de instructie SQL Between. De beschrijving en voorbeelden in dit artikel zullen worden gewijd aan de laatste optie.
Дословно оператор between SQL так и переводится – 'Tussen.' Door het gebruik ervan kunt u de beperking "Van en tot" instellen op een specifiek veld, en als de volgende waarde binnen het bereik valt, krijgt het predikaat de waarde "Waar" en valt de waarde in de uiteindelijke selectie.
De syntaxis van de operator is uiterst eenvoudig:
Selecteer * Vanaf tabel t1 Waar t1.n tussen 0 en 7 |
Zoals u kunt zien, moet u na het trefwoord tussen, de waarde van de onderrand van het bereik specificeren, vervolgens EN en de waarde van de bovenrand.
Laten we een lijst maken met welke gegevenstypen de tussen SQL-operator kan werken:
Deze tussen SQL-operator heeft bepaalde eigenaardigheden. Laten we ze leren kennen:
Wanneer u met tekst werkt, wordt de waarde van de bovengrens van het bereik niet in de selectie opgenomen als deze niet zo nauwkeurig mogelijk is gespecificeerd. In de volgende secties zullen we deze functie in meer detail bespreken.
Laten we een tabel voorbereiden met gegevens over managers die in de organisatie werken. De tabel zal de volgende structuur hebben:
Veldnaam | Data type | beschrijving |
code | Teller | Unieke identificatie van de werknemer |
achternaam | Tekst | Achternaam werknemer |
Voornaam | Tekst | Naam werknemer |
Midden-naam | Tekst | Patroniem van de werknemer |
Paul | Tekst | Geslacht werknemer (M / V) |
Datum van ontvangst | Datum Tijd | Datum van aanwerving van werknemer |
Aantal_kinderen | Numeriek | Het aantal kinderen dat een werknemer heeft |
Laten we de tabel invullen met de volgende gegevens:
code | achternaam | Voornaam | Midden-naam | Paul | Datum van ontvangst | Aantal_kinderen |
1 | Alexandrova | Irina | Nikolajevna | F. | 01.05.2014 | 1 |
2 | Borovoy | Andrew | Stepanovich | M | 21.09.2013 | 0 |
3 | Vinogradov | Sergei | Pavlovich | M | 15.06.1998 | 1 |
4 | Shumilin | Alexander | Borisovich | M | 25.12.2004 | 2 |
5 | Vishnyakov | Leonid | Aleksandrovich | M | 09.10.2007 | 0 |
6 | Tropnikov | Basilicum | Sergeevich | M | 12.01.2016 | 3 |
7 | Parels | Nikita | Vasilevich | M | 11.01.2017 | 1 |
8 | Avdeeva | Nika | Konstantinovna | F. | 31.03.2001 | 2 |
9 | Yakovlev | Leonid | Nikolajevitsj | M | 16.02.2009 | 0 |
Laten we een sql-query opstellen tussen, waarmee we alle werknemers met 2 of 3 kinderen kunnen selecteren:
SELECTEER managers. * VAN Managers WAAR Managers.Kindnummer tussen 2 en 3 |
Het resultaat zijn drie regels met gegevens over werknemers met de namen Shumilin, Tropnikov en Avdeeva.
Laten we nu de werknemers selecteren die op 1 januari zijn aangenomen2005 tot 31 december 2016. Opgemerkt moet worden dat verschillende DBMS'en het mogelijk maken om datums op verschillende manieren naar voorwaarden te schrijven. In de meeste gevallen wordt de datum eenvoudigweg geforceerd omgezet in dag-maand-jaar (of wat dan ook geschikter is) en tussen enkele of dubbele aanhalingstekens geschreven. In MS Access staat de datum tussen een "#" -teken. Laten we er een voorbeeld op baseren:
SELECT Managers. *, Managers.Reception_Date VAN Managers WAAR Managers. Ontvangst_datum tussen # 1/1/2005 # en # 31/12/2016 # |
Het resultaat zijn vijf medewerkers die in de genoemde periode zijn aangenomen.
Laten we vervolgens kijken hoe tussen SQL werkt met strings.
Een veel voorkomende taak die je moet oplossenwanneer u met de namen van werknemers werkt, is het noodzakelijk om alleen diegenen te selecteren wiens achternaam met een bepaalde letter begint. Laten we proberen en we zullen aan het verzoek voldoen en medewerkers selecteren wiens achternaam begint met de achternaam van A tot B:
SELECTEER managers. * VAN Managers WAAR Managers. Achternaam tussen "A" en "B" BESTEL DOOR 2 |
Het resultaat is als volgt:
code | achternaam | Voornaam | Midden-naam | Paul | Datum van ontvangst | Aantal_kinderen |
8 | Avdeeva | Nika | Konstantinovna | F. | 31.03.2001 | 2 |
1 | Alexandrova | Irina | Nikolajevna | F. | 01.05.2014 | 1 |
2 | Borovoy | Andrew | Stepanovich | M | 21.09.2013 | 0 |
Zoals u kunt zien, twee medewerkers met een achternaam opde letter B kwam niet voor in de lijst. Wat is hiervan de reden? Het punt is hoe de operator reeksen van ongelijke lengte precies vergelijkt. Regel "B" is korter dan regel "Vinogradov" en is opgevuld met spaties. Maar bij alfabetische sortering zijn de spaties hoofdtekens en wordt de achternaam niet in de selectie opgenomen. Verschillende DBMS'en bieden verschillende oplossingen voor dit probleem, maar het is vaak het gemakkelijkst om de volgende letter van het alfabet in het bereik op te geven voor betrouwbaarheid:
SELECTEER managers. * VAN Managers WAAR Managers. Achternaam tussen "A" en "D" BESTEL DOOR 2 |
Bij het uitvoeren van deze zoekopdracht zal het resultaat ons volledig tevreden stellen.
Zo'n nuance bestaat alleen bij het werken met karaktergegevens, maar het laat zien dat men voorzichtig moet zijn wanneer men zelfs met zulke eenvoudige operatoren als tussen werkt.