Ricerca…
introduzione
L'istruzione SELECT è al centro della maggior parte delle query SQL. Definisce quale set di risultati deve essere restituito dalla query e viene quasi sempre utilizzato insieme alla clausola FROM, che definisce quale parte del database deve essere interrogata.
Sintassi
SELEZIONA [DISTINCT] [column1] [, [column2] ...]
DA [tavolo]
[WHERE condition]
[GROUP BY [column1] [, [column2] ...][HAVING [column1] [, [column2] ...]
[ORDINA PER ASC | DESC]
Osservazioni
SELECT determina i dati delle colonne da restituire e in quale ordine FROM una determinata tabella (dato che corrispondono agli altri requisiti della tua query specificatamente - dove e avendo filtri e join).
SELECT Name, SerialNumber
FROM ArmyInfo
per esempio restituirà risultati dalle colonne Name
e Serial Number
, ma non dalla colonna chiamata Rank
SELECT *
FROM ArmyInfo
indica che tutte le colonne saranno restituite. Tuttavia, tieni presente che non è consigliabile selezionare SELECT *
poiché stai letteralmente restituendo tutte le colonne di un tavolo.
Utilizzando il carattere jolly per selezionare tutte le colonne in una query.
Considera un database con le seguenti due tabelle.
Tabella dei dipendenti:
Id | FName | LName | deptid |
---|---|---|---|
1 | Giacomo | fabbro | 3 |
2 | John | Johnson | 4 |
Tabella dei dipartimenti:
Id | Nome |
---|---|
1 | I saldi |
2 | Marketing |
3 | Finanza |
4 | IT |
Semplice affermazione di selezione
*
è il carattere jolly utilizzato per selezionare tutte le colonne disponibili in una tabella.
Quando viene utilizzato come un sostituto per i nomi di colonna espliciti, restituisce tutte le colonne in tutte le tabelle che una query sta selezionando FROM
. Questo effetto si applica a tutte le tabelle la query accede tramite le sue clausole JOIN
.
Considera la seguente query:
SELECT * FROM Employees
Restituirà tutti i campi di tutte le righe della tabella Employees
:
Id | FName | LName | deptid |
---|---|---|---|
1 | Giacomo | fabbro | 3 |
2 | John | Johnson | 4 |
Notazione a punti
Per selezionare tutti i valori da una tabella specifica, il carattere jolly può essere applicato alla tabella con notazione a punti .
Considera la seguente query:
SELECT
Employees.*,
Departments.Name
FROM
Employees
JOIN
Departments
ON Departments.Id = Employees.DeptId
Ciò restituirà un set di dati con tutti i campi nella tabella Employee
, seguito solo dal campo Name
nella tabella Departments
:
Id | FName | LName | deptid | Nome |
---|---|---|---|---|
1 | Giacomo | fabbro | 3 | Finanza |
2 | John | Johnson | 4 | IT |
Avvertenze contro l'uso
Si consiglia in genere che l'utilizzo di *
venga evitato nel codice di produzione laddove possibile, in quanto può causare una serie di potenziali problemi, tra cui:
- Eccesso di I / O, carico di rete, utilizzo della memoria e così via, a causa del fatto che il motore di database non legge i dati necessari e li trasmette al codice di front-end. Questo è particolarmente un problema in cui potrebbero esserci campi grandi come quelli usati per memorizzare note lunghe o file allegati.
- Ulteriore sovraccarico di I / O se il database deve eseguire lo spool dei risultati interni sul disco come parte dell'elaborazione per una query più complessa di
SELECT <columns> FROM <table>
. - Elaborazione extra (e / o anche più IO) se alcune delle colonne non necessarie sono:
- colonne calcolate nei database che li supportano
- in caso di selezione da una vista, colonne da una tabella / vista che altrimenti potrebbero essere ottimizzate da Query Optimiser
- Il potenziale di errori imprevisti se le colonne vengono aggiunte successivamente alle tabelle e alle viste che risultano in nomi di colonne ambigue. Ad esempio,
SELECT * FROM orders JOIN people ON people.id = orders.personid ORDER BY displayname
- se una colonna colonna denominatadisplayname
viene aggiunta alla tabella degli ordini per consentire agli utenti di dare ai loro ordini nomi significativi per riferimenti futuri, il nome della colonna verrà visualizzato due volte nell'output quindi la clausolaORDER BY
sarà ambigua e potrebbe causare errori ("nome colonna ambiguo" nelle recenti versioni di MS SQL Server) e, se non in questo esempio, il codice dell'applicazione potrebbe iniziare a visualizzare il nome dell'ordine in cui il nome della persona è inteso perché la nuova colonna è il primo di quel nome restituito e così via.
Quando puoi usare *
, tenendo presente l'avvertimento sopra?
Mentre è meglio evitare nel codice di produzione, l'uso di *
va bene come una scorciatoia quando si eseguono query manuali sul database per indagini o lavori di prototipazione.
A volte le decisioni di progettazione nella tua applicazione rendono inevitabile (in tali circostanze, preferisci le tablealias.*
solo su *
dove possibile).
Quando si utilizzano EXISTS
, come SELECT A.col1, A.Col2 FROM A WHERE EXISTS (SELECT * FROM B where A.ID = B.A_ID)
, non si restituiscono dati da B. Pertanto un join non è necessario e il motore non riconosce valori di B da restituire, quindi nessun risultato di prestazioni per l'utilizzo di *
. Allo stesso modo, COUNT(*)
va bene, in quanto non restituisce alcuna colonna, quindi è sufficiente leggere ed elaborare quelli utilizzati per scopi di filtraggio.
Selezione con condizione
La sintassi di base della clausola SELECT with WHERE è:
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
La [condizione] può essere qualsiasi espressione SQL, specificata mediante confronto o operatori logici come>, <, =, <>,> =, <=, LIKE, NOT, IN, BETWEEN ecc.
L'istruzione seguente restituisce tutte le colonne dalla tabella 'Auto' in cui la colonna dello stato è 'PRONTA':
SELECT * FROM Cars WHERE status = 'READY'
Guarda WHERE e HAVING per altri esempi.
Seleziona singole colonne
SELECT
PhoneNumber,
Email,
PreferredContact
FROM Customers
Questa dichiarazione restituirà le colonne PhoneNumber
, Email
e PreferredContact
da tutte le righe della tabella Customers
. Anche le colonne verranno restituite nella sequenza in cui appaiono nella clausola SELECT
.
Il risultato sarà:
Numero di telefono | PreferredContact | |
---|---|---|
3347927472 | [email protected] | TELEFONO |
2137921892 | [email protected] | |
NULLO | [email protected] |
Se più tabelle vengono unite, è possibile selezionare le colonne da tabelle specifiche specificando il nome della tabella prima del nome della colonna: [table_name].[column_name]
SELECT
Customers.PhoneNumber,
Customers.Email,
Customers.PreferredContact,
Orders.Id AS OrderId
FROM
Customers
LEFT JOIN
Orders ON Orders.CustomerId = Customers.Id
* AS OrderId
significa che il campo Id
della tabella Orders
verrà restituito come una colonna denominata OrderId
. Vedi selezionare con l'alias della colonna per ulteriori informazioni.
Per evitare l'utilizzo di nomi di tabelle lunghe, è possibile utilizzare alias di tabella. Ciò riduce il dolore di scrivere nomi di tabelle lunghe per ogni campo selezionato nei join. Se stai eseguendo un self join (un join tra due istanze della stessa tabella), devi utilizzare gli alias di tabella per distinguere le tue tabelle. Possiamo scrivere un alias di tabella come Customers c
o Customers AS c
. Qui c
funziona come alias per i Customers
e possiamo selezionare diciamo Email
come questa: c.Email
.
SELECT
c.PhoneNumber,
c.Email,
c.PreferredContact,
o.Id AS OrderId
FROM
Customers c
LEFT JOIN
Orders o ON o.CustomerId = c.Id
SELEZIONARE Usando Colonna Alias
Gli alias di colonne vengono utilizzati principalmente per abbreviare il codice e rendere più leggibili i nomi di colonna.
Il codice si accorcia quando i nomi delle tabelle lunghi e l'identificazione non necessaria delle colonne (ad esempio, possono esserci 2 ID nella tabella, ma solo uno è utilizzato nell'istruzione) possono essere evitati. Insieme agli alias di tabella, questo consente di utilizzare nomi descrittivi più lunghi nella struttura del database mantenendo al contempo le query su quella struttura concisa.
Inoltre, a volte sono necessari , ad esempio nelle viste, per denominare i risultati calcolati.
Tutte le versioni di SQL
Gli alias possono essere creati in tutte le versioni di SQL usando virgolette doppie ( "
).
SELECT
FName AS "First Name",
MName AS "Middle Name",
LName AS "Last Name"
FROM Employees
Diverse versioni di SQL
È possibile utilizzare virgolette singole ( '
), doppie virgolette ( "
) e parentesi quadre ( []
) per creare un alias in Microsoft SQL Server.
SELECT
FName AS "First Name",
MName AS 'Middle Name',
LName AS [Last Name]
FROM Employees
Entrambi si tradurranno in:
Nome di battesimo | Secondo nome | Cognome |
---|---|---|
Giacomo | John | fabbro |
John | Giacomo | Johnson |
Michael | Marcus | Williams |
Questa istruzione restituirà le colonne FName
e LName
con un nome specifico (un alias). Ciò viene ottenuto utilizzando l'operatore AS
seguito dall'alias o semplicemente scrivendo alias direttamente dopo il nome della colonna. Ciò significa che la seguente query ha lo stesso risultato di cui sopra.
SELECT
FName "First Name",
MName "Middle Name",
LName "Last Name"
FROM Employees
Nome di battesimo | Secondo nome | Cognome |
---|---|---|
Giacomo | John | fabbro |
John | Giacomo | Johnson |
Michael | Marcus | Williams |
Tuttavia, la versione esplicita (cioè, utilizzando l'operatore AS
) è più leggibile.
Se l'alias ha una singola parola che non è una parola riservata, possiamo scriverla senza virgolette singole, virgolette doppie o parentesi:
SELECT
FName AS FirstName,
LName AS LastName
FROM Employees
Nome di battesimo | Cognome |
---|---|
Giacomo | fabbro |
John | Johnson |
Michael | Williams |
Un'altra variante disponibile in MS SQL Server è <alias> = <column-or-calculation>
, ad esempio:
SELECT FullName = FirstName + ' ' + LastName,
Addr1 = FullStreetAddress,
Addr2 = TownName
FROM CustomerDetails
che è equivalente a:
SELECT FirstName + ' ' + LastName As FullName
FullStreetAddress As Addr1,
TownName As Addr2
FROM CustomerDetails
Entrambi si tradurranno in:
Nome e cognome | Addr1 | Addr2 |
---|---|---|
James Smith | 123 AnyStreet | Townville |
John Johnson | 668 MyRoad | Anytown |
Michael Williams | 999 High End Dr | Williamsburgh |
Alcuni trovano usando =
invece di As
più facile da leggere, sebbene molti raccomandino contro questo formato, principalmente perché non è standard quindi non ampiamente supportato da tutti i database. Potrebbe causare confusione con altri usi del carattere =
.
Tutte le versioni di SQL
Inoltre, se è necessario utilizzare parole riservate, è possibile utilizzare parentesi o virgolette per evitare:
SELECT
FName as "SELECT",
MName as "FROM",
LName as "WHERE"
FROM Employees
Diverse versioni di SQL
Allo stesso modo, puoi sfuggire le parole chiave in MSSQL con tutti i diversi approcci:
SELECT
FName AS "SELECT",
MName AS 'FROM',
LName AS [WHERE]
FROM Employees
SELEZIONARE | A PARTIRE DAL | DOVE |
---|---|---|
Giacomo | John | fabbro |
John | Giacomo | Johnson |
Michael | Marcus | Williams |
Inoltre, un alias di colonna può essere utilizzato una qualsiasi delle clausole finali della stessa query, ad esempio un ORDER BY
:
SELECT
FName AS FirstName,
LName AS LastName
FROM
Employees
ORDER BY
LastName DESC
Tuttavia, non si può usare
SELECT
FName AS SELECT,
LName AS FROM
FROM
Employees
ORDER BY
LastName DESC
Per creare un alias da queste parole riservate ( SELECT
e FROM
).
Ciò causerà numerosi errori durante l'esecuzione.
Selezione con risultati ordinati
SELECT * FROM Employees ORDER BY LName
Questa dichiarazione restituirà tutte le colonne dalla tabella Employees
.
Id | FName | LName | Numero di telefono |
---|---|---|---|
2 | John | Johnson | 2468101214 |
1 | Giacomo | fabbro | 1234567890 |
3 | Michael | Williams | 1357911131 |
SELECT * FROM Employees ORDER BY LName DESC
O
SELECT * FROM Employees ORDER BY LName ASC
Questa affermazione cambia la direzione di smistamento.
Si può anche specificare più colonne di ordinamento. Per esempio:
SELECT * FROM Employees ORDER BY LName ASC, FName ASC
Questo esempio LName
i risultati prima per LName
e poi, per i record che hanno lo stesso LName
, per FName
. Questo ti darà un risultato simile a quello che troveresti in una rubrica telefonica.
Per salvare la ridigitazione del nome della colonna nella clausola ORDER BY
, è possibile utilizzare invece il numero della colonna. Si noti che i numeri delle colonne iniziano da 1.
SELECT Id, FName, LName, PhoneNumber FROM Employees ORDER BY 3
È inoltre possibile incorporare un'istruzione CASE
nella clausola ORDER BY
.
SELECT Id, FName, LName, PhoneNumber FROM Employees ORDER BY CASE WHEN LName='Jones` THEN 0 ELSE 1 END ASC
Questo LName
i risultati per avere tutti i record con il LName
di "Jones" in alto.
Seleziona le colonne che prendono il nome da parole chiave riservate
Quando un nome di colonna corrisponde a una parola chiave riservata, SQL standard richiede che lo si racchiuda tra virgolette doppie:
SELECT
"ORDER",
ID
FROM ORDERS
Si noti che rende il nome della colonna case-sensitive.
Alcuni DBMS hanno modi proprietari di elencare i nomi. Ad esempio, SQL Server utilizza parentesi quadre per questo scopo:
SELECT
[Order],
ID
FROM ORDERS
mentre MySQL (e MariaDB) utilizzano di default i backtick:
SELECT
`Order`,
id
FROM orders
Selezione del numero specificato di record
Lo standard SQL 2008 definisce la clausola FETCH FIRST
per limitare il numero di record restituiti.
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
FETCH FIRST 10 ROWS ONLY
Questo standard è supportato solo nelle versioni recenti di alcuni RDMS. La sintassi non standard specifica del fornitore viene fornita in altri sistemi. Progress OpenEdge 11.x supporta anche la sintassi FETCH FIRST <n> ROWS ONLY
.
Inoltre, OFFSET <m> ROWS
prima di FETCH FIRST <n> ROWS ONLY
consente di saltare le righe prima di recuperare le righe.
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
OFFSET 5 ROWS
FETCH FIRST 10 ROWS ONLY
La seguente query è supportata in SQL Server e MS Access:
SELECT TOP 10 Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
Per fare lo stesso in MySQL o PostgreSQL, è necessario utilizzare la parola chiave LIMIT
:
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
LIMIT 10
In Oracle lo stesso può essere fatto con ROWNUM
:
SELECT Id, ProductName, UnitPrice, Package
FROM Product
WHERE ROWNUM <= 10
ORDER BY UnitPrice DESC
Risultati : 10 record.
Id ProductName UnitPrice Package
38 Côte de Blaye 263.50 12 - 75 cl bottles
29 Thüringer Rostbratwurst 123.79 50 bags x 30 sausgs.
9 Mishi Kobe Niku 97.00 18 - 500 g pkgs.
20 Sir Rodney's Marmalade 81.00 30 gift boxes
18 Carnarvon Tigers 62.50 16 kg pkg.
59 Raclette Courdavault 55.00 5 kg pkg.
51 Manjimup Dried Apples 53.00 50 - 300 g pkgs.
62 Tarte au sucre 49.30 48 pies
43 Ipoh Coffee 46.00 16 - 500 g tins
28 Rössle Sauerkraut 45.60 25 - 825 g cans
Sfumature del venditore:
È importante notare che il TOP
in Microsoft SQL opera dopo la clausola WHERE
e restituirà il numero specificato di risultati se esistono in qualsiasi punto della tabella, mentre ROWNUM
funziona come parte della clausola WHERE
, quindi se altre condizioni non esistono nel numero di righe specificato all'inizio della tabella, otterrai zero risultati quando potrebbero essere trovati altri.
Selezione con alias di tabella
SELECT e.Fname, e.LName
FROM Employees e
Alla tabella Dipendenti viene assegnato l'alias 'e' direttamente dopo il nome della tabella. Ciò aiuta a rimuovere l'ambiguità in scenari in cui più tabelle hanno lo stesso nome di campo e devi essere specifico su quale tabella vuoi restituire i dati.
SELECT e.Fname, e.LName, m.Fname AS ManagerFirstName
FROM Employees e
JOIN Managers m ON e.ManagerId = m.Id
Si noti che una volta definito un alias, non è più possibile utilizzare il nome della tabella canonica. vale a dire,
SELECT e.Fname, Employees.LName, m.Fname AS ManagerFirstName
FROM Employees e
JOIN Managers m ON e.ManagerId = m.Id
genererebbe un errore
Vale la pena notare che gli alias di tabelle - più formalmente "variabili di intervallo" - sono stati introdotti nel linguaggio SQL per risolvere il problema delle colonne duplicate causate da INNER JOIN
. Lo standard SQL del 1992 ha corretto questa precedente imperfezione progettuale introducendo NATURAL JOIN
(implementato in MySQL, PostgreSQL e Oracle ma non ancora in SQL Server), il cui risultato non ha mai nomi di colonne duplicati. L'esempio sopra è interessante in quanto le tabelle sono unite su colonne con nomi diversi ( Id
e ManagerId
) ma non dovrebbero essere unite sulle colonne con lo stesso nome ( LName
, FName
), richiedendo la ridenominazione delle colonne da eseguire prima del join:
SELECT Fname, LName, ManagerFirstName
FROM Employees
NATURAL JOIN
( SELECT Id AS ManagerId, Fname AS ManagerFirstName
FROM Managers ) m;
Si noti che sebbene una variabile alias / intervallo debba essere dichiarata per la tabella dervied (altrimenti SQL genererà un errore), non ha mai senso usarla effettivamente nella query.
Seleziona le righe da più tabelle
SELECT *
FROM
table1,
table2
SELECT
table1.column1,
table1.column2,
table2.column1
FROM
table1,
table2
Questo è chiamato prodotto incrociato in SQL è uguale al prodotto incrociato in serie
Queste istruzioni restituiscono le colonne selezionate da più tabelle in una query.
Non esiste una relazione specifica tra le colonne restituite da ciascuna tabella.
Selezione con le funzioni di aggregazione
Media
La funzione di aggregazioneAVG()
restituirà la media dei valori selezionati. SELECT AVG(Salary) FROM Employees
Le funzioni aggregate possono anche essere combinate con la clausola where. SELECT AVG(Salary) FROM Employees where DepartmentId = 1
Le funzioni aggregate possono anche essere combinate con la clausola group by. Se il dipendente è suddiviso in più reparti e vogliamo trovare uno stipendio medio per ogni reparto, possiamo utilizzare la seguente query.
SELECT AVG(Salary) FROM Employees GROUP BY DepartmentId
Minimo
La funzione di aggregazioneMIN()
restituirà il minimo dei valori selezionati. SELECT MIN(Salary) FROM Employees
Massimo
La funzione di aggregazioneMAX()
restituirà il massimo dei valori selezionati. SELECT MAX(Salary) FROM Employees
Contare
La funzione di aggregazioneCOUNT()
restituirà il conteggio dei valori selezionati. SELECT Count(*) FROM Employees
Può anche essere combinato con le condizioni in cui ottenere il conteggio delle righe che soddisfano condizioni specifiche. SELECT Count(*) FROM Employees where ManagerId IS NOT NULL
È anche possibile specificare colonne specifiche per ottenere il numero di valori nella colonna. Si noti che i valori NULL
non vengono conteggiati. Select Count(ManagerId) from Employees
Il conteggio può anche essere combinato con la parola chiave distinta per un conteggio distinto. Select Count(DISTINCT DepartmentId) from Employees
Somma
La funzione di aggregazioneSUM()
restituisce la somma dei valori selezionati per tutte le righe. SELECT SUM(Salary) FROM Employees
Selezione con null
SELECT Name FROM Customers WHERE PhoneNumber IS NULL
La selezione con valori null richiede una sintassi diversa. Non usare =
, utilizzare IS NULL
o IS NOT NULL
.
Selezione con CASE
Quando i risultati devono avere una logica applicata "al volo", è possibile utilizzare l'istruzione CASE per implementarla.
SELECT CASE WHEN Col1 < 50 THEN 'under' ELSE 'over' END threshold
FROM TableName
anche può essere incatenato
SELECT
CASE WHEN Col1 < 50 THEN 'under'
WHEN Col1 > 50 AND Col1 <100 THEN 'between'
ELSE 'over'
END threshold
FROM TableName
uno può anche avere CASE
in un'altra istruzione CASE
SELECT
CASE WHEN Col1 < 50 THEN 'under'
ELSE
CASE WHEN Col1 > 50 AND Col1 <100 THEN Col1
ELSE 'over' END
END threshold
FROM TableName
Selezionare senza bloccare la tabella
A volte quando le tabelle vengono utilizzate principalmente (o solo) per le letture, l'indicizzazione non aiuta più e ogni piccolo bit conta, si potrebbe usare selects senza LOCK per migliorare le prestazioni.
server SQL
SELECT * FROM TableName WITH (nolock)
MySQL
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TableName;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Oracolo
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TableName;
DB2
SELECT * FROM TableName WITH UR;
dove UR
sta per "lettura non salvata".
Se utilizzato su una tabella con modifiche ai record in corso potrebbe avere risultati imprevedibili.
Seleziona distinto (solo valori unici)
SELECT DISTINCT ContinentCode
FROM Countries;
Questa query restituirà tutti i valori DISTINCT
(unici, diversi) dalla colonna ContinentCode
dalla tabella Countries
ContinentCode |
---|
OC |
Unione Europea |
COME |
N / A |
AF |
Selezionare con condizione di più valori dalla colonna
SELECT * FROM Cars WHERE status IN ( 'Waiting', 'Working' )
Questo è semanticamente equivalente a
SELECT * FROM Cars WHERE ( status = 'Waiting' OR status = 'Working' )
cioè il value IN ( <value list> )
è una scorciatoia per disgiunzione ( OR
logico).
Ottieni risultati aggregati per i gruppi di righe
Conteggio delle righe in base a un valore di colonna specifico:
SELECT category, COUNT(*) AS item_count
FROM item
GROUP BY category;
Ottenere un reddito medio per dipartimento:
SELECT department, AVG(income)
FROM employees
GROUP BY department;
L'importante è selezionare solo le colonne specificate nella clausola GROUP BY
o utilizzate con funzioni di aggregazione .
La clausola WHERE
può essere utilizzata anche con GROUP BY
, ma WHERE
filtra i record prima di ogni raggruppamento:
SELECT department, AVG(income)
FROM employees
WHERE department <> 'ACCOUNTING'
GROUP BY department;
Se è necessario filtrare i risultati dopo aver eseguito il raggruppamento, ad esempio per visualizzare solo i dipartimenti il cui reddito medio è superiore a 1000, è necessario utilizzare la clausola HAVING
:
SELECT department, AVG(income)
FROM employees
WHERE department <> 'ACCOUNTING'
GROUP BY department
HAVING avg(income) > 1000;
Selezione con più di 1 condizione.
La parola chiave AND
viene utilizzata per aggiungere più condizioni alla query.
Nome | Età | Genere |
---|---|---|
Sam | 18 | M |
John | 21 | M |
peso | 22 | M |
Maria | 23 | F |
SELECT name FROM persons WHERE gender = 'M' AND age > 20;
Questo ritornerà:
Nome |
---|
John |
peso |
usando la parola chiave OR
SELECT name FROM persons WHERE gender = 'M' OR age < 20;
Questo ritornerà:
nome |
---|
Sam |
John |
peso |
Queste parole chiave possono essere combinate per consentire combinazioni di criteri più complessi:
SELECT name
FROM persons
WHERE (gender = 'M' AND age < 20)
OR (gender = 'F' AND age > 20);
Questo ritornerà:
nome |
---|
Sam |
Maria |