DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu

Każde zapytanie utworzone do pracy w bazie danych upraszcza dostęp do niezbędnych informacji. W poprzednim poście mówiłem o ogólnych instrukcjach warunkowych. W tym samym poście opowiem o operatorach, które pozwolą Ci tworzyć zapytania, które mogą dostarczyć bardziej szczegółowych informacji, które Cię interesują, a które jednocześnie nie są tak łatwe do znalezienia za pomocą zapytań z operatorami AND, OR.
Jednym z operatorów specjalnych jest W. Ten operator pozwala ustawić wymagany zakres wyświetlania żądanych informacji. Wróćmy do danych o dogmenach

Dłużnicy

Num Miesiąc Rok Sname Miasto Adres Dług
0001 lipiec2012 IwanowStawropolStavropolskaya 150000
0002 grudzień2019 KononovTatarZagorodnaya 254684068
0003 Może2013 YamshinMichajłowskWiejski, 48165840
0004 sierpień2012 PrzepraszamStawropolCentralnaya, 1646580
... ... ... ... ... ... ...
9564 Marsz2015 UliyevaDeminoMiędzynarodowy, 156435089
9565 październik2012 PavlovaStawropolVokzalnaya 3768059
9566 styczeń2012 UryupaMichajłowskFontannaya, 1951238
9567 listopad2017 ValletovTatarWyjście, 65789654

Załóżmy, że chcesz wybrać wszystkich dłużników miasta Stawropol lub Tatarka. Analogicznie do poprzedniego postu należałoby skorzystać z zapytania
WYBIERZ *
OD Dłużników
WHERE City \u003d „Stawropol”
OR Miasto \u003d "Tatarka";

Przede wszystkim kod jest uciążliwy. Używając specjalnych operatorów, możesz uzyskać bardziej zwarty kod.
WYBIERZ *
OD Dłużników
GDZIE JEST MIASTO („Stawropol”, „Tatarka”);

Wynik będzie

Prześledźmy logikę programu. Ze słowami kluczowymi SELECT, FROM i WHERE. Następnie pojawia się operator IN. Daje programowi sekwencję działań - należy przejrzeć informacje z bazy danych zawarte w kolumnie „Miasto”. A do wyświetlenia należy wybrać dane „Stawropol” i „Tatarka”.
Rozważę przykład, w którym trzeba dokonać selekcji określonych kwot długu.
WYBIERZ *
OD Dłużników
WHERE Debt IN (435089, 789654, 684068);

Wynik będzie następujący

Te. operator IN skanuje całą bazę danych pod kątem określonych parametrów wyboru informacji.
Sytuacja wygląda inaczej w przypadku użycia innego specjalnego operatora POMIĘDZY... Jeśli operator W rozważała informację zawierającą tylko określone parametry, a następnie operator POMIĘDZY - między określonymi zakresami. Nie należy jednak szukać analogii między tłumaczeniem tego operatora z języka angielskiego a jego rzeczywistym przeznaczeniem. Jeśli określisz MIĘDZY 1 ORAZ 5, nie oznacza to, że prawdziwe będą liczby 2, 3 i 4. To stwierdzenie jest po prostu postrzegane przez SQL jako pewna wartość, którą można znaleźć wśród innych wartości. Na przykład będzie wyglądać tak.
WYBIERZ *
OD Dłużników
GDZIE DŁUGI OD 30 000 DO 100 000;

Wynik będzie

Oznacza to, że SQL zaakceptował instrukcję POMIĘDZY jako dowolna wartość od 30 000 do 100 000 w kolumnie „Dług”.
Oprócz określania przybliżonych zakresów liczbowych można określić zakresy alfabetyczne, w których będą wyświetlane informacje zawierające pierwsze litery określonego zakresu. Ale jest jeden interesujący punkt. Utwórzmy następujące zapytanie
WYBIERZ *
OD Dłużników
GDZIE Sname MIĘDZY AND AND AND P;

Następnie zostaną wyświetlone następujące dane

Logiczne pytanie: „Dlaczego dłużnicy wypadli z listy z nazwiskiem P.reni i P.avlova? W końcu pierwsze litery ich nazwisk znajdują się w określonym zakresie! "Litery są uwzględnione, ale nazwiska nie. Wynika to z faktu, że język SQL w tego rodzaju zapytaniach akceptuje tylko długość wyszukiwanych ciągów znaków, które są określone. Innymi słowy, długość łańcucha" P " w zapytaniu jest jeden znak, a długość ciągów znaków „Pregny” i „Pavlova” w bazie danych wynosi odpowiednio pięć i siedem. Ale nazwisko ” Iwanov ”należy do zakresu, ponieważ zakres zaczyna się od Ina początku długość od jednego znaku.

W tym artykule przyjrzymy się operator logiczny T-SQL BETWEENDowiesz się, czym jest ten operator i jak go używać. A także oczywiście przeanalizujemy przykłady języka SQL zapytania przy użyciu operatora BETWEEN.

Operator T-SQL BETWEEN

POMIĘDZY Jest operatorem logicznym T-SQL, który definiuje zakres do testowania. Innymi słowy, za pomocą BETWEEN możemy sprawdzić, czy wartość mieści się w określonym zakresie.

Składnia

test_expression [NIE POMIĘDZY begin_expression I end_expression

Opis argumentów

  • test_expression - wyrażenie, które ma zostać przetestowane pod kątem przynależności do zakresu od begin_expression do end_expression;
  • begin_expression - wyrażenie charakteryzujące początek zakresu;
  • end_expression to wyrażenie charakteryzujące koniec zakresu.

Wszystkie wyrażenia muszą mieć ten sam typ danych.

Operator BETWEEN zwraca wartości (Boolean) jako wynik:

  • TRUE, jeśli wartość argumentu test_expression jest większa lub równa wartości argumentu begin_expression, podczas gdy mniejsza lub równa wartości end_expression, tj. zakres test_expression od begin_expression do end_expression;
  • FALSE, jeśli test_expression jest poza zakresem od begin_expression do end_expression.

Przez słowo kluczowe NIE możemy odwrócić wynik predykatu, innymi słowy NOT BETWEEN oznacza, że \u200b\u200bchcemy sprawdzić wartość, aby zobaczyć, czy mieści się w podanym zakresie.

W tym przypadku NOT BETWEEN zwróci wartość TRUE, jeśli test_expression jest poza zakresem od begin_expression do end_expression.

Jeśli przynajmniej jedno z wyrażeń w BETWEEN zawiera wartość NULL, wynik będzie niezdefiniowany.

Notatka! Przypomnę, że zawsze należy pamiętać, że istnieją wartości takie jak NULL (to nie jest puste i nie 0, to jest brak wartości), które są przetwarzane przez serwer SQL w specjalny sposób, wynik zapytania SQL z wartościami NULL może nie być oczywisty i nieprzewidywalny.

Notatka! Jeśli jesteś początkującym programistą i chcesz nauczyć się języka T-SQL od podstaw, to polecam przeczytanie mojej książki „Droga programisty T-SQL”, w której szczegółowo omawiam podstawy języka T-SQL, a także przywiązuję dużą wagę do zaawansowanych konstrukcji.

Wstępne dane do przykładów

Mój serwer to Microsoft SQL Server 2016 Express. Na przykład wyobraźmy sobie, że mamy TestTable i zawiera ona następujące dane ( lista towarów ze wskazaniem ceny). Dodaję wiersze do tabeli za pomocą instrukcji INSERT INTO.

Utwórz tabelę CREATE TABLE TestTable (IDENTITY (1,1) NOT NULL, (100) NOT NULL, NULL) GO - Dodawanie wierszy do tabeli INSERT INTO TestTable (ProductName, Price) VALUES (" Jednostka systemowa", 300), (" Monitor ", 200), (" Klawiatura ", 100), (" Mysz ", 50), (" Drukarka ", 200), (" Skaner ", 150), (" Telefon ", 250), ("Tablet", 300) GO - Wybierz dane SELECT * FROM TestTable

Przykład użycia operatora BETWEEN w klauzuli WHERE

Napiszmy zapytanie SQL, które wyświetli wszystkie produkty, których cena zawiera się w przedziale od 100 do 200 rubli włącznie.

Warunek z instrukcją BETWEEN WYBIERZ ProductID, ProductName, Price FROM TestTable WHERE Price BETWEEN 100 AND 200

Moglibyśmy napisać to zapytanie bez użycia operatora BETWEEN, na przykład następujące zapytanie SQL jest absolutnie równoważne.

Warunek przy użyciu operatorów porównania WYBIERZ ProductID, ProductName, Price FROM TestTable WHERE Price\u003e \u003d 100 AND Price<= 200

Jak widać wynik jest taki sam, ale w przypadku BETWEEN warunek wygląda na jaśniejszy i bardziej zrozumiały, poza tym wyrażenie sprawdzające (Price) pisaliśmy tylko raz, w przypadku operatorów porównania dwa.

Przykład użycia operatora BETWEEN w warunku IF

Operator BETWEEN może być używany nie tylko w klauzuli WHERE, ale także w innych konstrukcjach T-SQL, na przykład w konstrukcji warunkowej IF. W poniższym przykładzie sprawdzimy zmienną @TestVar, aby zobaczyć, czy wartość tej zmiennej mieści się w zakresie od 1 do 10, a jeśli tak, wykonamy potrzebną nam akcję, na przykład po prostu wyślę zapytanie SELECT.

ZADEKLARUJ @TestVar INT \u003d 5 IF @TestVar BETWEEN 1 AND 10 SELECT "@TestVar jest w zakresie od 1 do 10" AS [Wynik]


Przykład użycia operatora NOT BETWEEN

Teraz napiszmy zapytanie używając słowa kluczowego NOT, na przykład musimy wyświetlić wszystkie produkty, których cena nie mieści się w zakresie od 100 do 200 rubli ( równoważny przykład z użyciem operatorów porównania, które również dołączam).

Warunek za pomocą operatora NOT BETWEEN WYBIERZ ProductID, nazwa produktu, cena z tabeli testowej GDZIE cena NIE MIĘDZY 100 a 200 - warunek przy użyciu operatorów porównania WYBIERZ ID produktu, nazwa produktu, cena z tabeli testowej GDZIE Cena< 100 OR Price > 200

W tym przypadku wyświetliliśmy wszystkie towary, których cena jest niższa niż 100 lub wyższa niż 200 rubli.

W języku T-SQL oprócz operatora BETWEEN istnieją inne operatory logiczne, na przykład operator EXISTS, który w niektórych przypadkach jest bardzo przydatny, sprawdziliśmy to również na tej stronie.

To wszystko dla mnie, pa!

Operator BETWEEN wykonuje logiczną kontrolę wartości względem zakresu wartości. Operator zwraca TRUE, jeśli wartość mieści się w zakresie, i FALSE, jeśli wartość nie mieści się w zakresie. Jeśli jakakolwiek wartość w zakresie jest równa NULL (nieznana), wynikiem jest NULL.

Operator EXISTS jest semantycznie równoważny operatorowi ANY / SOME.

Składnia SQL 2003

SELECT * WHERE wyrażenie BETWEEN dolna_granica A górna_granica

Słowa kluczowe

GDZIE wyrażenie

Sprawdza wyrażenie skalarne (takie jak kolumna) względem zakresu wartości między górna_granica i dolna_granica. MIĘDZY dolną_graniczną ORAZ górną_ granicą

Porównuje wyrażenie z dolną_granicą i górną_ granicą. Porównanie obejmuje wartości ekstremalne, to znaczy jest to to samo, co „gdzie wyrażenie [nie] jest większe lub równe dolny_granice i mniejsze lub równe górne_granice”.

Główne zasady

Operator BETWEEN służy do testowania wyrażenia względem zakresu wartości. Operator BETWEEN może być używany z dowolnym typem danych z wyjątkiem BLOB, CLOB, NCLOB, REF i ARRAY.

Na przykład musimy zobaczyć liczbę prac (title_id), dla których wolumeny sprzedaży od początku roku (ytd_sales) mieszczą się w zakresie od 10 000 do 20 000.

WYBIERZ title_id Z tytułów WHERE ytcLsales MIĘDZY 10000 A 20000

Operator BETWEEN obejmuje granice zakresu. W takim przypadku wynik będzie zawierał wartości 10 000 i 20 000. Jeśli chcesz wyszukiwać bez uwzględniania granic zakresu, musisz użyć większej niż (\u003e) i mniejszej niż (<).

WYBIERZ title_id Z tytułów WHERE ytd.sales\u003e 10000 AND ytd_sales< 20000

Operator NOT umożliwia wyszukiwanie poza zakresem określonym w operatorze BETWEEN. Możesz więc znaleźć numery wszystkich prac (title_id), które nie zostały opublikowane w 2003 roku.

Niektórzy programiści są bardzo wybredni, jeśli chodzi o użycie słowa kluczowego AND w klauzulach WHERE. Aby osoba nieznajoma z kodem nie pomyślała, że \u200b\u200boperator AND użyty w operatorze BETWEEN jest operatorem boolowskim, możesz zawrzeć całą klauzulę BETWEEN w nawiasach.

SELECT title_id FROM titles WHERE (ytd_sales BETWEEN "10000 AND 20000) AND pubdate\u003e \u003d" 1991-06-12 00: 00: 00.000 "

Różnice we wdrożeniach na różnych platformach

Wszystkie platformy obsługują operatora BETWEEN, jak opisano powyżej.

Podczas pracy z relacyjnym DBMS, w którym dane są przechowywane w formie tabelarycznej, użytkownicy często stają przed zadaniem wybrania wartości, które są zawarte (nie uwzględnione) w pewnym zakresie. Język SQL pozwala określić zbiór, który powinien (nie powinien) należeć do wartości z różnymi opcjami - operator In, operator Like, kombinacja warunków więcej - mniej, a także operator SQL Between. Opis i przykłady w tym artykule będą dotyczyły tej drugiej opcji.

Operator Between w SQL: składnia, ograniczenia

Operator między SQL oznacza dosłownie „między”. Jego użycie pozwala ustawić ograniczenie „Od i Do” na określone pole, a jeśli następna wartość mieści się w zakresie, to predykat przyjmie wartość „Prawda”, a wartość znajdzie się w ostatecznej selekcji.

Składnia operatora jest niezwykle prosta:

Gdzie t1.n między 0 a 7

Jak widać, po słowie kluczowym between należy podać wartość dolnej granicy zakresu, a następnie AND i wartość górnej granicy.

Wypiszmy, z jakimi typami danych może współpracować operator between SQL:

  1. Z liczbami - całe i ułamkowe.
  2. Z datami.
  3. Z tekstem.

To między operatorem SQL ma pewne cechy szczególne. Poznajmy je:

  1. Podczas pracy z liczbami i datami w wyborze uwzględniane są ograniczenia Od i Do.
  2. Wartość dolnej granicy zakresu musi być mniejsza niż wartość górnej granicy, w przeciwnym razie nic nie zostanie wyświetlone, ponieważ warunek jest logicznie niepoprawny. Należy zachować szczególną ostrożność, gdy warunek zawiera zmienne zamiast określonych wartości.

Podczas pracy z tekstem wartość górnej granicy zakresu nie zostanie uwzględniona w zaznaczeniu, jeśli nie zostanie określona tak precyzyjnie, jak to możliwe. W następnych sekcjach omówimy tę funkcję bardziej szczegółowo.

Numery i daty pobierania próbek w określonym przedziale

Przygotujmy tabelę z danymi dotyczącymi menedżerów pracujących w organizacji. Tabela będzie miała następującą strukturę:

Nazwa pola

Typ danych

Opis

Unikalny identyfikator pracownika

Tekst

Nazwisko pracownika

Tekst

Imię i nazwisko pracownika

drugie imię

Tekst

Pracownik patronimiczny

Tekst

Płeć pracownika (M / K)

Data paragonu

Data i godzina

Data zatrudnienia pracownika

Number_children

Liczbowy

Liczba dzieci, które ma pracownik

Wypełnijmy tabelę następującymi danymi:

Kod

Nazwisko

Imię

drugie imię

Piętro

Data paragonu

Number_children

Alexandrova

Nikolaevna

Stepanovich

Vinogradov

Pawłowicz

Alexander

Borysowicz

Vishnyakov

Aleksandrowicz

Tropnikov

Siergiejewicza

Perły

Wasilewicz

Konstantinovna

Nikołajewicz

Skomponujmy pomiędzy, co pomoże nam wybrać wszystkich pracowników z 2 lub 3 dziećmi:

Rezultatem będą trzy wiersze z danymi pracowników o nazwiskach Shumilin, Tropnikov i Avdeeva.

Teraz wybierzemy pracowników zatrudnionych od 1 stycznia 2005 do 31 grudnia 2016. Należy zauważyć, że różne DBMS umożliwiają zapisywanie dat w warunkach na różne sposoby. W większości przypadków data jest po prostu wymuszona w postaci dzień-miesiąc-rok (lub cokolwiek wygodniejszego) i jest zapisana pojedynczo lub w DBMS, data jest ujęta w znak „#”. Przeprowadźmy na jego podstawie przykład:

SELECT Managers. *, Managers.Reception_Date

OD menedżerów

GDZIE Menedżerowie. Data odbioru między 1 stycznia 2005 r. A 31 grudnia 2016 r.

Rezultatem będzie pięciu pracowników zatrudnionych we wskazanym okresie włącznie.

Praca pomiędzy sznurkami

Bardzo częstym zadaniem, które trzeba rozwiązać podczas pracy z nazwiskami pracowników, jest konieczność wybrania tylko tych, których nazwiska zaczynają się na określoną literę. Spróbujmy, a my spełnimy prośbę i wybierzmy pracowników, których nazwiska zaczynają się od nazwiska od A do B:

Wynik jest następujący:

Jak widać, dwóch pracowników o nazwisku zaczynającym się na literę B nie znalazło się na liście. Jaki jest tego powód? Chodzi o to, jak dokładnie operator porównuje ciągi o różnej długości. Linia „B” jest krótsza niż linia „Vinogradov” i jest wypełniona spacjami. Ale przy sortowaniu alfabetycznym spacje będą znakami wiodącymi, a nazwisko nie zostanie uwzględnione w selekcji. Różne DBMS oferują różne rozwiązania dla ten problem, ale dla niezawodności często najłatwiej jest określić następującą literę alfabetu w zakresie:

Wykonując ta prośba wynik w pełni nas zadowoli.

Taki niuans istnieje tylko przy pracy z danymi znakowymi, ale pokazuje, że pracując nawet z tak prostymi operatorami jak między, należy być ostrożnym.

Określa, czy wartość wyrażenia mieści się w określonym zakresie. Tego operatora można używać w instrukcjach SQL.

Składnia

wyrażenie [Nie] pomiędzywartość1Iwartość2

Składnia operatora Pomiędzy i zawiera następujące elementy:

Uwagi

Jeśli wartość składnika wyrażenie jest pomiędzy wartość1 i wartość2 (włącznie), operator Pomiędzy i zwraca wartość Prawdziwe; w przeciwnym razie wraca Fałszywe... Włączam operator logiczny Nie prowadzi do weryfikacji odwrotnego warunku (przy założeniu, że składnik wyrażenie jest poza zakresem zdefiniowanym przez komponenty wartość1 i wartość2).

Przez Between ... I można określić, czy wartość pola mieści się w określonym przedziale liczbowym. Poniższy przykład określa, czy zamówienie zostało wysłane na adres z kodem pocztowym z podanego zakresu. Jeśli kod pocztowy zawiera się w przedziale od 98101 do 98199, funkcja IIf zwraca Local. W przeciwnym razie zwraca wartość Nonlocal.

SELECT IIf (kod pocztowy od 98101 do 98199, „lokalny”, „nielokalny”) FROM Publishers

Jeśli wyrażenie, wartość1 lub wartość2 To ma wartość zerowa, Pomiędzy i zwraca wartość Zero.

Ponieważ symbole wieloznaczne, takie jak gwiazdka (*), są uważane za literały, nie można ich używać w operatorze Pomiędzy i... Na przykład nie można użyć wyrażeń takich jak 980 * i 989 *, aby znaleźć wszystkie indeksy zaczynające się od liczb z zakresu od 980 do 989. Istnieją dwa sposoby rozwiązania tego problemu. Do zapytania można dodać wyrażenie, które jest przekazywane do operatora Pomiędzy i pierwsze trzy znaki pola tekstowego. Inną opcją jest dodanie dodatkowych cyfr do dolnej i górnej granicy sprawdzanego interwału, w tym przypadku - od 98000 do 98999 lub od 98000 do 98999-9999, jeśli używane są rozszerzone kody pocztowe (dla indeksów należy pominąć -0000, w przeciwnym razie pominięto indeks 98000, jeśli niektóre indeksy mają rozszerzenia, a inne nie).

DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu