Essentiels de SQL Server : Utiliser SQL SELECT et les Clauses WHERE et HAVING pour Récupérer des Données

Dans cet article, je vais couvrir les bases de l’utilisation de l’instruction SQL SELECT pour récupérer des données à partir d’une ou plusieurs tables SQL Server. Je vais également expliquer comment récupérer des colonnes sélectionnées, ainsi que comment utiliser les clauses SQL WHERE et HAVING pour filtrer les lignes.

Les exemples de cet article utilisent tous la base de données d’exemple AdventureWorksLT2019. Dans l’article précédent de cette série, j’ai expliqué comment remplir des tables SQL Server à l’aide des instructions INSERT, UPDATE et DELETE. Ces instructions de langage de requête structurée (SQL) modifient le contenu d’une table, mais l’instruction SQL SELECT a un but différent.

Publicité

 

Comment utiliser une instruction SQL SELECT simple

L’instruction SQL SELECT est utilisée pour interroger des données à partir d’une table. Le code suivant illustre la syntaxe la plus basique de l’instruction SELECT.

SELECT columns FROM schema_name.table_name;

Comme vous le savez, les données de table sont organisées dans un format ligne-colonne. Chaque ligne représente un enregistrement unique dans une table, et chaque colonne représente un champ dans l’ensemble de données.

La première clause du statement SELECT est une liste des noms de colonnes qui seront récupérés. Ici, vous spécifiez une liste de colonnes séparées par des virgules à partir desquelles vous souhaitez récupérer des données.

Publicité

Ensuite, la clause FROM spécifie la table source et son nom de schéma si cela est requis. SQL Server utilise des schémas pour regrouper logiquement les tables et autres objets de base de données. Le schéma par défaut pour chaque base de données est dbo, et parce que c’est le schéma qui est utilisé ici, il peut être omis.

L’exemple suivant montre un exemple simple d’une instruction SELECT:

  • La première commande USE définit la base de données actuelle sur AdventureWorksLT2019.
  • La déclaration SELECT fournit une liste de colonnes pour l’ensemble de résultats qui sera récupéré de la table SalesLT.Customer.
  • Dans ce cas, la base de données d’exemple AdventureWorksLT2019 utilise le nom de schéma « SalesLT » (entre autres), donc vous devez inclure le nom du schéma, un point, puis le nom de la table, qui est « Customers ».
  • Les colonnes ‘FirstName’ et ‘LastName’ récupèrent le prénom et le nom de famille du client.
USE AdventureWorksLT2019
SELECT FirstName, LastName from SalesLT.Customer
An example of a simple SQL SELECT statement (Image credit: Petri/Michael Otey)

Comme raccourci, vous pouvez utiliser un astérisque (*) pour récupérer toutes les colonnes de la table, quel que soit le nombre de colonnes. Vous pouvez voir un exemple ci-dessous :

USE AdventureWorksLT2019
SELECT * from SalesLT.Customer
You can use an asterisk (*) to retrieve all of the columns in the table (Image credit: Petri/Michael Otey)

La déclaration SELECT * est utile pour les requêtes ad hoc ou pour examiner les colonnes et les données d’une table avec laquelle vous n’êtes pas familier. Cependant, vous ne devriez pas utiliser cette déclaration pour le code de production – elle récupère généralement plus de données que votre application n’en a besoin, et vous ne voulez pas augmenter la charge de travail de votre serveur SQL.

Comment filtrer les lignes avec la clause SQL WHERE

Le véritable pouvoir de l’instruction SELECT se trouve dans ses capacités de filtrage et de jointure. La requête SELECT peut utiliser une clause facultative WHERE pour filtrer les données qui seront retournées

La clause WHERE utilise une ou plusieurs conditions booléennes pour sélectionner les données de table désirées. La clause WHERE vient toujours après la clause FROM et avant les clauses GROUP BY, HAVING, et ORDER BY.

Vous pouvez voir un exemple de l’utilisation de la clause WHERE SQL ci-dessous. Ici, la clause WHERE est utilisée pour filtrer une liste de sélection contenant les colonnes ‘FirstName’, ‘LastName’, ‘Phone’ et ‘CompanyName’ des lignes contenant la valeur ‘Sharp Bikes’ dans la colonne ‘CompanyName’.

USE AdventureWorksLT2019
SELECT FirstName, LastName, Phone, CompanyName FROM SalesLT.Customer WHERE CompanyName = 'Sharp Bikes';
Using the WHERE clause to filter data that will be returned (Image credit: Petri/Michael Otey)

Filtrage des lignes contenant une valeur en tant que partie d’une chaîne

La puissance de l’utilisation de la clause WHERE avec l’instruction SELECT réside dans sa flexibilité. La clause WHERE va bien au-delà de la simple égalité, des opérateurs de comparaison « supérieur à » et « inférieur à » . Jetons un coup d’œil plus attentif à certaines des choses que vous pouvez faire avec la clause WHERE, en commençant par l’utilisation de l’ opérateur SQL LIKE.

L’opérateur LIKE est utilisé pour déterminer si une chaîne de caractères spécifique correspond à un motif spécifié. Dans l’exemple ci-dessous, nous récupérons toutes les lignes de la table Customer qui contiennent le mot ‘Bike’ n’importe où dans la colonne ‘CompanyName’. Ici, nous devons utiliser le caractère générique % à la fois avant et après le mot ‘Bike’.

USE AdventureWorksLT2019
SELECT SalesPerson, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE('%Bike%');
Using the WHERE clause with the LIKE operator (Image credit: Petri/Michael Otey)

Filtrer les lignes répondant à l’une des trois conditions

Vous pouvez également utiliser la clause WHERE pour filtrer les lignes en fonction de plusieurs valeurs différentes. La liste de code suivante montre comment utiliser l’instruction SELECT avec une clause WHERE pour sélectionner trois valeurs différentes dans la table Product. Dans cet exemple, la clause WHERE est utilisée avec l’opérateur OR pour sélectionner les lignes où ‘ProductID’ est égal à 680, 711 ou 722.

USE AdventureWorksLT2019
SELECT Name, ProductID, ProductNumber FROM SalesLT.Product
 WHERE ProductID = 680 OR ProductID = 711 OR ProductID = 722; 
Filtering rows that meet different conditions with the WHERE clause (Image credit: Petri/Michael Otey)

Filtrer les lignes qui sont dans une liste de valeurs

Vous pouvez également utiliser la clause WHERE de l’instruction SELECT pour sélectionner les lignes contenues dans une liste définie en utilisant l’opérateur IN. Dans l’exemple suivant, l’instruction SELECT renverra les lignes contenant les valeurs de ‘Bothell’, ‘Bellevue’ ou ‘Renton’ dans la colonne ‘City’ de la table SalesLT.Address.

USE AdventureWorksLT2019
SELECT AddressID, AddressLine1, City FROM SalesLT.Address
WHERE City IN ('Bothell', 'Bellevue', 'Renton');
Filtering rows that are in a list of values with the IN operator (Image credit: Petri/Michael Otey)

Filtrer les lignes ayant une valeur entre deux valeurs

Vous pouvez également utiliser la clause WHERE de l’instruction SELECT avec l’opérateur BETWEEN pour sélectionner les valeurs de ligne qui se trouvent à l’intérieur d’une plage prédéfinie dans une colonne spécifique. L’exemple suivant montre comment vous pouvez utiliser BETWEEN pour simplement renvoyer les lignes dans la table Product qui ont une valeur dans la colonne ‘ListPrice’ supérieure à 10 et inférieure à 50.

USE AdventureWorksLT2019
SELECT ProductID, Name  FROM SalesLT.Product  WHERE ListPrice Between 10 AND 50; 
Filtering rows that have a value between two values (Image credit: Petri/Michael Otey)

Filtrer les lignes avec la clause HAVING

Vous pouvez également filtrer les lignes dans un ensemble de résultats en utilisant la clause HAVING. La clause HAVING a été ajoutée à SQL Server car le mot-clé WHERE ne peut pas être utilisé avec des fonctions d’agrégation telles que GROUP BY. Elle est utilisée pour spécifier une condition de recherche pour un groupe ou une agrégation qui inclut une ou plusieurs conditions qui sont vraies pour différents groupes d’enregistrements.

La clause HAVING vient toujours après la clause GROUP BY et avant la clause ORDER BY, comme vous pouvez le voir dans l’instruction SQL suivante. Dans cet exemple, l’ensemble de résultats se compose du ‘SalesOrderID’ et de l’alias de colonne ‘SubTotal’. L’ordre est ascendant et les lignes sont des agrégats regroupés par ‘SalesOrderID’.

USE AdventureWorksLT2019 ; 
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal 
FROM SalesLT.SalesOrderDetail  GROUP BY SalesOrderID 
HAVING SUM(LineTotal) > 5000.00 
ORDER BY SalesOrderID ;
Filtering rows with the HAVING clause (Image credit: Petri/Michael Otey)

Résumé

Dans ce tutoriel, j’ai expliqué les bases de l’utilisation de l’instruction SELECT T-SQL pour filtrer les lignes de plusieurs manières différentes. La clause WHERE offre un ensemble extrêmement flexible d’opérateurs qui vous permettent de sélectionner des lignes en fonction de différentes conditions. De même, la clause HAVING vous permet de sélectionner des groupes de lignes répondant à une certaine condition. Merci de votre lecture et restez à l’écoute pour mon prochain article dans cette série SQL Server Essential.

Article connexe:

Source:
https://petri.com/sql-select-where-clause/