Ricerca…


Sintassi

  • SELEZIONA nome_colonna
    FROM nome_tabella
    WHERE nome_operatore valore dell'operatore
  • SELECT column_name, aggregate_function (column_name)
    FROM nome_tabella
    GROUP BY nome_colonna
    Valore operatore HAVING aggregate_function (column_name)

La clausola WHERE restituisce solo le righe che corrispondono ai suoi criteri

Steam ha un gioco sotto la sezione $ 10 della loro pagina del negozio. Da qualche parte nel profondo dei loro sistemi, c'è probabilmente una query che assomiglia a qualcosa:

SELECT * 
FROM Items 
WHERE Price < 10

Utilizzare IN per restituire righe con un valore contenuto in un elenco

Questo esempio utilizza la tabella Car dai database di esempio.

SELECT *
FROM Cars
WHERE TotalCost IN (100, 200, 300)

Questa query restituirà Car # 2 che costa 200 e Car # 3 che costa 100. Si noti che questo è equivalente all'utilizzo di più clausole con OR , ad esempio:

SELECT *
FROM Cars
WHERE TotalCost = 100 OR TotalCost = 200 OR TotalCost = 300

Usa LIKE per trovare stringhe e sottostringhe corrispondenti

Vedi la documentazione completa sull'operatore LIKE .

Questo esempio utilizza la tabella Impiegati dai database di esempio.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

Questa query restituirà solo Employee # 1 il cui nome di battesimo corrisponde esattamente a "John".

SELECT *
FROM Employees
WHERE FName like 'John%'

L'aggiunta di % ti consente di cercare una sottostringa:

  • John% - restituirà qualsiasi Dipendente il cui nome inizia con "John", seguito da qualsiasi quantità di caratteri
  • %John - restituirà qualsiasi Dipendente il cui nome termina con "John", preceduto da qualsiasi quantità di caratteri
  • %John% - restituirà qualsiasi Dipendente il cui nome contenga "John" in qualsiasi punto all'interno del valore

In questo caso, la query restituirà Employee # 2 il cui nome è 'John' così come Employee # 4 il cui nome è 'Johnathon'.

Clausola WHERE con valori NULL / NOT NULL

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Questa istruzione restituirà tutti i record Employee in cui il valore della colonna ManagerId è NULL .

Il risultato sarà:

Id    FName    LName    PhoneNumber    ManagerId    DepartmentId
1     James    Smith    1234567890     NULL         1

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

Questa istruzione restituirà tutti i record Employee in cui il valore di ManagerId non è NULL .

Il risultato sarà:

Id    FName       LName     PhoneNumber    ManagerId    DepartmentId
2     John        Johnson   2468101214     1            1
3     Michael     Williams  1357911131     1            2
4     Johnathon   Smith     1212121212     2            1

Nota: la stessa query non restituirà risultati se si modifica la clausola WHERE ManagerId = NULL in WHERE ManagerId = NULL o WHERE ManagerId <> NULL .

Utilizzare HAVING con le funzioni aggregate

A differenza della clausola WHERE , HAVING può essere utilizzato con funzioni aggregate.

Una funzione aggregata è una funzione in cui i valori di più righe sono raggruppati come input su determinati criteri per formare un singolo valore di significato o misura più significativo ( Wikipedia ).

Le funzioni di aggregazione comuni includono COUNT() , SUM() , MIN() e MAX() .


Questo esempio utilizza la tabella Car dai database di esempio.

SELECT CustomerId, COUNT(Id) AS [Number of Cars]
FROM Cars
GROUP BY CustomerId
HAVING COUNT(Id) > 1

Questa query restituirà il conteggio CustomerId e Number of Cars di qualsiasi cliente che abbia più di un'auto. In questo caso, l'unico cliente che ha più di un'auto è il Cliente n. 1.

I risultati saranno simili a:

Identificativo del cliente Numero di auto
1 2

Utilizzare TRA per filtrare i risultati

Negli esempi seguenti vengono utilizzati i database di esempio Item Sales and Customers .

Nota: l'operatore BETWEEN è incluso.

Utilizzando l'operatore BETWEEN con i numeri:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

Questa query restituirà tutti i record ItemSales che hanno una quantità maggiore o uguale a 10 e minore o uguale a 17. I risultati saranno simili a:

Id Data di vendita Numero identificativo dell'oggetto Quantità Prezzo
1 2013/07/01 100 10 34.5
4 2013/07/23 100 15 34.5
5 2013/07/24 145 10 34.5

Utilizzo dell'operatore BETWEEN con i valori di data:

SELECT * From ItemSales
WHERE SaleDate BETWEEN '2013-07-11' AND '2013-05-24'

Questa query restituirà tutti i record ItemSales con un SaleDate maggiore o uguale all'11 luglio 2013 e inferiore o uguale al 24 maggio 2013.

Id Data di vendita Numero identificativo dell'oggetto Quantità Prezzo
3 2013/07/11 100 20 34.5
4 2013/07/23 100 15 34.5
5 2013/07/24 145 10 34.5

Quando si confrontano i valori datetime anziché le date, potrebbe essere necessario convertire i valori datetime in valori data o aggiungere o sottrarre 24 ore per ottenere i risultati corretti.


Utilizzo dell'operatore BETWEEN con valori di testo:

SELECT Id, FName, LName FROM Customers
WHERE LName BETWEEN 'D' AND 'L';

Esempio dal vivo: violino SQL

Questa query restituirà tutti i clienti il ​​cui nome cade alfabeticamente tra le lettere "D" e "L". In questo caso, i clienti n. 1 e n. 3 verranno restituiti. Il cliente n. 2, il cui nome inizia con una "M" non sarà incluso.

Id FName LName
1 William Jones
3 Richard Davis

Uguaglianza

SELECT * FROM Employees 

Questa dichiarazione restituirà tutte le righe dalla tabella Employees .

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

L'utilizzo di un WHERE alla fine SELECT consente di limitare le righe restituite a una condizione. In questo caso, dove c'è una corrispondenza esatta usando il segno = :

SELECT * FROM Employees WHERE DepartmentId = 1

Restituirà solo le righe in cui DepartmentId è uguale a 1 :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

AND e OR

Puoi anche combinare più operatori per creare condizioni WHERE più complesse. Gli esempi seguenti utilizzano la tabella Employees :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

E

SELECT * FROM Employees WHERE DepartmentId = 1 AND ManagerId = 1

Tornerà:

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002

O

SELECT * FROM Employees WHERE DepartmentId = 2 OR ManagerId = 2

Tornerà:

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Utilizzare HAVING per verificare più condizioni in un gruppo

Tabella degli ordini

Identificativo del cliente Codice prodotto Quantità Prezzo
1 2 5 100
1 3 2 200
1 4 1 500
2 1 4 50
3 5 6 700

Per verificare i clienti che hanno ordinato entrambi - ProductID 2 e 3, è possibile utilizzare HAVING

 select customerId
 from orders
 where productID in (2,3)
 group by customerId
 having count(distinct productID) = 2

Valore di ritorno:

identificativo del cliente
1

La query seleziona solo i record con ID prodotto nelle domande e con la clausola HAVING controlla se i gruppi hanno 2 ID prodotto e non solo uno.

Un'altra possibilità sarebbe

 select customerId
 from orders
 group by customerId
 having sum(case when productID = 2 then 1 else 0 end) > 0
    and sum(case when productID = 3 then 1 else 0 end) > 0

Questa query seleziona solo i gruppi che hanno almeno un record con ID prodotto 2 e almeno uno con ID prodotto 3.

Dove ESISTE

Selezionerà i record in TableName con i record corrispondenti in TableName1 .

SELECT * FROM TableName t WHERE EXISTS (
    SELECT 1 FROM TableName1 t1 where t.Id = t1.Id)


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow