Sql entre la syntaxe. BETWEEN dans T-SQL - exemples d'utilisation de l'opérateur logique. Données initiales pour exemples

Lorsque vous travaillez avec un SGBD relationnel, dans lequel les données sont stockées sous forme de tableau, les utilisateurs sont souvent confrontés à la tâche de sélectionner des valeurs incluses (non incluses) dans une certaine plage. Le langage SQL vous permet de spécifier un ensemble auquel une valeur devrait (ne devrait pas) appartenir de différentes manières - l'opérateur In, l'opérateur Like, une combinaison de conditions supérieur à - inférieur à, ainsi que l'opérateur SQL Between. La description et les exemples de cet article se concentreront sur cette dernière option.

Opérateur "Between" en SQL : syntaxe, restrictions

Littéralement, l'opérateur SQL entre est traduit par "entre". Son utilisation vous permet de définir la restriction "From and To" sur un champ spécifique, et si la valeur suivante tombe dans la plage, alors le prédicat prendra la valeur "True", et la valeur tombera dans la sélection finale.

La syntaxe de l'opérateur est extrêmement simple :

Où t1.n entre 0 et 7

Comme vous pouvez le voir, après le mot clé between, vous devez spécifier la valeur de la limite inférieure de la plage, puis AND et la valeur de la limite supérieure.

Listons les types de données avec lesquels l'opérateur SQL between peut fonctionner :

  1. Avec des nombres - entiers et fractionnaires.
  2. Avec dates.
  3. Avec texte.

Cet opérateur entre SQL a certaines fonctionnalités. Apprenons à les connaître :

  1. Lorsque vous travaillez avec des nombres et des dates, les valeurs de contrainte From et To sont incluses dans la sélection.
  2. La valeur de la limite inférieure de la plage doit être inférieure à la valeur de la limite supérieure, sinon rien ne sera affiché, car la condition n'est pas logiquement vraie. Vous devez être particulièrement prudent lorsque des variables sont incluses dans la condition au lieu de valeurs spécifiques.

Lorsque vous travaillez avec du texte, la valeur de la limite supérieure de la plage ne sera pas incluse dans la sélection si elle n'est pas spécifiée aussi précisément que possible. Dans les sections suivantes, nous examinerons cette fonctionnalité Suite.

Sélection de nombres et de dates dans une plage spécifique

Préparons un tableau avec des données sur les gestionnaires travaillant dans l'organisation. Le tableau aura la structure suivante :

Nom de domaine

Type de données

La description

ID d'employé unique

Texte

Nom de famille de l'employé

Texte

Nom de l'employé

deuxième nom

Texte

Deuxième prénom de l'employé

Texte

Genre de l'employé (H/F)

Date de réception

Date Heure

Date à laquelle l'employé a été embauché

Nombre d'enfants

Numérique

Nombre d'enfants qu'un employé a

Remplissez le tableau avec les données suivantes :

Le code

Nom de famille

Nom

deuxième nom

Sol

Date de réception

Nombre d'enfants

Alexandrova

Nikolaïevna

Stepanovitch

Vinogradov

Pavlovitch

Alexandre

Borisovitch

Vishnyakov

Aleksandrovitch

Tropnikov

Sergueïevitch

Jemtchougov

Vassilievitch

Konstantinovna

Nikolaïevitch

Créons entre, ce qui nous aidera à sélectionner tous les employés qui ont 2 ou 3 enfants :

Le résultat sera trois lignes avec des données sur les employés portant les noms de Shumilin, Tropnikov et Avdeeva.

Choisissons maintenant les employés acceptés du 1er janvier 2005 au 31 décembre 2016. Il convient de noter que différents SGBD vous permettent d'écrire des dates dans des conditions de différentes manières. Dans la plupart des cas, la date est simplement convertie de force en jour-mois-année (ou ce qui est plus pratique) et écrite en simple ou Dans le SGBD, la date est entourée du signe "#". Exécutons un exemple basé sur celui-ci :

SELECT Managers.*, Managers.Accept_Date

DES Gérants

OÙ Gestionnaires. Réception_Date Entre #1/1/2005# Et #31/12/2016#

Le résultat sera cinq employés embauchés pendant la période spécifiée, inclusivement.

Travailler entre les cordes

Une tâche très courante que vous devez résoudre lorsque vous travaillez avec les noms de famille des employés est la nécessité de sélectionner uniquement ceux dont le nom de famille commence par une certaine lettre. Essayons et nous exécuterons la requête et sélectionnerons les employés dont les noms de famille commencent par les noms de famille de A à B :

Le résultat est le suivant :

Comme vous pouvez le constater, deux employés dont le nom de famille commence par la lettre B n'ont pas été inclus dans la liste. A quoi est-ce lié ? Le point est de savoir comment l'opérateur compare des chaînes de longueur inégale. La ligne "B" est plus courte que la ligne "Vinogradov" et est remplie d'espaces. Mais lors du tri alphabétique, les espaces se révéleront être des caractères de tête et le nom de famille ne sera pas inclus dans la sélection. Différents SGBD offrent différentes solutions ce problème, mais souvent le moyen le plus simple d'en être sûr est de spécifier la prochaine lettre de l'alphabet dans la plage :

Lors de l'exécution de cette demande, le résultat nous satisfera pleinement.

Cette nuance n'existe que lorsque vous travaillez avec des données de caractères, mais cela montre que même avec des opérateurs simples comme entre, vous devez être prudent.

Détermine si la valeur d'une expression tombe dans l'intervalle spécifié. Cet opérateur peut être utilisé dans les instructions SQL.

Syntaxe

expression [Pas] Compris entrevaleur1Etvaleur2

Syntaxe de l'opérateur Entre et comprend les composants suivants :

Remarques

Si la valeur du composant expression est entre valeur1 Et valeur2(inclus), opérateur Entre et renvoie une valeur Vrai; sinon retourne la valeur Faux. Inclusion opérateur logique Pas conduit à un test de la condition inverse (en supposant que le composant expression est en dehors de l'intervalle défini par les composants valeur1 Et valeur2).

Via Compris entren...Et vous pouvez déterminer si la valeur d'un champ se situe dans une plage numérique spécifiée. L'exemple ci-dessous détermine si une commande a été expédiée à une adresse avec un code postal dans la plage donnée. Si le code postal est compris entre 98101 et 98199, la fonction Si renvoie Locale. Sinon, elle renvoie Nonlocal.

SÉLECTIONNEZ IIf (code postal entre 98101 et 98199, "Local", "Non local") À PARTIR des éditeurs

Si expression, valeur1 ou valeur2 est nul, Entre et renvoie une valeur Nul.

Étant donné que les caractères génériques tels que l'astérisque (*) sont considérés comme des littéraux, ils ne peuvent pas être utilisés dans l'instruction Entre et. Par exemple, vous ne pouvez pas utiliser des expressions telles que 980* et 989* pour trouver tous les indices commençant par des nombres compris entre 980 et 989. Il existe deux façons de résoudre ce problème. Vous pouvez ajouter une expression à la requête qui transmet l'opérateur Entre et les trois premiers caractères du champ de texte. Une autre option consiste à ajouter des chiffres supplémentaires aux limites inférieure et supérieure de l'intervalle en cours de vérification, dans ce cas de 98000 à 98999 ou de 98000 à 98999-9999 si étendu codes postaux(Pour les indices, vous devez omettre -0000, sinon l'index 98000 sera ignoré si certains index ont des extensions et d'autres pas).

Dans cet article, nous allons regarder Opérateur logique T-SQL BETWEEN, vous apprendrez ce qu'est cet opérateur et comment l'utiliser. Et aussi, bien sûr, nous analyserons des exemples de requêtes SQL utilisant l'opérateur BETWEEN.

Opérateur BETWEEN dans T-SQL

COMPRIS ENTRE est un opérateur logique T-SQL qui définit la plage à vérifier. En d'autres termes, avec BETWEEN, nous pouvons vérifier si une valeur se situe dans une certaine plage.

Syntaxe

test_expression[PAS ENTRE expression_debut ET fin_expression

Description des arguments

  • test_expression est une expression à tester pour son appartenance à la plage de begin_expression à end_expression ;
  • begin_expression - une expression caractérisant le début de la plage ;
  • end_expression est une expression caractérisant la fin de la plage.

Toutes les expressions doivent avoir le même type de données.

Par conséquent, l'opérateur BETWEEN renvoie des valeurs (booléennes) :

  • TRUE - si la valeur de l'argument test_expression est supérieure ou égale à la valeur de begin_expression, mais inférieure ou égale à la valeur de end_expression, c'est-à-dire test_expression est compris entre begin_expression et end_expression ;
  • FALSE - si la valeur de l'argument test_expression n'est pas comprise entre begin_expression et end_expression.

Via mot clé PAS nous pouvons inverser le résultat du prédicat, en d'autres termes, NOT BETWEEN signifie que nous voulons vérifier si la valeur n'est pas dans la plage donnée.

Dans ce cas, l'opérateur NOT BETWEEN renverra TRUE si la valeur de l'argument test_expression n'est pas comprise entre begin_expression et end_expression.

Si au moins une des expressions dans BETWEEN contient la valeur NULL, le résultat sera indéfini.

La note! Je vous rappelle que vous devez toujours vous rappeler qu'il existe des valeurs telles que NULL (ce n'est pas vide et non 0, c'est l'absence de valeur), qui sont traitées par le serveur SQL d'une manière spéciale, le résultat de une requête SQL impliquant des valeurs NULL peut ne pas être évidente et imprévisible.

La note! Si vous êtes un programmeur débutant et que vous souhaitez apprendre le langage T-SQL à partir de zéro, je vous recommande de lire mon livre The T-SQL Programmer's Way, dans lequel je parle en détail des bases du langage T-SQL, et aussi payer beaucoup d'attention aux constructions avancées.

Données initiales pour exemples

Mon serveur est Microsoft SQL Server 2016 Express. Par exemple, imaginons que nous ayons une table TestTable et qu'elle contienne les données suivantes ( liste des marchandises avec prix). J'ajoute des lignes à la table à l'aide de l'instruction INSERT INTO.

Créer une table CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NULL) GO --Ajouter des lignes à la table INSERT INTO TestTable(ProductName, Price) VALUES (" Unité système", 300), ("Moniteur", 200), ("Clavier", 100), ("Souris", 50), ("Imprimante", 200), ("Scanner", 150), ("Téléphone", 250), ("Tablette", 300) GO --Récupérer les données SELECT * FROM TestTable

Exemple d'utilisation de la clause BETWEEN dans la clause WHERE

Écrivons une requête SQL qui affichera tous les produits dont le prix est compris entre 100 et 200 roubles inclus.

BETWEEN condition SELECT ProductID, ProductName, Price FROM TestTable WHERE Price BETWEEN 100 AND 200

Nous pourrions écrire cette requête sans utiliser l'opérateur BETWEEN, par exemple, la requête SQL suivante est absolument équivalente.

Condition utilisant des opérateurs de comparaison SELECT ProductID, ProductName, Price FROM TestTable WHERE Price >= 100 AND Price<= 200

Comme vous pouvez le voir, le résultat est le même, mais dans le cas de BETWEEN, la condition semble plus claire et compréhensible. De plus, nous n'avons écrit l'expression pour vérifier (Prix) qu'une seule fois, dans le cas des opérateurs de comparaison, deux.

Un exemple d'utilisation de l'opérateur BETWEEN dans une condition IF

L'opérateur BETWEEN peut être utilisé non seulement dans la clause WHERE, mais également dans d'autres constructions T-SQL, par exemple, dans une construction conditionnelle IF. Dans l'exemple suivant, nous allons vérifier la variable @TestVar pour voir si la valeur de cette variable est comprise entre 1 et 10 et, si c'est le cas, nous effectuerons les actions dont nous avons besoin, par exemple, j'enverrai simplement un requête SELECT.

DECLARE @TestVar INT = 5 IF @TestVar BETWEEN 1 AND 10 SELECT "@TestVar variable is between 1 and 10" AS [Résultat]


Exemple d'utilisation de l'opérateur PAS ENTRE

Écrivons maintenant une requête en utilisant le mot-clé NOT, par exemple, nous devons afficher tous les produits dont le prix n'est pas compris entre 100 et 200 roubles ( un exemple équivalent utilisant des opérateurs de comparaison que je joins également).

NOT BETWEEN condition SELECT ProductID, ProductName, Price FROM TestTable WHERE Price NOT BETWEEN 100 AND 200 --Condition de comparaison SELECT ProductID, ProductName, Price FROM TestTable WHERE Price< 100 OR Price > 200

Dans ce cas, nous avons affiché tous les biens dont le prix est inférieur à 100 ou supérieur à 200 roubles.

Dans T-SQL, en plus de l'opérateur BETWEEN, il existe d'autres opérateurs logiques, par exemple, l'opérateur EXISTS, qui dans certains cas est très utile, nous l'avons également considéré sur ce site.

C'est tout ce que j'ai pour l'instant !

Toute requête créée pour travailler dans la base de données simplifie l'accès aux informations requises. Dans le post précédent, j'ai parlé des déclarations conditionnelles générales. Dans le même article, je parlerai des opérateurs qui vous permettront de créer des requêtes pouvant fournir des informations d'intérêt plus détaillées, ce qui, en même temps, n'est pas si facile à trouver avec des requêtes avec des opérateurs ET, OU.
L'un des opérateurs spéciaux est DANS. Cet opérateur vous permet de définir la plage d'affichage requise des informations requises. Revenons aux données de pluie

Débiteurs

Numéro mois an Le nom de Ville adresse Dette
0001 juillet2012 IvanovStavropolStavropolskaïa, 150000
0002 décembre2019 KononovtatarZagorodnaïa, 254684068
0003 Mai2013 YamshinMikhaïlovskCampagne, 48165840
0004 août2012 prenyStavropolCentrale, 1646580
... ... ... ... ... ... ...
9564 mars2015 OulievDéminointernationale, 156435089
9565 octobre2012 PavlovaStavropolGare, 3768059
9566 janvier2012 UryupaMikhaïlovskFontannaya, 19 ans51238
9567 novembre2017 ValetovtatarSortie, 65789654

Supposons que vous deviez sélectionner tous les débiteurs de la ville de Stavropol ou de Tatarka. Par analogie avec l'entrée précédente, il faudrait utiliser la requête
SÉLECTIONNER *
DE Débiteurs
OÙ Ville = "Stavropol"
OU Ville = "Tatar" ;

Tout d'abord, il s'avère être un code encombrant. En utilisant des opérateurs spéciaux, vous pouvez obtenir un code plus compact.
SÉLECTIONNER *
DE Débiteurs
OÙ Ville DANS ("Stavropol", "Tatarka");

Le résultat sera

Suivons la logique du programme. Avec les mots clés SELECT, FROM et WHERE. Mais alors l'opérateur IN apparaît. Il donne au programme une séquence d'actions - il est nécessaire de visualiser les informations de la base de données contenues dans la colonne "Ville". Et pour l'affichage, vous devez sélectionner les données "Stavropol" et "Tatarka".
Prenons un exemple dans lequel vous devez faire une sélection pour certains montants de dette.
SÉLECTIONNER *
DE Débiteurs
OÙ Dette EN (435089, 789654, 684068);

Le résultat sera le suivant

Celles. L'opérateur IN parcourt toute la base de données à la recherche des paramètres de sélection d'informations spécifiés.
La situation est différente avec l'utilisation d'un autre opérateur spécial COMPRIS ENTRE. Si l'opérateur DANS informations considérées avec des paramètres exclusivement spécifiés, alors l'opérateur COMPRIS ENTRE- entre certaines plages. Cependant, il ne faut pas faire d'analogie entre la traduction de l'anglais de cet opérateur et son objectif réel. Si vous spécifiez BETWEEN 1 AND 5, cela ne signifie pas que les nombres 2, 3 et 4 seront vrais.Cette instruction est simplement perçue par SQL comme une certaine valeur qui peut être parmi d'autres valeurs. Par exemple, cela ressemblera à ceci.
SÉLECTIONNER *
DE Débiteurs
OU Dettes ENTRE 30000 ET 100000;

Le résultat sera

Autrement dit, SQL a accepté l'instruction COMPRIS ENTRE comme toute valeur entre 30000 et 100000 dans la colonne "Dettes".
En plus de définir des plages approximatives en termes numériques, vous pouvez définir des plages alphabétiques qui affichent des informations contenant les premières lettres de la plage spécifiée. Mais, il y en a un point intéressant. Créons la requête suivante
SÉLECTIONNER *
DE Débiteurs
WHERE Snom ENTRE "ET" ET "P" ;

Ensuite, les données suivantes seront affichées

Une question logique : "Pourquoi les débiteurs ont-ils abandonné la liste, avec le nom de famille P René et P Avlova ? Après tout, les premières lettres de leurs noms de famille sont incluses dans la plage spécifiée !" Les lettres sont incluses, mais les noms de famille ne le sont pas. Cela est dû au fait que le langage SQL dans de telles requêtes n'accepte que la longueur des chaînes de recherche qui sont spécifiés. En d'autres termes, la longueur de la chaîne "P" dans la requête est d'un caractère, et la longueur de la chaîne "Preni" et "Pavlova" dans la base de données est respectivement de cinq et sept. Mais le nom de famille " ET vanov" est dans la plage parce que la plage commence par ET, comme début, à partir d'un caractère.

L'opérateur BETWEEN effectue un test booléen sur une plage de valeurs. L'opérateur renvoie TRUE si la valeur est dans la plage et FALSE si la valeur n'est pas dans la plage. Si une valeur de la plage est NULL (inconnue), le résultat sera NULL.

L'opérateur EXISTS est sémantiquement équivalent à l'opérateur ANY/SOME.

Syntaxe SQL 2003

SELECT * WHERE expression BETWEEN limite_inférieure ET limite_supérieure

Mots clés

expression OÙ

Teste une expression scalaire (comme une colonne) par rapport à une plage de valeurs entre upper_bound et lower_bound. ENTRE limite_inférieure ET limite_supérieure

Compare expression avec lower_bound et upper_bound. La comparaison inclut les extrêmes, ce qui revient au même que "où l'expression [n'est] pas supérieure ou égale à la limite_inférieure et inférieure ou égale à la limite_supérieure>.

Règles générales

L'opérateur BETWEEN est utilisé pour tester une expression par rapport à une plage de valeurs. L'opérateur BETWEEN peut être utilisé avec n'importe quel type de données sauf BLOB, CLOB, NCLOB, REF et ARRAY.

Par exemple, nous voulons voir le nombre de titres (title_id) dont les ventes depuis le début de l'année (ytd_sales) se situent entre 10 000 et 20 000.

SELECT title_id FROM titres WHERE ytcLsales BETWEEN 10000 AND 20000

L'opérateur BETWEEN inclut des limites de plage. Dans ce cas, les valeurs 10000 et 20000 seront incluses dans le résultat. Si vous souhaitez rechercher sans inclure de limites de plage, vous devez utiliser le supérieur à (>) et inférieur à (<).

SELECT title_id FROM titres WHERE ytd.sales > 10000 AND ytd_sales< 20000

L'opérateur NOT vous permet de rechercher en dehors de la plage spécifiée dans l'opérateur BETWEEN. Ainsi, vous pouvez trouver les numéros de toutes les œuvres (title_id) qui n'ont pas été publiées en 2003.

Certains programmeurs sont très pointilleux sur l'utilisation des clauses WHERE mot-clé ET. Pour éviter qu'une personne non familiarisée avec le code ne pense que l'opérateur AND utilisé dans l'opérateur BETWEEN est un opérateur logique, vous pouvez placer l'intégralité de la clause BETWEEN entre parenthèses.

SELECT title_id FROM titres WHERE (ytd_sales BETWEEN" 10000 AND 20000) AND pubdate >= "1991-06-12 00:00:00.000"

Différences dans les implémentations entre les plates-formes

Toutes les plates-formes prennent en charge l'opérateur BETWEEN comme décrit ci-dessus.

2022 wisemotors.com. Comment ça fonctionne. Le fer. Exploitation minière. Crypto-monnaie.