Limitazione e ordinamento dei dati

Le capacità essenziali dell'istruzione SELECT sono Selezione, Proiezione e Unione. La visualizzazione di colonne specifiche da una tabella è nota come operazione di progetto. Ci concentreremo ora sulla visualizzazione di righe specifiche di output. Questa operazione è nota come operazione di selezione. È possibile selezionare righe specifiche aggiungendo una clausola WHERE a una query SELECT. È un dato di fatto, la clausola WHERE appare subito dopo la clausola FROM nella gerarchia della query SELECT. La sequenza deve essere mantenuta in tutti gli scenari. Se violato, Oracle solleva un'eccezione.

Sintassi:

SELECT *|{[DISTINCT] column| expression [alias],..}
FROM table
[WHERE condition(s)]

Nella sintassi,

  • La clausola WHERE è la parola chiave

  • [condizione] contiene nomi di colonna, espressioni, costanti, valori letterali e un operatore di confronto.

Supponi che il tuo manager stia lavorando al budget trimestrale della tua organizzazione. Nell'ambito di questa attività, è necessario produrre un elenco dei dettagli essenziali di ciascun dipendente, ma solo per i dipendenti che vengono pagati almeno $ 25.000 all'anno. La query SQL seguente esegue questa operazione. Notare l'uso della clausola WHERE mostrata in grassetto.

SELECT Employee_ID, Last_Name, First_Name, Salary
FROM employees
WHERE Salary >= 25000;  

EMPLOYEE_ID  LAST_NAME        FIRST_NAME       SALARY
----------   ---------------  ---------------  -----------
88303        Jones            Quincey          $30,550.00
88404        Barlow           William          $27,500.00
88505        Smith            Susan            $32,500.00

3 rows selected

Punti da notare -

  • Una clausola SELECT può contenere solo una clausola WHERE. Tuttavia, più condizioni di filtro possono essere aggiunte alla clausola WHERE utilizzando l'operatore AND o OR.

  • Le colonne, i valori letterali o le espressioni in una clausola predicato devono essere di tipi di dati simili o interconvertibili.

  • L'alias di colonna non può essere utilizzato nella clausola WHERE.

  • I caratteri letterali devono essere racchiusi tra virgolette singole e fanno distinzione tra maiuscole e minuscole.

  • I valori letterali della data devono essere racchiusi tra virgolette singole e sono sensibili al formato. Il formato predefinito èDD-MON-RR.

Operatori di confronto

Gli operatori di confronto vengono utilizzati nei predicati per confrontare un termine o operando con un altro termine. SQL offre una serie completa di operatori di uguaglianza, disuguaglianza e vari. Possono essere utilizzati a seconda dei dati e della logica delle condizioni del filtro nella query SELECT. Quando si utilizzano operatori di confronto in una clausola WHERE, gli argomenti (oggetti o valori che si stanno confrontando) su entrambi i lati dell'operatore devono essere un nome di colonna o un valore specifico. Se viene utilizzato un valore specifico, il valore deve essere un valore numerico o una stringa letterale. Se il valore è una stringa di caratteri o una data, è necessario immettere il valore tra virgolette singole ("").

Oracle dispone di nove operatori di confronto da utilizzare in condizioni di uguaglianza o disuguaglianza.

Operator  Meaning
=         equal to 
<         less than
>         greater than
>=        greater than or equal to
<=        less than or equal to
!=        not equal to
<>        not equal to

Altri operatori Oracle sono BETWEEN..AND, IN, LIKE e IS NULL.

L'operatore BETWEEN

L'operatore BETWEEN può essere utilizzato per confrontare il valore di una colonna all'interno di un intervallo definito. L'intervallo specificato deve avere un limite inferiore e uno superiore in cui entrambi sono inclusi durante il confronto. Il suo utilizzo è simile all'operatore di disuguaglianza composto (<= e> =). Può essere utilizzato con valori numerici, di caratteri e di tipo di data.

Ad esempio, la condizione WHERE SALARY BETWEEN 1500 AND 2500 in una query SELECT elencherà i dipendenti il ​​cui stipendio è compreso tra 1500 e 2500.

L'operatore IN

L'operatore IN viene utilizzato per testare un valore di colonna in un determinato insieme di valori. Se la colonna può essere equiparata a uno qualsiasi dei valori dell'insieme dato, la condizione viene convalidata. La condizione definita utilizzando l'operatore IN è anche nota come condizione di appartenenza.

Ad esempio, la condizione WHERE SALARY IN (1500, 3000, 2500) in una query SELECT limiterà le righe in cui lo stipendio è 1500, 3000 o 2500.

L'operatore LIKE

L'operatore LIKE viene utilizzato per la corrispondenza di modelli e le ricerche con caratteri jolly in una query SELECT. Se una parte del valore della colonna è sconosciuta, è possibile utilizzare un carattere jolly per sostituire la parte sconosciuta. Utilizza operatori con caratteri jolly per creare la stringa di ricerca, quindi la ricerca è nota come ricerca con caratteri jolly. Questi due operatori sono Percentile ('%') e trattino basso ('_'). Il carattere di sottolineatura ("_") sostituisce un singolo carattere mentre il percentile ("%") sostituisce più di un carattere. Possono essere utilizzati anche in combinazione.

Ad esempio, la query SELECT di seguito elenca i nomi di quei dipendenti il ​​cui cognome inizia con "SA".

SELECT first_name
FROM employees
WHERE last_name LIKE 'SA%';

È (NON) NULLO Condizioni

Da notare, i valori NULL non possono essere testati utilizzando l'operatore di uguaglianza. È perché i valori NULL sono sconosciuti e non assegnati mentre l'operatore di uguaglianza verifica un valore definito. L'operatore IS NULL funge da operatore di uguaglianza per controllare i valori NULL di una colonna.

Ad esempio, la condizione WHERE COMMISSION_PCT IS NULL in una query SELECT elencherà i dipendenti che non hanno una percentuale di commissione.

Operatori logici

È possibile aggiungere più condizioni di filtro al predicato della clausola WHERE. È possibile combinare più di una condizione utilizzando gli operatori logici AND, OR e NOT.

  • AND: unisce due o più condizioni e restituisce i risultati solo quando tutte le condizioni sono vere.

  • OR: unisce due o più condizioni e restituisce i risultati quando una delle condizioni è vera.

  • NOT: nega l'espressione che lo segue.

L'operatore AND collega due o più condizioni in una clausola WHERE e restituisce TRUE solo se tutte le condizioni sono vere. Supponiamo che un manager abbia bisogno di un elenco di dipendenti donne. Inoltre, l'elenco dovrebbe includere solo i dipendenti con cognomi che iniziano con la lettera "E" o che vengono dopo nell'alfabeto. Inoltre, la tabella dei risultati dovrebbe essere ordinata in base al cognome del dipendente. Ci sono due semplici condizioni da soddisfare. La clausola WHERE può essere scritta come: WHERE Gender = 'F' AND last_name> 'E'.

SELECT last_name "Last Name", first_name "First Name", Gender "Gender"
FROM employees
WHERE Gender = 'F' AND last_name > 'E'
ORDER BY last_name;

L'operatore OR collega più di una condizione in una clausola WHERE e restituisce TRUE se una delle condizioni restituisce true. Supponi che i requisiti del tuo manager organizzativo cambino leggermente. È necessario un altro elenco dei dipendenti, ma in questo elenco i dipendenti devono: (1) essere donne o, (2) avere un cognome che inizia con la lettera "T" o una lettera che viene dopo nell'alfabeto. La tabella dei risultati dovrebbe essere ordinata in base al cognome del dipendente. In questa situazione è possibile soddisfare una delle due condizioni per soddisfare la query. Le dipendenti donne dovrebbero essere elencate insieme ai dipendenti con un nome che soddisfi la seconda condizione.

L'operatore NOT viene utilizzato per negare un'espressione o una condizione.

La clausola ORDER BY

Quando si visualizzano solo poche righe di dati, potrebbe non essere necessario ordinare l'output; tuttavia, quando si visualizzano numerose righe, i manager possono essere aiutati nel processo decisionale ordinando le informazioni. L'output di un'istruzione SELECT può essere ordinato utilizzando la clausola ORDER BY facoltativa. Quando si utilizza la clausola ORDER BY, anche il nome della colonna su cui si sta ordinando deve essere un nome di colonna specificato nella clausola SELECT.

La query SQL seguente utilizza una clausola ORDER BY per ordinare la tabella dei risultati in base alla colonna last_name in ordine crescente. L'ordine crescente è l'ordinamento predefinito.

SELECT last_name, first_name
FROM employees
WHERE last_name >= 'J'
ORDER BY last_name;

last_name        first_name
---------------  ---------------
Jones            Quincey
Klepper          Robert
Quattromani      Toni
Schultheis       Robert

L'ordinamento può essere basato anche su valori numerici e di data. L'ordinamento può essere effettuato anche in base a più colonne.

Per impostazione predefinita, la clausola ORDER BY ordinerà le righe di output nella tabella dei risultati in ordine crescente. Possiamo usare la parola chiave DESC (abbreviazione di descending) per abilitare l'ordinamento discendente. L'impostazione predefinita alternativa è ASC che ordina in ordine crescente, ma la parola chiave ASC viene utilizzata raramente poiché è l'impostazione predefinita. Quando viene utilizzata la parola chiave facoltativa ASC o DESC, deve seguire il nome della colonna su cui si sta ordinando nella clausola WHERE.

Positional Sorting - La posizione numerica della colonna nell'elenco delle colonne selezionate può essere fornita nella clausola ORDER BY, invece del nome della colonna. Viene utilizzato principalmente nelle query UNION (discusse più avanti). La query ordina il risultato impostato in base allo stipendio poiché appare secondo nell'elenco delle colonne.

SELECT  first_name, salary
FROM employees
ORDER BY 2;

Variabili di sostituzione

Quando una query SQL deve essere eseguita più di una volta per il diverso insieme di input, è possibile utilizzare variabili di sostituzione. Le variabili di sostituzione possono essere utilizzate per richiedere gli input dell'utente prima dell'esecuzione della query. Sono ampiamente utilizzati nella generazione di report basati su query che prendono l'intervallo di dati dagli utenti come input per il filtro condizionale e la visualizzazione dei dati. Le variabili di sostituzione sono precedute da un simbolo di e commerciale singola (&) per memorizzare temporaneamente i valori. Per esempio,

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM employees
WHERE LAST_NAME = &last_name
OR EMPLOYEE_ID = &EMPNO;

Quando viene eseguita la query SELECT di cui sopra, Oracle identifica la "&" come variabile di sostituzione. Chiede all'utente di inserire il valore per "last_name" e "EMPNO" come di seguito.

Enter value for last_name:
Enter value for empno:

Una volta che l'utente fornisce gli input a entrambe le variabili, i valori vengono sostituiti, la query viene verificata ed eseguita.

Punti da notare -

  • Se la variabile intende sostituire un carattere o un valore di data, il valore letterale deve essere racchiuso tra virgolette singole. Una tecnica utile è racchiudere la variabile di sostituzione e commerciale tra virgolette singole quando si tratta di valori di carattere e data.

  • Sia SQL Developer che SQL * Plus supportano le variabili di sostituzione ei comandi DEFINE / UNDEFINE. Sebbene SQL Developer o SQL * Plus non supportino i controlli di convalida (ad eccezione del tipo di dati) sull'input dell'utente.

  • È possibile utilizzare le variabili di sostituzione non solo nella clausola WHERE di un'istruzione SQL, ma anche come sostituzione di nomi di colonna, espressioni o testo.

Utilizzo della variabile di sostituzione doppia e commerciale

Quando la stessa variabile di sostituzione viene utilizzata in più di un punto, per evitare di reinserire nuovamente gli stessi dati, utilizziamo la sostituzione doppia e commerciale. In tali casi, il valore della variabile di sostituzione, una volta inserito, verrebbe sostituito in tutti gli istanti di utilizzo.

SELECT first_name, HIRE_DATE, SEPARATION_DATE
FROM employees
WHERE HIRE_DATE LIKE '%&DT%' AND SEPARATION_DATE '%&&DT%'

Notare che lo stesso valore di & DT viene sostituito due volte nella query precedente. Quindi, il suo valore una volta fornito dall'utente verrà sostituito in due punti.

I comandi DEFINE e VERIFY

L'impostazione della definizione delle variabili in una sessione è impostata dalla funzione DEFINE di SQL * Plus. Le variabili possono essere definite nella sessione, in modo da evitare l'arresto durante l'esecuzione della query. Oracle legge la stessa variabile ogni volta che si incontra in una query SQL. È in stato ON per impostazione predefinita. Con l'aiuto della clausola DEFINE, è possibile dichiarare una variabile nella riga di comando prima dell'esecuzione della query comeDEFINE variable=value;.

Il comando Verifica verifica la sostituzione precedente mostrata come istruzione VECCHIO e NUOVO. È OFF per impostazione predefinita e può essere impostato su ON utilizzando il comando SET.

SQL> SET DEFINE ON
SQL> SET VERIFY ON
SQL> DEFINE NAME = MARTIN'
SQL> SELECT first_name, SALARY 
FROM employees
WHERE first_name = '&NAME';
OLD   1: select first_name, sal from employee where first_name = '&first_name'
new   1: select first_name, sal from employee where first_name = 'MARTIN'

first_name     SALARY
-------        -------
MARTIN         5000