Når du arbejder med relationelle DBMS, i hvilke datagemt i tabelform, står brugerne ofte over for opgaven med at vælge værdier, der er inkluderet (ikke inkluderet) i et bestemt interval. SQL-sproget giver dig mulighed for at specificere et sæt, der (bør ikke) høre til værdien med forskellige indstillinger - operatøren In, operatoren Like, en kombination af betingelser mere - mindre og også SQL mellem operatøren. Beskrivelsen og eksemplerne i denne artikel vil fokusere på sidstnævnte mulighed.
Bogstaveligt talt oversættes operatøren mellem SQL som følger -"mellem". Dens brug giver dig mulighed for at indstille begrænsningen "Fra og til" til et specifikt felt, og hvis den næste værdi falder inden for området, vil predikatet tage værdien "Sand", og værdien vil blive inkluderet i det endelige valg.
Operatørens syntaks er ekstremt enkel:
Vælg * Fra tabel t1 Hvor t1.n mellem 0 og 7 |
Som du kan se, skal du efter nøgleordet mellem angive værdien af den nedre kant af området, derefter OG og værdien for den øvre kant.
Lad os liste, hvilke datatyper SQL-operatøren kan arbejde med:
Dette mellem SQL-operatøren har visse særegenheder. Lad os lære dem at kende:
Når du arbejder med tekst, vil værdien af den øverste grænse for området ikke blive inkluderet i markeringen, hvis det ikke er specificeret så præcist som muligt. I de følgende afsnit overvejer vi denne funktion mere detaljeret.
Lad os udarbejde en tabel med data om ledere, der arbejder i organisationen. Tabellen har følgende struktur:
Feltnavn | Datatype | beskrivelse |
kode | skranke | Unik identifikator for medarbejderen |
Efternavn | Tekst | Medarbejderens efternavn |
Fornavn | Tekst | Ansattes navn |
mellemnavn | Tekst | Medarbejderes patronym |
Paul | Tekst | Medarbejdernes køn (M / F) |
Dato for modtagelse | Dato tid | Ansættelsesdato |
Number_children | Numerisk | Antal børn, en medarbejder har |
Lad os udfylde tabellen med følgende data:
kode | Efternavn | Fornavn | mellemnavn | Paul | Dato for modtagelse | Number_children |
1 | Alexandrova | Irina | Nikolaevna | 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 | Alexandrovich | M | 09.10.2007 | 0 |
6 | Tropnikov | Vasiliy | Sergeevich | M | 12.01.2016 | 3 |
7 | Perler | Nikita | Vasilevich | M | 11.01.2017 | 1 |
8 | Avdeeva | Nika | Konstantinovna | F | 31.03.2001 | 2 |
9 | Yakovlev | Leonid | Nikolaevich | M | 16.02.2009 | 0 |
Lad os sammensætte en sql-forespørgsel imellem, som vil hjælpe os med at vælge alle ansatte med 2 eller 3 børn:
VÆLG ledere. * FRA ledere WHERE Managers. Børnantal mellem 2 og 3 |
Resultatet bliver tre linjer med data om medarbejdere med efternavne Shumilin, Tropnikov og Avdeeva.
Lad os nu vælge de ansatte, der er ansat 1. januar2005 til 31. december 2016. Det skal bemærkes, at forskellige DBMS'er tillader skrivning af datoer til betingelserne på forskellige måder. I de fleste tilfælde tvinges datoen simpelthen til dag-måned-år (eller hvad der er mere praktisk) og skrives i enkelt eller dobbelt citat. I MS Access er datoen indesluttet i et "#" tegn. Lad os køre et eksempel baseret på det:
VÆLG Managers. *, Managers.Reception_Date FRA ledere HVOR ledere. Modtagelsesdato mellem # 1/1/2005 # og # 31/12/2016 # |
Resultatet vil være fem ansatte ansat i den angivne periode inklusive.
Lad os derefter se, hvordan mellem SQL fungerer med strenge.
En meget almindelig opgave, som du skal løsenår du arbejder med navnene på medarbejderne, er det kun nødvendigt at vælge dem, hvis navne begynder med et bestemt bogstav. Lad os prøve, og vi vil opfylde anmodningen og vælge medarbejdere, hvis efternavne begynder med efternavne fra A til B:
VÆLG ledere. * FRA ledere WHERE Managers. Efternavn mellem "A" og "B" BESTIL MED 2 |
Resultatet er som følger:
kode | Efternavn | Fornavn | mellemnavn | Paul | Dato for modtagelse | Number_children |
8 | Avdeeva | Nika | Konstantinovna | F | 31.03.2001 | 2 |
1 | Alexandrova | Irina | Nikolaevna | F | 01.05.2014 | 1 |
2 | Borovoy | Andrew | Stepanovich | M | 21.09.2013 | 0 |
Som du kan se, er to medarbejdere med et efternavn slået tilbogstavet B var ikke med på listen. Hvad er årsagen til dette? Pointen er, hvordan operatøren nøjagtigt sammenligner strenge med ulig længde. Linje "B" er kortere end linjen "Vinogradov" og er polstret med mellemrum. Men når du sorterer alfabetisk, vil mellemrumene være førende tegn, og efternavnet vil ikke blive inkluderet i markeringen. Forskellige DBMS'er tilbyder forskellige løsninger på dette problem, men det er ofte nemmest at specificere følgende bogstav i alfabetet i området for pålidelighed:
VÆLG ledere. * FRA ledere WHERE Managers. Efternavn mellem "A" og "D" BESTIL MED 2 |
Når du udfører denne forespørgsel, vil resultatet helt tilfredsstille os.
En sådan nuance findes kun, når man arbejder med symbolske data, men det viser, at når man arbejder selv med så enkle operatører imellem, skal man være forsigtig.