LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

Qualsiasi query creata per il lavoro nel database semplifica l'accesso alle informazioni necessarie. Nel post precedente ho parlato di dichiarazioni condizionali generali. Nello stesso post parlerò di operatori che ti permetteranno di creare query che possono dare informazioni di interesse più dettagliate, che, allo stesso tempo, non è così facile da trovare con query con operatori AND, OR.
Uno degli operatori speciali è NEL. Questo operatore consente di impostare l'intervallo richiesto per visualizzare le informazioni desiderate. Torniamo ai dati sui dogmen

Debitori

Num Mese Anno Sname Città Indirizzo Debito
0001 luglio2012 IvanovStavropolStavropolskaya, 150000
0002 dicembre2019 KononovTartaroZagorodnaya, 254684068
0003 Maggio2013 YamshinMikhailovskRurale, 48165840
0004 agosto2012 scusateStavropolCentralnaya, 1646580
... ... ... ... ... ... ...
9564 marzo2015 UliyevaDeminoInternazionale, 156435089
9565 ottobre2012 PavlovaStavropolVokzalnaya, 3768059
9566 gennaio2012 UryupaMikhailovskFontannaya, 1951238
9567 novembre2017 ValletovTartaroUscita, 65789654

Supponi di voler selezionare tutti i debitori della città di Stavropol o Tatarka. Per analogia con il post precedente, sarebbe necessario utilizzare la query
SELEZIONARE *
DA Debitori
WHERE City \u003d "Stavropol"
OR City \u003d "Tatarka";

Prima di tutto, il codice è ingombrante. Utilizzando operatori speciali, puoi ottenere un codice più compatto.
SELEZIONARE *
DA Debitori
DOVE Città IN ("Stavropol", "Tatarka");

Il risultato sarà

Tracciamo la logica del programma. Con le parole chiave SELEZIONA, DA e DOVE. Quindi viene visualizzato l'operatore IN. Fornisce al programma una sequenza di azioni: è necessario visualizzare le informazioni del database contenute nella colonna "Città". E per la visualizzazione è necessario selezionare i dati "Stavropol" e "Tatarka".
Prenderò in considerazione un esempio in cui è necessario effettuare una selezione per determinati importi di debito.
SELEZIONARE *
DA Debitori
WHERE Debt IN (435089, 789654, 684068);

Il risultato sarà il seguente

Quelli. l'operatore IN esegue la scansione dell'intero database per i parametri di selezione delle informazioni specificati.
La situazione è diversa con l'utilizzo di un altro operatore speciale FRA... Se l'operatore NEL informazioni considerate con solo i parametri specificati, quindi l'operatore FRA - tra determinati intervalli. Tuttavia, non si dovrebbe tracciare un'analogia tra la traduzione dall'inglese di questo operatore e il suo scopo reale. Se si specifica TRA 1 E 5, non significa che saranno veri i numeri 2, 3 e 4. Questa affermazione è semplicemente percepita da SQL come un certo valore che può essere trovato tra gli altri valori. Ad esempio, sarà simile a questo.
SELEZIONARE *
DA Debitori
DOVE Debiti TRA 30.000 E 100.000;

Il risultato sarà

Cioè, SQL ha accettato la dichiarazione FRA come qualsiasi valore compreso tra 30.000 e 100.000 nella colonna Debiti.
Oltre a specificare intervalli numerici approssimativi, è possibile specificare intervalli alfabetici che visualizzano le informazioni contenenti le prime lettere dell'intervallo specificato. Ma c'è un punto interessante. Creiamo la seguente query
SELEZIONARE *
DA Debitori
WHERE Sname TRA AND AND AND P;

Quindi verranno visualizzati i seguenti dati

Una domanda logica: "Perché i debitori sono usciti dalla lista con il cognome Preni e Pavlova? Dopo tutto, le prime lettere dei loro cognomi sono incluse nell'intervallo specificato! "Le lettere sono incluse, ma i cognomi no. Ciò è dovuto al fatto che il linguaggio SQL in questo tipo di query accetta solo la lunghezza delle stringhe di ricerca specificate. In altre parole, la lunghezza della stringa" P " nella query è presente un carattere e la lunghezza delle stringhe "Pregny" e "Pavlova" nel database è rispettivamente cinque e sette. Ma il cognome " Ewanov "rientra nell'intervallo perché l'intervallo inizia con E, come inizio, lunghezza da un carattere.

In questo articolo vedremo operatore logico T-SQL BETWEENImparerai cos'è questo operatore e come usarlo. E anche, ovviamente, analizzeremo esempi SQL query utilizzando l'operatore BETWEEN.

Operatore T-SQL BETWEEN

FRA È un operatore T-SQL logico che definisce un intervallo da testare. In altre parole, con BETWEEN possiamo verificare se un valore rientra in un certo intervallo.

Sintassi

test_expression [NON IN MEZZO inizio_espressione E end_expression

Descrizione degli argomenti

  • test_expression - un'espressione di cui verificare l'appartenenza all'intervallo da begin_expression a end_expression;
  • begin_expression - un'espressione che caratterizza l'inizio dell'intervallo;
  • end_expression è un'espressione che caratterizza la fine dell'intervallo.

Tutte le espressioni devono essere dello stesso tipo di dati.

L'operatore BETWEEN restituisce valori (booleano) come risultato:

  • TRUE se il valore dell'argomento test_expression è maggiore o uguale al valore di begin_expression, mentre minore o uguale al valore di end_expression, ad es. test_expression varia da begin_expression a end_expression;
  • FALSE se test_expression non è compreso nell'intervallo da begin_expression a end_expression.

Attraverso parola chiave NON possiamo invertire il risultato del predicato, in altre parole, NOT BETWEEN significa che vogliamo controllare il valore per vedere se è nell'intervallo dato.

In questo caso, NOT BETWEEN restituirà TRUE se test_expression è al di fuori dell'intervallo da begin_expression a end_expression.

Se almeno una delle espressioni in BETWEEN contiene un valore NULL, il risultato non sarà definito.

La nota! Lascia che ti ricordi che devi sempre ricordare che ci sono valori come NULL (questo non è vuoto e non 0, questa è l'assenza di un valore), che vengono elaborati dal server SQL in un modo speciale, il risultato di una query SQL che coinvolge valori NULL potrebbe essere poco chiaro e imprevedibile.

La nota! Se sei un programmatore principiante e vuoi imparare da zero il linguaggio T-SQL, allora ti consiglio di leggere il mio libro "The T-SQL Programmer's Way", in cui parlo in dettaglio delle basi del linguaggio T-SQL e presta molta attenzione anche ai costrutti avanzati.

Dati iniziali per esempi

Il mio server è Microsoft SQL Server 2016 Express. Ad esempio, immaginiamo di avere una tabella di test e che contenga i seguenti dati ( elenco delle merci con indicazione del prezzo). Aggiungo righe alla tabella utilizzando l'istruzione INSERT INTO.

Crea tabella CREATE TABLE TestTable (IDENTITY (1,1) NOT NULL, (100) NOT NULL, NULL) GO --Aggiunta di righe alla tabella INSERT INTO TestTable (ProductName, Price) VALUES (" Unità di sistema", 300), (" Monitor ", 200), (" Tastiera ", 100), (" Mouse ", 50), (" Stampante ", 200), (" Scanner ", 150), (" Telefono ", 250), ("Tablet", 300) VAI - Seleziona dati SELEZIONA * DA Tabella di prova

Un esempio di utilizzo dell'operatore BETWEEN nella clausola WHERE

Scriviamo una query SQL che mostrerà tutti i prodotti il \u200b\u200bcui prezzo è compreso tra 100 e 200 rubli inclusi.

Condizione con istruzione BETWEEN SELECT ProductID, ProductName, Price FROM TestTable WHERE Price TRA 100 E 200

Potremmo scrivere questa query senza utilizzare l'operatore BETWEEN, ad esempio, la seguente query SQL è assolutamente equivalente.

Condizione utilizzando operatori di confronto SELECT ProductID, ProductName, Price FROM TestTable WHERE Price\u003e \u003d 100 AND Price<= 200

Come puoi vedere il risultato è lo stesso, ma nel caso di BETWEEN la condizione appare più chiara e comprensibile, inoltre abbiamo scritto l'espressione per verificare (Price) una sola volta, nel caso di operatori di confronto due.

Un esempio di utilizzo dell'operatore BETWEEN in un condizionale IF

L'operatore BETWEEN può essere utilizzato non solo nella clausola WHERE, ma anche in altri costrutti T-SQL, ad esempio, nel costrutto condizionale IF. Nell'esempio seguente, controlleremo la variabile @TestVar per vedere se il valore di questa variabile è compreso tra 1 e 10 e, in tal caso, eseguiremo l'azione di cui abbiamo bisogno, invierò ad esempio una query SELECT.

DECLARE @TestVar INT \u003d 5 IF @TestVar BETWEEN 1 AND 10 SELECT "@TestVar è nell'intervallo da 1 a 10" AS [Risultato]


Un esempio di utilizzo dell'operatore NOT BETWEEN

Ora scriviamo una query utilizzando la parola chiave NOT, ad esempio, dobbiamo visualizzare tutti i prodotti il \u200b\u200bcui prezzo non è compreso tra 100 e 200 rubli ( un esempio equivalente che utilizza operatori di confronto che allego anche).

Condizione utilizzando l'operatore NOT BETWEEN SELECT ProductID, ProductName, Price FROM TestTable WHERE Price NOT TRA 100 E 200 - Condizione utilizzando operatori di confronto SELECT ProductID, ProductName, Price FROM TestTable WHERE Price< 100 OR Price > 200

In questo caso, abbiamo visualizzato tutti i prodotti il \u200b\u200bcui prezzo è inferiore a 100 o superiore a 200 rubli.

Nel linguaggio T-SQL, oltre all'operatore BETWEEN, sono presenti altri operatori logici, ad esempio l'operatore EXISTS, che in alcuni casi è molto utile, lo abbiamo esaminato anche su questo sito.

È tutto per me, ciao!

L'operatore BETWEEN esegue un controllo booleano su un valore rispetto a un intervallo di valori. L'operatore restituisce VERO se il valore è compreso nell'intervallo e FALSO se il valore non è compreso nell'intervallo. Se qualsiasi valore nell'intervallo è NULL (sconosciuto), il risultato è NULL.

L'operatore EXISTS è semanticamente equivalente all'operatore ANY / SOME.

Sintassi SQL 2003

SELEZIONA * WHERE espressione TRA lower_bound AND upper_border

Parole chiave

DOVE espressione

Controlla un'espressione scalare (come una colonna) rispetto a un intervallo di valori tra upper_bound e lower_bound. TRA lower_boundary E upper_border

Confronta l'espressione con lower_bound e upper_border. Il confronto include valori estremi, ovvero è uguale a "dove [not] è maggiore o uguale a lower_bound e minore o uguale a upper_bound".

Regole generali

L'operatore BETWEEN viene utilizzato per testare un'espressione rispetto a un intervallo di valori. L'operatore BETWEEN può essere utilizzato con qualsiasi tipo di dati eccetto BLOB, CLOB, NCLOB, REF e ARRAY.

Ad esempio, dobbiamo vedere i numeri di opere (title_id) per i quali i volumi di vendita dall'inizio dell'anno (ytd_sales) sono compresi tra 10.000 e 20.000.

SELEZIONA title_id DA titoli WHERE ytcLsales TRA 10000 E 20000

L'operatore BETWEEN include i limiti dell'intervallo. In questo caso, il risultato includerà i valori 10.000 e 20.000. Se è necessario eseguire la ricerca senza includere i limiti dell'intervallo, è necessario utilizzare maggiore di (\u003e) e minore di (<).

SELEZIONA title_id DA titoli WHERE ytd.sales\u003e 10000 AND ytd_sales< 20000

L'operatore NOT consente ricerche al di fuori dell'intervallo specificato nell'operatore BETWEEN. Quindi, puoi trovare i numeri di tutte le opere (title_id) che non sono state pubblicate nel 2003.

Alcuni programmatori sono molto esigenti su come viene utilizzata la parola chiave AND nelle clausole WHERE. Per evitare che qualcuno che non ha familiarità con il codice pensi che l'operatore AND utilizzato nell'operatore BETWEEN sia un operatore logico, è possibile racchiudere l'intera clausola BETWEEN tra parentesi.

SELEZIONA title_id DA titoli WHERE (ytd_sales BETWEEN "10000 AND 20000) AND pubdate\u003e \u003d" 1991-06-12 00: 00: 00.000 "

Differenze nelle implementazioni su diverse piattaforme

Tutte le piattaforme supportano l'operatore BETWEEN come descritto sopra.

Quando si lavora con DBMS relazionali, in cui i dati sono archiviati in forma tabulare, gli utenti si trovano spesso di fronte al compito di selezionare valori che sono inclusi (non inclusi) in un determinato intervallo. Il linguaggio SQL consente di specificare un insieme, che dovrebbe (non dovrebbe) appartenere al valore con diverse opzioni: l'operatore In, l'operatore Like, una combinazione di condizioni più - meno e anche l'operatore SQL Between. La descrizione e gli esempi in questo articolo si concentreranno su quest'ultima opzione.

L'operatore Between in SQL: sintassi, limitazioni

L'operatore tra SQL si traduce letteralmente come "tra". Il suo utilizzo consente di impostare la limitazione "Da e A" a un campo specifico e se il valore successivo rientra nell'intervallo, il predicato assumerà il valore "Vero" e il valore verrà incluso nella selezione finale.

La sintassi dell'operatore è estremamente semplice:

Dove t1.n tra 0 e 7

Come puoi vedere, dopo la parola chiave between, devi specificare il valore del bordo inferiore dell'intervallo, quindi AND e il valore del bordo superiore.

Elenchiamo con quali tipi di dati può funzionare l'operatore SQL Between:

  1. Con numeri - interi e frazionari.
  2. Con le date.
  3. Con testo.

Questo tra operatore SQL ha alcune peculiarità. Conosciamoli:

  1. Quando si lavora con numeri e date, i vincoli Da e A sono inclusi nella selezione.
  2. Il valore del limite inferiore dell'intervallo deve essere inferiore al valore del limite superiore, altrimenti non verrà visualizzato nulla, perché la condizione è logicamente errata. È necessario prestare particolare attenzione quando le variabili sono incluse nella condizione invece di valori specifici.

Quando si lavora con il testo, il valore del limite superiore dell'intervallo non verrà incluso nella selezione se non è specificato nel modo più preciso possibile. Nelle sezioni seguenti considereremo questa funzione in modo più dettagliato.

Campionamento di numeri e date in un intervallo specifico

Prepariamo una tabella con i dati sui manager che lavorano nell'organizzazione. La tabella avrà la seguente struttura:

Nome del campo

Tipo di dati

Descrizione

Identificatore univoco del dipendente

Testo

Cognome del dipendente

Testo

Nome dipendente

secondo nome

Testo

Patronimico dei dipendenti

Testo

Sesso dei dipendenti (M / F)

Data della ricevuta

Appuntamento

Data di assunzione del dipendente

Number_children

Numerico

Il numero di figli di un dipendente

Riempiamo la tabella con i seguenti dati:

Codice

Cognome

Nome

secondo nome

Pavimento

Data della ricevuta

Number_children

Alexandrova

Nikolaevna

Stepanovich

Vinogradov

Pavlovich

Alessandro

Borisovich

Vishnyakov

Alexandrovich

Tropnikov

Sergeevich

Perle

Vasilevich

Konstantinovna

Nikolaevich

Componiamo tra, che ci aiuterà a selezionare tutti i dipendenti con 2 o 3 figli:

Il risultato saranno tre righe con dati sui dipendenti con i nomi Shumilin, Tropnikov e Avdeeva.

Ora selezioneremo i dipendenti assunti dal 1 gennaio 2005 al 31 dicembre 2016. Va notato che diversi DBMS consentono di scrivere date alle condizioni in modi diversi. Nella maggior parte dei casi, la data viene semplicemente forzata nella forma giorno-mese-anno (o qualsiasi altra cosa sia più conveniente) ed è scritta in una singola o nel DBMS la data è racchiusa tra un segno "#". Facciamo un esempio basato su di esso:

SELEZIONA Manager. *, Managers.Reception_Date

DA Manager

DOVE Manager. Reception_Data tra # 1/1/2005 # e # 31/12/2016 #

Il risultato saranno cinque dipendenti assunti durante il periodo specificato compreso.

Lavorare in mezzo con le stringhe

Un compito molto comune che deve essere risolto quando si lavora con i nomi dei dipendenti è la necessità di selezionare solo quelli i cui cognomi iniziano con una certa lettera. Proviamo a soddisfare la richiesta e selezioniamo i dipendenti i cui cognomi iniziano con cognomi da A a B:

Il risultato è il seguente:

Come puoi vedere, due dipendenti con un cognome che inizia con la lettera B non sono stati inclusi nell'elenco. Qual è la ragione di ciò? Il punto è come esattamente l'operatore confronta stringhe di lunghezza diversa. La linea "B" è più corta della linea "Vinogradov" ed è imbottita di spazi. Ma quando si ordina in ordine alfabetico, gli spazi risulteranno essere i caratteri iniziali e il cognome non sarà incluso nella selezione. Diversi DBMS offrono diverse soluzioni per questo problemama spesso è più facile per affidabilità specificare la seguente lettera dell'alfabeto nell'intervallo:

Facendo questa richiesta il risultato ci soddisferà completamente.

Una tale sfumatura esiste solo quando si lavora con i dati dei caratteri, ma mostra che quando si lavora anche con operatori così semplici come nel mezzo, bisogna stare attenti.

Determina se il valore dell'espressione rientra nell'intervallo specificato. Questo operatore può essere utilizzato nelle istruzioni SQL.

Sintassi

espressione [Non] Fravalore1Evalore2

Sintassi dell'operatore Tra e include i seguenti componenti:

Osservazioni

Se il valore del componente espressione è tra valore1 e valore2 (compreso), operatore Tra e restituisce il valore Vero; altrimenti ritorna Falso... Accendere operatore logico Non porta alla verifica della condizione opposta (assumendo che il componente espressione è al di fuori dell'intervallo definito dai componenti valore1 e valore2).

Attraverso Between ... E è possibile determinare se un valore di campo rientra in un intervallo numerico specificato. L'esempio seguente determina se un ordine è stato spedito a un indirizzo con un codice postale all'interno di un determinato intervallo. Se il codice postale è compreso tra 98101 e 98199, la funzione IIf restituisce Local. In caso contrario, restituisce Nonlocal.

SELEZIONA IIf (PostalCode Between 98101 and 98199, "Local", "Nonlocal") FROM Publishers

Se una espressione, valore1 o valore2 Esso ha valore nullo, Tra e restituisce il valore Nullo.

Poiché i caratteri jolly come l'asterisco (*) sono considerati letterali, non possono essere utilizzati nell'operatore Tra e... Ad esempio, non è possibile utilizzare espressioni come 980 * e 989 * per trovare tutti gli indici che iniziano con numeri compresi tra 980 e 989. Esistono due modi per risolvere questo problema. È possibile aggiungere un'espressione alla query che passa all'operatore Tra e i primi tre caratteri della casella di testo. Un'altra opzione è quella di aggiungere ulteriori cifre ai limiti inferiore e superiore dell'intervallo controllato, in questo caso, da 98000 a 98999 o da 98000 a 98999-9999 se vengono utilizzati codici postali estesi (per i pedici, è necessario omettere -0000, altrimenti ignorato l'indice 98000 se alcuni indici hanno estensioni e altri no).

LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam