LA CLOCHE

Il y a ceux qui ont lu cette nouvelle avant vous.
Abonnez-vous pour recevoir des articles frais.
Courriel
Prénom
Nom de famille
Comment voulez-vous lire The Bell
Pas de spam

Toute demande de travail créée dans la base de données simplifie l'accès aux informations nécessaires. Dans un post précédent, j'ai parlé des opérateurs de condition générale. Dans la même entrée, je parlerai des opérateurs qui vous permettront de créer des requêtes pouvant produire des informations d'intérêt plus détaillées, ce qui n'est pas facile à trouver avec les requêtes avec les opérateurs AND, OR.
L'un des opérateurs spéciaux est EN. Cet opérateur vous permet de définir la plage d'affichage requise des informations nécessaires. Revenons aux données sur les fabricants de chiens

Débiteurs

Num Mois Année Sname Ville Adresse Dette
0001 Juillet2012 IvanovStavropolStavropol, 150000
0002 Décembre2019 KononovTatarZagorodnaya, 254684068
0003 Mai2013 YamshinMikhailovskRural, 48165840
0004 Août2012 PrenyStavropolCentral, 1646580
... ... ... ... ... ... ...
9564 Mars2015 UlievaDeminoInternational, 156435089
9565 Octobre2012 PavlovaStavropolVokzalnaya, 3768059
9566 Janvier2012 UryupaMikhailovskFontannaya, 19 ans51238
9567 Novembre2017 ValletovTatarSortie, 65789654

Supposons que vous souhaitiez sélectionner tous les débiteurs de la ville de Stavropol ou de Tatarka. Par analogie avec l'entrée précédente, vous devez utiliser la requête
SELECT *
DE Débiteurs
O City Ville \u003d "Stavropol"
OU Ville \u003d "Tatar";

Tout d'abord, nous obtenons un code lourd. En utilisant des opérateurs spéciaux, vous pouvez obtenir un code plus compact.
SELECT *
DE Débiteurs
O City LA VILLE ("Stavropol", "Tatar");

Le résultat sera

Trouvons la logique du programme. Avec les mots-clés SELECT, FROM et WHERE. Et puis l'opérateur IN apparaît. Il donne au programme une séquence d'actions - vous devez afficher les informations de la base de données contenues dans la colonne "Ville". Et pour afficher, vous devez sélectionner les données "Stavropol" et "Tatarka".
Prenons un exemple dans lequel vous devez effectuer une sélection pour certains montants de dette.
SELECT *
DE Débiteurs
O IN la dette (435089, 789654, 684068);

Le résultat sera le suivant

C'est-à-dire l'opérateur IN recherche dans la base de données entière les paramètres de sélection des informations spécifiés.
La situation est différente avec l'utilisation d'un autre opérateur spécial. ENTRE. Si l'opérateur EN   informations considérées avec des paramètres spécifiés exclusivement, l'opérateur ENTRE - entre certaines plages. Cependant, aucune analogie ne doit être établie entre la traduction de l'opérateur donné de l'anglais et son objectif réel. Si vous spécifiez ENTRE 1 ET 5, cela ne signifie pas que les nombres 2, 3 et 4. seront vrais. Cet opérateur est simplement perçu par SQL comme une valeur qui peut être trouvée parmi d'autres valeurs. Pour un exemple, il se présente comme suit.
SELECT *
DE Débiteurs
OERE les dettes entre 30000 et 100000;

Le résultat sera

Autrement dit, SQL a accepté la déclaration ENTRE   comme toute valeur comprise entre 30 000 et 100 000 dans la colonne Dettes.
En plus de spécifier des plages approximatives en termes numériques, vous pouvez spécifier des plages alphabétiques dans lesquelles les informations contenant les premières lettres de la plage spécifiée sont affichées. Mais, il y a un point intéressant. Créez la requête suivante
SELECT *
DE Débiteurs
O S Sname ENTRE "ET" ET "P";

Ensuite, les données suivantes seront affichées

Question naturelle: "Pourquoi les débiteurs ont-ils été retirés de la liste, avec le nom de famille Preni et Pavlova? Après tout, les premières lettres de leurs noms de famille se trouvent 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 ces requêtes ne perçoit que la longueur des chaînes de recherche qui sont spécifiées. En d'autres termes, la longueur de la chaîne" P " dans la demande est un caractère et la longueur de la chaîne "Preny" et "Pavlova" dans la base de données est respectivement de cinq et sept. Mais le nom de famille " Etvanov "tombe dans la plage car la plage commence par Et, comme le début, à partir d'un caractère.

Dans cet article, nous considérerons eNTRE T-SQL booléen, Vous découvrirez de quel type d'opérateur il s'agit et comment l'utiliser. Et aussi, bien sûr, nous analyserons des exemples de requêtes SQL en utilisant l'opérateur BETWEEN.

Instruction BETWEEN dans T-SQL

ENTRE   Est une instruction booléenne T-SQL qui définit la plage à vérifier. En d'autres termes, avec BETWEEN, nous pouvons vérifier si une valeur est dans une certaine plage.

Syntaxe

expression_test   [PAS] ENTRE begin_expression   ET expression_fin

Description des arguments

  • test_expression - expression à tester pour l'appartenance à la plage de begin_expression à end_expression;
  • begin_expression - expression caractérisant le début de la plage;
  • expression_fin est une expression caractérisant la fin d'une 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 test_expression est supérieur ou égal à begin_expression, inférieur ou égal à end_expression, c'est-à-dire test_expression s'étend de begin_expression à end_expression;
  • FALSE - si la valeur de l'argument expression_test n'est pas dans la plage de expression_début à expression_fin.

En utilisant mot-clé NON   nous pouvons inverser le résultat du prédicat, en d'autres termes, NOT BETWEEN signifie que nous voulons vérifier la valeur du fait qu'il n'est pas dans la plage donnée.

Dans ce cas, l'instruction NOT BETWEEN retournera TRUE si la valeur de l'argument test_expression n'est pas dans la plage de begin_expression à end_expression.

Si au moins une des expressions de BETWEEN contient une valeur NULL, le résultat ne sera pas défini.

Remarque! 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 est traitée par le serveur SQL de manière spéciale, le résultat d'une requête SQL impliquant des valeurs NULL peut être non évident et imprévisible.

Remarque! 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", où je parle en détail des bases du langage T-SQL, et je prête également beaucoup d'attention aux conceptions avancées.

Données source pour des exemples

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

Création d'une table CREATE TABLE TestTable (IDENTITY (1,1) NOT NULL, (100) NOT NULL, NULL) GO --Ajout de lignes à la table INSERT INTO TestTable (ProductName, Price) VALUES ("System unit", 300), (" Moniteur ", 200), (" Clavier ", 100), (" Souris ", 50), (" Imprimante ", 200), (" Scanner ", 150), (" Téléphone ", 250), (" Tablette " , 300) GO --Select * FROM TestTable data

Un exemple d'utilisation de l'opérateur BETWEEN dans la clause WHERE

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

Condition utilisant l'instruction BETWEEN 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 à l'aide des opérateurs de comparaison SELECT ProductID, ProductName, Price FROM TestTable WHERE Price\u003e \u003d 100 AND Price<= 200

Comme vous pouvez le voir, le résultat est le même, mais dans le cas de ENTRE la condition apparaît plus clairement et clairement, de plus, nous n'avons noté l'expression de vérification (Prix) qu'une seule fois, dans le cas des opérateurs de comparaison deux.

Un exemple d'utilisation de l'instruction BETWEEN dans un IF conditionnel

L'opérateur BETWEEN peut être utilisé non seulement dans la section WHERE, mais également dans d'autres constructions T-SQL, par exemple, dans la construction IF conditionnelle. Dans l'exemple suivant, nous vérifierons 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'envoie simplement une requête SELECT.

DECLARE @TestVar INT \u003d 5 IF @TestVar ENTRE 1 ET 10 SELECT "La variable @TestVar est comprise entre 1 et 10" AS [Résultat]


Un exemple d'utilisation de l'opérateur NOT BETWEEN

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

Condition utilisant l'opérateur NOT BETWEEN SELECT ProductID, ProductName, Price FROM TestTable WHERE Price NOT BETWEEN 100 AND 200 - Condition utilisant les opérateurs de comparaison SELECT ProductID, ProductName, Price FROM TestTable WHERE Price< 100 OR Price > 200

Dans ce cas, nous avons obtenu toutes les marchandises dont le prix est inférieur à 100 ou supérieur à 200 roubles.

En 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 peut être très utile, nous l'avons également examiné sur ce site.

C'est tout pour le moment, au revoir!

L'instruction BETWEEN effectue une vérification booléenne d'une valeur par rapport à une plage de valeurs. L'opérateur renvoie VRAI si la valeur est dans la plage et FAUX si la valeur n'est pas dans la plage. Si une valeur de plage est NULL (inconnue), le résultat sera NULL.

L'instruction EXISTS est sémantiquement équivalente à l'instruction ANY / SOME.

Syntaxe SQL 2003

   SELECT * WHERE expression ENTRE lower_boar ET upper_border

Mots clefs

O expression expression

Vérifie la conformité d'une expression scalaire (par exemple, une colonne) avec la plage de valeurs située entre la limite supérieure et la limite inférieure. ENTRE lower_limit ET upper_limit

Compare une expression avec une limite inférieure et une limite supérieure. La comparaison inclut des valeurs extrêmes, c'est-à-dire que c'est la même chose que «où l'expression [not] est supérieure ou égale à la borne inférieure et inférieure ou égale à la borne supérieure\u003e.

Règles générales

L'opérateur BETWEEN est utilisé pour tester une expression par rapport à une plage de valeurs. L'instruction BETWEEN peut être utilisée avec tout type de données, à l'exception de BLOB, CLOB, NCLOB, REF et ARRAY.

Par exemple, nous devons voir le nombre d'œuvres (title_id) pour lesquelles les volumes de ventes depuis le début de l'année (ytd_sales) sont compris entre 10 000 et 20 000.

SÉLECTIONNEZ title_id À PARTIR DES titres O y ytcLsales ENTRE 10000 ET 20000

L'instruction BETWEEN inclut des limites de plage. Dans ce cas, les résultats incluront les valeurs de 10000 et 20000. Si vous devez rechercher, sans inclure les limites de plage, vous devez utiliser les caractères "plus" (\u003e) et moins (<).

SELECT title_id FROM titres WHERE ytd.sales\u003e 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 la façon dont le mot-clé ANDER est utilisé dans les clauses WHERE. Pour qu'une personne qui ne connaît pas le code ne pense pas que l'opérateur AND utilisé dans l'opérateur BETWEEN soit un opérateur logique, vous pouvez mettre l'intégralité de la clause BETWEEN entre crochets.

SELECT title_id FROM titres WHERE (ytd_sales BETWEEN "10000 AND 20000) AND pubdate\u003e \u003d" 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.

Lorsque vous travaillez avec des SGBD relationnels dans lesquels les données sont stockées sous forme de tableau, les utilisateurs sont souvent confrontés à la tâche de récupérer des valeurs qui sont (non incluses) dans une certaine plage. Le langage SQL vous permet de spécifier un ensemble qui devrait (ne devrait pas) appartenir à une valeur par diverses options - un opérateur In, un opérateur Like, une combinaison de plus ou moins de conditions, ainsi qu'une instruction SQL Between. La description et les exemples de cet article seront consacrés à la dernière option.

Instruction Between en SQL: syntaxe, limitations

Littéralement, l'instruction entre SQL se traduit par «entre». Son utilisation vous permet de définir la restriction «De et À» à un champ spécifique, et si la valeur suivante tombe dans la plage, le prédicat prendra la valeur «Vrai» 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é entre, vous devez spécifier la valeur de la bordure inférieure de la plage, puis ET et la valeur de la bordure supérieure.

Énumérons les types de données avec lesquels l'opérateur SQL peut fonctionner:

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

Cette instruction SQL a certaines caractéristiques. Apprenez à les connaître:

  1. Lorsque vous travaillez avec des nombres et des dates, les valeurs de contrainte «De et À» 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 logiquement pas vraie. Un soin particulier doit être apporté 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 de manière très précise. Dans les sections suivantes, nous considérons cette fonctionnalité plus en détail.

Sélection de nombres et de dates dans une certaine plage

Nous allons préparer un tableau avec des données sur les managers travaillant dans l'organisation. Le tableau aura la structure suivante:

Nom du champ

Type de données

La description

Identifiant unique de l'employé

Texte

Nom de famille de l'employé

Texte

Nom de l'employé

Deuxième prénom

Texte

Patronyme de l'employé

Texte

Sexe des employés (H / F)

Date de réception

Date / heure

Date d'embauche des employés

Numéro_enfant

Numérique

Nombre d'enfants par employé

Remplissez le tableau avec les données suivantes:

Code

Nom de famille

Prénom

Deuxième prénom

Sexe

Date de réception

Numéro_enfant

Alexandrova

Nikolaevna

Stepanovich

Vinogradov

Pavlovich

Alexandre

Borisovich

Vishnyakov

Alexandrovitch

Tropnikov

Sergeevich

Des perles

Vasilievich

Konstantinovna

Nikolaevich

Nous composons entre, ce qui nous aidera à choisir tous les employés avec 2 ou 3 enfants:

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

Maintenant, nous sélectionnons les employés acceptés du 1er janvier 2005 au 31 décembre 2016. Il convient de noter que différents SGBD permettent d'écrire des conditions à ce jour de différentes manières. Dans la plupart des cas, la date est simplement forcée de ressembler à jour-mois-année (ou ce qui est plus pratique) et enregistrée en single ou dans le SGBD, la date est incluse dans le signe "#". Exécutons l'exemple basé sur lui:

SELECT Managers. *, Managers Date de réception

DE gestionnaires

OERE les gestionnaires. Date de réception entre # 1/1/2005 # et # 31/12/2016 #

Le résultat sera cinq employés embauchés au cours de la période spécifiée incluse.

Travailler entre les deux avec des cordes

Une tâche très courante qui doit être résolue lorsque vous travaillez avec les noms des employés est la nécessité de sélectionner uniquement ceux dont les noms commencent par une certaine lettre. Essayons et nous répondrons à la demande et sélectionnerons les employés dont les noms commencent par les noms de A à B:

Le résultat est le suivant:

Comme vous pouvez le voir, deux employés portant un nom de famille avec la lettre B ne figuraient pas sur la liste. Quelle en est la raison? Le point est exactement la façon dont l'opérateur compare les chaînes de longueur inégale. La ligne "B" est plus courte que la ligne "Vinogradov" et est complétée par des espaces. Mais lors du tri alphabétique, les espaces seront des caractères de tête et le nom de famille ne tombera pas dans la sélection. Différents SGBD offrent différentes solutions à ce problème, mais il est souvent plus facile de spécifier la lettre suivante de l'alphabet dans la plage pour plus de fiabilité:

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

Une telle nuance existe uniquement lorsque vous travaillez avec des données symboliques, mais cela montre que lorsque vous travaillez même avec des opérateurs aussi simples qu'entre les deux, vous devez être prudent.

Détermine si la valeur d'une expression se situe dans l'intervalle spécifié. Cette instruction peut être utilisée dans les instructions SQL.

Syntaxe

expression [Pas] 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 la valeur est retournée Faux. Activer l'opérateur logique Pas   conduit à vérifier la condition inverse (en supposant que le composant expression   hors plage définie par les composants valeur1   et valeur2).

En utilisant Between ... Et   Vous pouvez déterminer si la valeur du champ se situe dans la plage numérique spécifiée. L'exemple ci-dessous détermine si la commande a été envoyée à une adresse avec un code postal d'une plage donnée. Si le code postal est compris entre 98101 et 98199, la fonction IIf   renvoie Local. Sinon, il renvoie Nonlocal.

SELECT IIf (PostalCode Entre 98101 et 98199, «Local», «Nonlocal») DES éditeurs

Si expression, valeur1   ou valeur2   Null Entre ... et   renvoie une valeur Null.

Étant donné que les caractères génériques, tels qu'un astérisque (*), sont considérés comme des littéraux, ils ne peuvent pas être utilisés dans une instruction Entre ... et. Par exemple, vous ne pouvez pas utiliser des expressions de la forme 980 * et 989 * pour rechercher tous les index 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 passe à l'opérateur Entre ... et les trois premiers caractères de la zone de texte. Une autre option consiste à ajouter des chiffres supplémentaires aux limites inférieure et supérieure de l'intervalle vérifié, dans ce cas, de 98000 à 98999, ou de 98000 à 98999-9999, si des codes postaux étendus sont utilisés (les codes inférieurs doivent omettre -0000, sinon il l'index 98000 est manquant si certains index ont des extensions, mais pas d'autres).

LA CLOCHE

Il y a ceux qui ont lu cette nouvelle avant vous.
Abonnez-vous pour recevoir des articles frais.
Courriel
Prénom
Nom de famille
Comment voulez-vous lire The Bell
Pas de spam