Recherche…
Introduction
L'instruction SELECT est au cœur de la plupart des requêtes SQL. Il définit quel jeu de résultats doit être renvoyé par la requête et est presque toujours utilisé conjointement avec la clause FROM, qui définit les parties de la base de données à interroger.
Syntaxe
SELECT [DISTINCT] [colonne1] [, [colonne2] ...]
DE [table]
[OERE condition]
[GROUP BY [colonne1] [, [colonne2] ...][HAVING [column1] [, [column2] ...]
[COMMANDE PAR ASC | DESC]
Remarques
SELECT détermine les données des colonnes à renvoyer et l'ordre dans lequel elles proviennent d'une table donnée (étant donné qu'elles correspondent spécifiquement aux autres exigences de votre requête - où et avec les filtres et les jointures).
SELECT Name, SerialNumber
FROM ArmyInfo
ne renverra que les résultats des colonnes Name
et Serial Number
, mais pas de la colonne intitulée Rank
, par exemple
SELECT *
FROM ArmyInfo
indique que toutes les colonnes seront renvoyées. Cependant, veuillez noter que SELECT *
est une mauvaise pratique car vous retournez littéralement toutes les colonnes d'une table.
Utiliser le caractère générique pour sélectionner toutes les colonnes d'une requête.
Considérons une base de données avec les deux tableaux suivants.
Table d'employés:
Id | FName | LName | DeptId |
---|---|---|---|
1 | James | Forgeron | 3 |
2 | John | Johnson | 4 |
Table des départements:
Id | prénom |
---|---|
1 | Ventes |
2 | Commercialisation |
3 | La finance |
4 | IL |
Déclaration de sélection simple
*
est le caractère générique utilisé pour sélectionner toutes les colonnes disponibles dans une table.
Utilisé comme substitut pour les noms de colonne explicites, il renvoie toutes les colonnes de toutes les tables qu'une requête sélectionne FROM
. Cet effet s'applique à toutes les tables auxquelles la requête accède via ses clauses JOIN
.
Considérez la requête suivante:
SELECT * FROM Employees
Il retournera tous les champs de toutes les lignes de la table Employees
:
Id | FName | LName | DeptId |
---|---|---|---|
1 | James | Forgeron | 3 |
2 | John | Johnson | 4 |
Notation par points
Pour sélectionner toutes les valeurs d'une table spécifique, le caractère générique peut être appliqué à la table avec une notation par points .
Considérez la requête suivante:
SELECT
Employees.*,
Departments.Name
FROM
Employees
JOIN
Departments
ON Departments.Id = Employees.DeptId
Cela renverra un ensemble de données avec tous les champs de la table Employee
, suivi uniquement du champ Name
dans la table Departments
:
Id | FName | LName | DeptId | prénom |
---|---|---|---|---|
1 | James | Forgeron | 3 | La finance |
2 | John | Johnson | 4 | IL |
Avertissements contre l'utilisation
Il est généralement conseillé d’utiliser *
si possible dans le code de production, car cela peut causer un certain nombre de problèmes potentiels, notamment:
- Excès d'E / S, charge du réseau, utilisation de la mémoire, etc., car le moteur de base de données lit les données inutiles et les transmet au code frontal. Ceci est particulièrement préoccupant lorsque de grands champs peuvent être utilisés, tels que ceux utilisés pour stocker de longues notes ou des fichiers joints.
- Le surplus d'E / S se charge si la base de données doit spouler les résultats internes sur le disque dans le cadre du traitement d'une requête plus complexe que
SELECT <columns> FROM <table>
. - Traitement supplémentaire (et / ou même plus IO) si certaines des colonnes inutiles sont:
- colonnes calculées dans les bases de données qui les supportent
- dans le cas d'une sélection dans une vue, les colonnes d'une table / vue que l'optimiseur de requête pourrait sinon optimiser
- Potentiel d'erreurs inattendues si des colonnes sont ajoutées aux tables et aux vues ultérieurement, ce qui entraîne des noms de colonnes ambigus. Par exemple
SELECT * FROM orders JOIN people ON people.id = orders.personid ORDER BY displayname
- si une colonne appeléedisplayname
est ajoutée à la table des commandes pour permettre aux utilisateurs de donner des noms significatifs à leurs commandes pour référence ultérieure, le nom de la colonne apparaîtra. deux fois dans la sortie de sorte que la clauseORDER BY
soit ambiguë, ce qui peut provoquer des erreurs ("nom de colonne ambigu" dans les versions récentes de MS SQL Server) et si ce n'est pas le cas, le code de l'application prévu parce que la nouvelle colonne est le premier de ce nom renvoyé, et ainsi de suite.
Quand pouvez-vous utiliser *
, en tenant compte de l'avertissement ci-dessus?
Bien qu’il soit préférable de l’éviter dans le code de production, l’utilisation de *
convient parfaitement pour effectuer des requêtes manuelles sur la base de données pour des travaux d’investigation ou de prototypage.
Parfois, les décisions de conception dans votre application le rendent inévitable (dans de telles circonstances, préférez les tablealias.*
Plus que *
si possible).
Lorsque vous utilisez EXISTS
, tel que SELECT A.col1, A.Col2 FROM A WHERE EXISTS (SELECT * FROM B where A.ID = B.A_ID)
, nous ne SELECT A.col1, A.Col2 FROM A WHERE EXISTS (SELECT * FROM B where A.ID = B.A_ID)
aucune donnée de B. Ainsi, une jointure est inutile et le moteur sait qu'aucune valeur de B ne doit être retournée, donc pas de performance pour l'utilisation de *
. De même, COUNT(*)
est correct car il ne renvoie pas non plus de colonnes, il suffit donc de lire et de traiter celles qui sont utilisées à des fins de filtrage.
Sélection avec condition
La syntaxe de base de SELECT avec la clause WHERE est la suivante:
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
La [condition] peut être toute expression SQL, spécifiée en utilisant des opérateurs de comparaison ou des opérateurs logiques tels que>, <, =, <>,> =, <=, LIKE, NOT, IN, BETWEEN etc.
L'instruction suivante renvoie toutes les colonnes de la table 'Cars' où la colonne status est 'READY':
SELECT * FROM Cars WHERE status = 'READY'
Voir WHERE et HAVING pour plus d'exemples.
Sélectionner des colonnes individuelles
SELECT
PhoneNumber,
Email,
PreferredContact
FROM Customers
Cette instruction renvoie les colonnes PhoneNumber
, Email
et PreferredContact
de toutes les lignes de la table Customers
. Les colonnes seront également renvoyées dans l'ordre dans lequel elles apparaissent dans la clause SELECT
.
Le résultat sera:
Numéro de téléphone | Contact préféré | |
---|---|---|
3347927472 | [email protected] | TÉLÉPHONE |
2137921892 | [email protected] | |
NUL | [email protected] |
Si plusieurs tables sont jointes, vous pouvez sélectionner des colonnes à partir de tables spécifiques en spécifiant le nom de la table avant le nom de la colonne: [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
signifie que le champ Id
de la table Orders
sera renvoyé sous la forme d'une colonne nommée OrderId
. Voir la sélection avec l'alias de colonne pour plus d'informations.
Pour éviter d'utiliser des noms de table longs, vous pouvez utiliser des alias de table. Cela atténue la difficulté d'écrire des noms de table longs pour chaque champ que vous sélectionnez dans les jointures. Si vous effectuez une auto-jointure (une jointure entre deux instances de la même table), vous devez utiliser des alias de table pour distinguer vos tables. Nous pouvons écrire un alias de table comme Customers c
ou Customers AS c
. Ici, c
fonctionne comme un alias pour les Customers
et nous pouvons sélectionner, par exemple, Email
comme ceci: 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
SELECT utilisant des alias de colonne
Les alias de colonne sont principalement utilisés pour raccourcir le code et rendre les noms de colonne plus lisibles.
Le code devient plus court que les noms de table longs et l'identification inutile des colonnes (par exemple, il peut y avoir 2 ID dans la table, mais une seule est utilisée dans l'instruction) . En plus des alias de table, cela vous permet d'utiliser des noms descriptifs plus longs dans la structure de votre base de données tout en conservant des requêtes concises sur cette structure.
En outre, ils sont parfois nécessaires , par exemple dans les vues, pour nommer les sorties calculées.
Toutes les versions de SQL
Les alias peuvent être créés dans toutes les versions de SQL en utilisant des guillemets ( "
).
SELECT
FName AS "First Name",
MName AS "Middle Name",
LName AS "Last Name"
FROM Employees
Différentes versions de SQL
Vous pouvez utiliser des guillemets simples ( '
), des guillemets doubles ( "
) et des crochets ( []
) pour créer un alias dans Microsoft SQL Server.
SELECT
FName AS "First Name",
MName AS 'Middle Name',
LName AS [Last Name]
FROM Employees
Les deux résulteront en:
Prénom | Deuxième nom | Nom de famille |
---|---|---|
James | John | Forgeron |
John | James | Johnson |
Michael | Marcus | Williams |
Cette instruction LName
colonnes FName
et LName
avec un nom donné (un alias). Ceci est réalisé en utilisant l'opérateur AS
suivi de l'alias, ou en écrivant simplement un alias directement après le nom de la colonne. Cela signifie que la requête suivante a le même résultat que ci-dessus.
SELECT
FName "First Name",
MName "Middle Name",
LName "Last Name"
FROM Employees
Prénom | Deuxième nom | Nom de famille |
---|---|---|
James | John | Forgeron |
John | James | Johnson |
Michael | Marcus | Williams |
Cependant, la version explicite (c.-à-d., En utilisant l'opérateur AS
) est plus lisible.
Si l'alias a un seul mot qui n'est pas un mot réservé, nous pouvons l'écrire sans guillemets simples, guillemets ou crochets:
SELECT
FName AS FirstName,
LName AS LastName
FROM Employees
Prénom | Nom de famille |
---|---|
James | Forgeron |
John | Johnson |
Michael | Williams |
Une autre variante disponible dans MS SQL Server, entre autres, est <alias> = <column-or-calculation>
, par exemple:
SELECT FullName = FirstName + ' ' + LastName,
Addr1 = FullStreetAddress,
Addr2 = TownName
FROM CustomerDetails
ce qui équivaut à:
SELECT FirstName + ' ' + LastName As FullName
FullStreetAddress As Addr1,
TownName As Addr2
FROM CustomerDetails
Les deux résulteront en:
Nom complet | Addr1 | Addr2 |
---|---|---|
James Smith | 123 AnyStreet | TownVille |
John Johnson | 668 MyRoad | Tout le monde |
Michael Williams | 999 Dr haut de gamme | Williamsburgh |
Certains trouvent que l'utilisation de =
plutôt que de As
plus facile à lire, bien que beaucoup recommandent ce format, principalement parce qu'il n'est pas standard, donc pas largement pris en charge par toutes les bases de données. Cela peut entraîner une confusion avec d'autres utilisations du caractère =
.
Toutes les versions de SQL
De plus, si vous devez utiliser des mots réservés, vous pouvez utiliser des parenthèses ou des guillemets pour échapper:
SELECT
FName as "SELECT",
MName as "FROM",
LName as "WHERE"
FROM Employees
Différentes versions de SQL
De même, vous pouvez échapper des mots-clés dans MSSQL avec toutes les approches différentes:
SELECT
FName AS "SELECT",
MName AS 'FROM',
LName AS [WHERE]
FROM Employees
SÉLECTIONNER | DE | OÙ |
---|---|---|
James | John | Forgeron |
John | James | Johnson |
Michael | Marcus | Williams |
En outre, un alias de colonne peut être utilisé pour toutes les clauses finales de la même requête, telles que ORDER BY
:
SELECT
FName AS FirstName,
LName AS LastName
FROM
Employees
ORDER BY
LastName DESC
Cependant, vous ne pouvez pas utiliser
SELECT
FName AS SELECT,
LName AS FROM
FROM
Employees
ORDER BY
LastName DESC
Pour créer un alias à partir de ces mots réservés ( SELECT
et FROM
).
Cela provoquera de nombreuses erreurs d'exécution.
Sélection avec résultats triés
SELECT * FROM Employees ORDER BY LName
Cette instruction retournera toutes les colonnes de la table Employees
.
Id | FName | LName | Numéro de téléphone |
---|---|---|---|
2 | John | Johnson | 2468101214 |
1 | James | Forgeron | 1234567890 |
3 | Michael | Williams | 1357911131 |
SELECT * FROM Employees ORDER BY LName DESC
Ou
SELECT * FROM Employees ORDER BY LName ASC
Cette déclaration modifie le sens du tri.
On peut également spécifier plusieurs colonnes de tri. Par exemple:
SELECT * FROM Employees ORDER BY LName ASC, FName ASC
Cet exemple va trier les résultats d'abord par LName
, puis, pour les enregistrements qui ont le même LName
, trier par FName
. Cela vous donnera un résultat similaire à ce que vous trouveriez dans un annuaire téléphonique.
Pour enregistrer le nouveau nom de la colonne dans la clause ORDER BY
, il est possible d'utiliser le numéro de la colonne. Notez que les numéros de colonne commencent à 1.
SELECT Id, FName, LName, PhoneNumber FROM Employees ORDER BY 3
Vous pouvez également incorporer une instruction CASE
dans la clause ORDER BY
.
SELECT Id, FName, LName, PhoneNumber FROM Employees ORDER BY CASE WHEN LName='Jones` THEN 0 ELSE 1 END ASC
Cela va trier vos résultats pour avoir tous les enregistrements avec le LName
de "Jones" en haut.
Sélectionner les colonnes nommées d'après les mots-clés réservés
Lorsqu'un nom de colonne correspond à un mot clé réservé, le SQL standard requiert que vous le placiez entre guillemets doubles:
SELECT
"ORDER",
ID
FROM ORDERS
Notez que le nom de la colonne est sensible à la casse.
Certains SGBD ont des méthodes propriétaires pour citer des noms. Par exemple, SQL Server utilise des crochets à cet effet:
SELECT
[Order],
ID
FROM ORDERS
alors que MySQL (et MariaDB) utilisent par défaut des backticks:
SELECT
`Order`,
id
FROM orders
Sélection du nombre spécifié d'enregistrements
Le standard SQL 2008 définit la clause FETCH FIRST
pour limiter le nombre d'enregistrements renvoyés.
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
FETCH FIRST 10 ROWS ONLY
Cette norme est uniquement prise en charge dans les versions récentes de certains RDMS. La syntaxe non standard spécifique au fournisseur est fournie dans d'autres systèmes. Progress OpenEdge 11.x prend également en charge la syntaxe FETCH FIRST <n> ROWS ONLY
.
En outre, OFFSET <m> ROWS
avant FETCH FIRST <n> ROWS ONLY
permet d'ignorer les lignes avant d'extraire les lignes.
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
OFFSET 5 ROWS
FETCH FIRST 10 ROWS ONLY
La requête suivante est prise en charge dans SQL Server et MS Access:
SELECT TOP 10 Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
Pour faire la même chose dans MySQL ou PostgreSQL, le mot-clé LIMIT
doit être utilisé:
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
LIMIT 10
Dans Oracle, on peut faire la même chose avec ROWNUM
:
SELECT Id, ProductName, UnitPrice, Package
FROM Product
WHERE ROWNUM <= 10
ORDER BY UnitPrice DESC
Résultats : 10 enregistrements.
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
Vendor Nuances:
Il est important de noter que le TOP
de Microsoft SQL fonctionne après la clause WHERE
et renverra le nombre de résultats spécifié s’il existe dans la table, tandis que ROWNUM
fonctionne dans le cadre de la clause WHERE
si d’autres conditions n’existent pas dans la table. nombre spécifié de lignes au début de la table, vous obtiendrez des résultats nuls s’il pouvait y en avoir d’autres à trouver.
Sélection avec alias de table
SELECT e.Fname, e.LName
FROM Employees e
La table Employees reçoit l'alias 'e' directement après le nom de la table. Cela permet d'éliminer l'ambiguïté dans les scénarios où plusieurs tables ont le même nom de champ et vous devez spécifier la table à partir de laquelle vous souhaitez renvoyer des données.
SELECT e.Fname, e.LName, m.Fname AS ManagerFirstName
FROM Employees e
JOIN Managers m ON e.ManagerId = m.Id
Notez qu'une fois que vous avez défini un alias, vous ne pouvez plus utiliser le nom de la table canonique. c'est à dire,
SELECT e.Fname, Employees.LName, m.Fname AS ManagerFirstName
FROM Employees e
JOIN Managers m ON e.ManagerId = m.Id
serait jeter une erreur.
Il convient de noter les alias de tables - plus formellement les «variables de plage» - ont été introduits dans le langage SQL pour résoudre le problème des colonnes en double provoquées par INNER JOIN
. Le standard SQL de 1992 corrigeait ce défaut de conception en introduisant NATURAL JOIN
(implémenté dans mySQL, PostgreSQL et Oracle mais pas encore dans SQL Server), dont le résultat ne comporte jamais de noms de colonnes en double. L'exemple ci-dessus est intéressant en ce sens que les tables sont jointes sur des colonnes avec des noms différents ( Id
et ManagerId
) mais ne sont pas supposées être jointes sur les colonnes du même nom ( LName
, FName
), nécessitant le changement de nom des colonnes avant l'adhésion:
SELECT Fname, LName, ManagerFirstName
FROM Employees
NATURAL JOIN
( SELECT Id AS ManagerId, Fname AS ManagerFirstName
FROM Managers ) m;
Notez que même si une variable alias / range doit être déclarée pour la table dervied (sinon SQL lancera une erreur), il n’est jamais logique de l’utiliser dans la requête.
Sélectionnez des lignes dans plusieurs tables
SELECT *
FROM
table1,
table2
SELECT
table1.column1,
table1.column2,
table2.column1
FROM
table1,
table2
Ceci est appelé produit croisé dans SQL, il est identique à produit croisé dans les ensembles
Ces instructions renvoient les colonnes sélectionnées de plusieurs tables dans une requête.
Il n'y a pas de relation spécifique entre les colonnes renvoyées par chaque table.
Sélection avec les fonctions d'agrégat
Moyenne
La fonction d'agrégationAVG()
renvoie la moyenne des valeurs sélectionnées. SELECT AVG(Salary) FROM Employees
Les fonctions d'agrégat peuvent également être combinées avec la clause where. SELECT AVG(Salary) FROM Employees where DepartmentId = 1
Les fonctions d'agrégat peuvent également être combinées avec une clause group by. Si l'employé est classé avec plusieurs départements et que nous voulons trouver un salaire moyen pour chaque service, nous pouvons utiliser la requête suivante.
SELECT AVG(Salary) FROM Employees GROUP BY DepartmentId
Le minimum
La fonction d'agrégationMIN()
renvoie le minimum de valeurs sélectionnées. SELECT MIN(Salary) FROM Employees
Maximum
La fonction d'agrégationMAX()
renvoie le maximum de valeurs sélectionnées. SELECT MAX(Salary) FROM Employees
Compter
La fonction d'agrégationCOUNT()
renvoie le nombre de valeurs sélectionnées. SELECT Count(*) FROM Employees
Il peut également être combiné avec les conditions pour obtenir le nombre de lignes satisfaisant des conditions spécifiques. SELECT Count(*) FROM Employees where ManagerId IS NOT NULL
Des colonnes spécifiques peuvent également être spécifiées pour obtenir le nombre de valeurs dans la colonne. Notez que les valeurs NULL
ne sont pas comptabilisées. Select Count(ManagerId) from Employees
Count peut également être combiné avec le mot-clé distinct pour un compte distinct. Select Count(DISTINCT DepartmentId) from Employees
Somme
La fonction d'agrégationSUM()
renvoie la somme des valeurs sélectionnées pour toutes les lignes. SELECT SUM(Salary) FROM Employees
Sélection avec null
SELECT Name FROM Customers WHERE PhoneNumber IS NULL
La sélection avec des valeurs NULL a une syntaxe différente. N'utilisez pas =
, utilisez IS NULL
ou IS NOT NULL
place.
Sélection avec CASE
Lorsque les résultats doivent avoir une logique appliquée «à la volée», on peut utiliser l'instruction CASE pour l'implémenter.
SELECT CASE WHEN Col1 < 50 THEN 'under' ELSE 'over' END threshold
FROM TableName
peut également être enchaîné
SELECT
CASE WHEN Col1 < 50 THEN 'under'
WHEN Col1 > 50 AND Col1 <100 THEN 'between'
ELSE 'over'
END threshold
FROM TableName
on peut aussi avoir CASE
dans une autre déclaration 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
Sélectionner sans verrouiller la table
Parfois, lorsque les tables sont utilisées principalement (ou uniquement) pour les lectures, l'indexation n'aide plus et chaque bit compte, on peut utiliser selects sans LOCK pour améliorer les performances.
serveur SQL
SELECT * FROM TableName WITH (nolock)
MySQL
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TableName;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Oracle
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TableName;
DB2
SELECT * FROM TableName WITH UR;
où UR
signifie "lecture non validée".
S'il est utilisé sur une table dont les modifications d'enregistrement sont en cours, les résultats risquent d'être imprévisibles.
Sélectionnez distinct (valeurs uniques uniquement)
SELECT DISTINCT ContinentCode
FROM Countries;
Cette requête renvoie toutes les valeurs DISTINCT
(uniques, différentes) de ContinentCode
colonne ContinentCode
du tableau Countries
ContinentCode |
---|
OC |
UE |
COMME |
N / A |
UN F |
Sélectionnez avec la condition de plusieurs valeurs de la colonne
SELECT * FROM Cars WHERE status IN ( 'Waiting', 'Working' )
Ceci est sémantiquement équivalent à
SELECT * FROM Cars WHERE ( status = 'Waiting' OR status = 'Working' )
la value IN ( <value list> )
est un raccourci pour la disjonction ( OR
logique).
Obtenir un résultat agrégé pour les groupes de lignes
Comptage des lignes en fonction d'une valeur de colonne spécifique:
SELECT category, COUNT(*) AS item_count
FROM item
GROUP BY category;
Obtenir un revenu moyen par département:
SELECT department, AVG(income)
FROM employees
GROUP BY department;
L'important est de ne sélectionner que les colonnes spécifiées dans la clause GROUP BY
ou utilisées avec les fonctions d'agrégat .
La clause WHERE
peut également être utilisée avec GROUP BY
, mais WHERE
filtre les enregistrements avant tout regroupement:
SELECT department, AVG(income)
FROM employees
WHERE department <> 'ACCOUNTING'
GROUP BY department;
Si vous devez filtrer les résultats après le regroupement, par exemple pour ne voir que les départements dont le revenu moyen est supérieur à 1000, vous devez utiliser la clause HAVING
:
SELECT department, AVG(income)
FROM employees
WHERE department <> 'ACCOUNTING'
GROUP BY department
HAVING avg(income) > 1000;
Sélection avec plus d'une condition
Le mot clé AND
est utilisé pour ajouter plus de conditions à la requête.
prénom | Âge | Le genre |
---|---|---|
Sam | 18 | M |
John | 21 | M |
Bob | 22 | M |
Marie | 23 | F |
SELECT name FROM persons WHERE gender = 'M' AND age > 20;
Cela va retourner:
prénom |
---|
John |
Bob |
en utilisant le mot clé OR
SELECT name FROM persons WHERE gender = 'M' OR age < 20;
Cela va retourner:
prénom |
---|
Sam |
John |
Bob |
Ces mots-clés peuvent être combinés pour permettre des combinaisons de critères plus complexes:
SELECT name
FROM persons
WHERE (gender = 'M' AND age < 20)
OR (gender = 'F' AND age > 20);
Cela va retourner:
prénom |
---|
Sam |
Marie |