Recherche…


Syntaxe

  • SELECT nom_colonne
    FROM nom_table
    WHERE valeur d'opérateur nom_colonne
  • SELECT nom_colonne, agrégat_fonction (nom_colonne)
    FROM nom_table
    GROUP BY nom_colonne
    Valeur d'opérateur agrégat_fonction (nom_colonne)

La clause WHERE ne renvoie que les lignes correspondant à ses critères

Steam a une section de jeux de moins de 10 $ sur sa page de magasin. Quelque part au cœur de leurs systèmes, il y a probablement une requête qui ressemble à:

SELECT * 
FROM Items 
WHERE Price < 10

Utilisez IN pour renvoyer des lignes avec une valeur contenue dans une liste

Cet exemple utilise la table Car de l'exemple de bases de données.

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

Cette requête renvoie la voiture n ° 2 qui coûte 200 et la voiture n ° 3 qui coûte 100. Notez que cela équivaut à utiliser plusieurs clauses avec OR , par exemple:

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

Utilisez LIKE pour trouver des chaînes et des sous-chaînes correspondantes

Voir la documentation complète sur l'opérateur LIKE .

Cet exemple utilise la table Employees de l'exemple de base de données.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

Cette requête ne renverra que l'employé n ° 1 dont le prénom correspond à «John» exactement.

SELECT *
FROM Employees
WHERE FName like 'John%'

Ajouter % vous permet de rechercher une sous-chaîne:

  • John% - renverra tout employé dont le nom commence par «John», suivi de toute quantité de caractères
  • %John - renverra tout employé dont le nom se termine par «John», par n'importe quel nombre de caractères
  • %John% - renverra tout employé dont le nom contient «John» n'importe où dans la valeur

Dans ce cas, la requête renvoie Employee # 2 dont le nom est "John" ainsi que Employee # 4 dont le nom est "Johnathon".

Clause WHERE avec des valeurs NULL / NOT NULL

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Cette instruction renvoie tous les enregistrements d' employé dont la valeur de la colonne ManagerId est NULL .

Le résultat sera:

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

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

Cette instruction retournera tous les enregistrements d' employé dont la valeur de ManagerId n'est pas NULL .

Le résultat sera:

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

Remarque: La même requête ne renverra pas de résultats si vous modifiez la clause WHERE ManagerId = NULL en WHERE ManagerId = NULL ou WHERE ManagerId <> NULL .

Utilisez HAVING avec des fonctions d'agrégat

Contrairement à la clause WHERE , HAVING peut être utilisé avec des fonctions d'agrégat.

Une fonction d'agrégat est une fonction où les valeurs de plusieurs lignes sont regroupées en tant que données d'entrée sur certains critères pour former une valeur unique de signification ou de mesure plus significative ( Wikipedia ).

Les fonctions d'agrégation courantes incluent COUNT() , SUM() , MIN() et MAX() .


Cet exemple utilise la table Car de l'exemple de bases de données.

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

Cette requête renvoie le nombre CustomerId et Number of Cars de tout client disposant de plusieurs voitures. Dans ce cas, le seul client qui possède plus d'une voiture est le client n ° 1.

Les résultats ressembleront à:

N ° de client Nombre de voitures
1 2

Utilisez entre pour filtrer les résultats

Les exemples suivants utilisent les exemples de bases de données Ventes d'articles et Clients .

Remarque: l'opérateur BETWEEN est inclus.

Utilisation de l'opérateur BETWEEN avec des nombres:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

Cette requête renvoie tous les enregistrements ItemSales dont la quantité est supérieure ou égale à 10 et inférieure ou égale à 17. Les résultats seront les suivants:

Id Date de vente ID de l'article Quantité Prix
1 2013-07-01 100 dix 34,5
4 2013-07-23 100 15 34,5
5 2013-07-24 145 dix 34,5

Utilisation de l'opérateur BETWEEN avec les valeurs de date:

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

Cette requête renverra tous ItemSales enregistrements avec un SaleDate qui est supérieur ou égal à 11 Juillet 2013 et inférieure ou égale au 24 mai 2013.

Id Date de vente ID de l'article Quantité Prix
3 2013-07-11 100 20 34,5
4 2013-07-23 100 15 34,5
5 2013-07-24 145 dix 34,5

Lorsque vous comparez des valeurs de date / heure au lieu de dates, vous devrez peut-être convertir les valeurs de date / heure en valeurs de date ou ajouter ou soustraire 24 heures pour obtenir les résultats corrects.


Utilisation de l'opérateur BETWEEN avec des valeurs de texte:

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

Exemple en direct: violon SQL

Cette requête renvoie tous les clients dont le nom est alphabétiquement compris entre les lettres "D" et "L". Dans ce cas, les clients n ° 1 et n ° 3 seront renvoyés. Le client n ° 2, dont le nom commence par un «M», ne sera pas inclus.

Id FName LName
1 William Jones
3 Richard Davis

Égalité

SELECT * FROM Employees 

Cette instruction retournera toutes les lignes de la table 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'utilisation d'un WHERE à la fin de votre SELECT vous permet de limiter les lignes renvoyées à une condition. Dans ce cas, il existe une correspondance exacte avec le signe = :

SELECT * FROM Employees WHERE DepartmentId = 1

Ne renverra que les lignes où DepartmentId est égal à 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

ET et OU

Vous pouvez également combiner plusieurs opérateurs pour créer des conditions WHERE plus complexes. Les exemples suivants utilisent la table 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

ET

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

Reviendra:

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

OU

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

Reviendra:

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

Utilisez HAVING pour vérifier plusieurs conditions dans un groupe

Tableau des commandes

N ° de client ProductId Quantité Prix
1 2 5 100
1 3 2 200
1 4 1 500
2 1 4 50
3 5 6 700

Pour vérifier les clients qui ont commandé les deux - ProductID 2 et 3, HAVING peut être utilisé

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

Valeur de retour:

N ° de client
1

La requête sélectionne uniquement les enregistrements avec les ID de produit dans les questions et la clause HAVING recherche les groupes ayant 2 ID de produit et pas un seul.

Une autre possibilité serait

 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

Cette requête sélectionne uniquement les groupes ayant au moins un enregistrement avec productID 2 et au moins un avec productID 3.

Où EXISTE

Sélectionne les enregistrements dans TableName qui ont des enregistrements correspondants dans 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow