Événement
31 mars, 23 h - 2 avr., 23 h
Le plus grand événement d’apprentissage SQL, Fabric et Power BI. 31 mars au 2 avril. Utilisez le code FABINSIDER pour économiser 400 $.
Inscrivez-vous aujourd’huiCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
S’applique à : SQL Server
Base de données Azure SQL
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Point de terminaison d'analyse SQL dans Microsoft Fabric
Entrepôt dans Microsoft Fabric
Base de données SQL dans Microsoft Fabric
Récupère des lignes de la base de données et active la sélection d’une ou de plusieurs lignes ou colonnes d’une ou de plusieurs tables dans sql Server Moteur de base de données. La syntaxe complète de l’instruction SELECT
est complexe, mais les clauses principales peuvent être résumées comme suit :
[ WITH { [ XMLNAMESPACES , ] [ common_table_expression ] } ]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ ORDER BY expression_order [ ASC | DESC ]]
Les opérateurs UNION, EXCEPT et INTERSECT peuvent être utilisés entre les requêtes pour combiner ou comparer leurs résultats dans un jeu de résultats.
Conventions de la syntaxe Transact-SQL
Syntaxe pour SQL Server et Azure SQL Database :
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES , ] [ <common_table_expression> [ , ...n ] ] } ]
<query_expression>
[ ORDER BY <order_by_expression> ]
[ <FOR Clause> ]
[ OPTION ( <query_hint> [ , ...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [ ...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
<select_list>
[ INTO new_table ]
[ FROM { <table_source> } [ , ...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING <search_condition> ]
[ ; ]
Syntaxe pour Azure Synapse Analytics, Parallel Data Warehouse et Microsoft Fabric :
[ WITH <common_table_expression> [ , ...n ] ]
SELECT <select_criteria>
[ ; ]
<select_criteria> ::=
[ TOP ( top_expression ) ]
[ ALL | DISTINCT ]
{ * | column_name | expression } [ , ...n ]
[ FROM { table_source } [ , ...n ] ]
[ WHERE <search_condition> ]
[ GROUP BY <group_by_clause> ]
[ HAVING <search_condition> ]
[ ORDER BY <order_by_expression> ]
[ OPTION ( <query_option> [ , ...n ] ) ]
En raison de la complexité de l’instruction SELECT
, les éléments de syntaxe et les arguments détaillés sont affichés par clause :
L’ordre des clauses de l’instruction SELECT
est significatif. Vous pouvez omettre n'importe quelle clause facultative mais, lorsque vous employez les clauses facultatives, elles doivent apparaître dans l'ordre adéquat.
SELECT
les instructions sont autorisées dans les fonctions définies par l’utilisateur uniquement si les listes de sélection de ces instructions contiennent des expressions qui attribuent des valeurs à des variables locales aux fonctions.
Un nom en quatre parties construit avec la OPENDATASOURCE
fonction comme composant server-name peut être utilisé comme source de table où un nom de table peut apparaître dans une SELECT
instruction. Un nom en quatre parties ne peut pas être spécifié pour Azure SQL Database.
Certaines restrictions de syntaxe s’appliquent aux SELECT
instructions qui impliquent des tables distantes.
Les étapes suivantes montrent l’ordre de traitement logique ou l’ordre de liaison pour une SELECT
instruction. Cet ordre détermine à quel moment les objets définis au cours d'une étape deviennent disponibles pour les clauses des étapes suivantes. Par exemple, si le processeur de requêtes peut lier (accéder) aux tables ou vues définies dans la FROM
clause, ces objets et leurs colonnes sont mis à la disposition de toutes les étapes suivantes. À l’inverse, étant donné que la SELECT
clause est l’étape 8, tous les alias de colonne ou colonnes dérivées définis dans cette clause ne peuvent pas être référencés par les clauses précédentes. Toutefois, elles peuvent être référencées par des clauses suivantes telles que la ORDER BY
clause. Le processeur de requêtes détermine l’exécution physique réelle de l’instruction, et l’ordre peut varier à partir de cette liste.
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE
ou WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Avertissement
Il existe des cas rares où la séquence précédente peut différer. Supposons que vous disposez d’un index cluster sur une vue et que la vue exclut certaines lignes de table, et que la liste de colonnes de SELECT
la vue utilise un CONVERT
type de données de varchar en int. Dans ce cas, il CONVERT
peut s’exécuter avant l’exécution de la WHERE
clause. Il existe souvent un moyen de modifier votre vue pour éviter la séquence différente, si elle est importante dans votre cas.
La sélection de données nécessite SELECT
une autorisation sur la table ou la vue, qui peut être héritée d’une étendue plus élevée, telle que SELECT
l’autorisation sur le schéma ou CONTROL
l’autorisation sur la table. La sélection peut également nécessiter l’appartenance au rôle de base de données fixe db_datareader ou db_owner, ou au rôle de serveur fixe sysadmin. La création d’une table à l’aide SELECT INTO
nécessite également l’autorisation CREATE TABLE
et l’autorisation ALTER SCHEMA
sur le schéma propriétaire de la nouvelle table.
Les exemples suivants utilisent la base de données AdventureWorksPDW2022.
Cette section présente trois exemples de code. Ce premier exemple de code retourne toutes les lignes (aucune clause n’est WHERE
spécifiée) et toutes les colonnes (à l’aide du *
) de la DimEmployee
table.
SELECT *
FROM DimEmployee
ORDER BY LastName;
L’exemple suivant donne le même résultat, mais en utilisant des alias de table.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
Cet exemple retourne toutes les lignes (aucune clause n’est WHERE
spécifiée) et un sous-ensemble des colonnes (FirstName
, , StartDate
LastName
) de la DimEmployee
table de la base de données AdventureWorksPDW2022. L’en-tête de la troisième colonne est renommé FirstDay
.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
Cet exemple retourne uniquement les lignes pour DimEmployee
qui ont un EndDate
élément qui n’est pas NULL
et un MaritalStatus
de M
(marié).
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
L’exemple suivant retourne toutes les lignes de la table DimEmployee
, et calcule le salaire brut de chaque employé sur la base de la valeur BaseRate
et d’une semaine de 40 heures de travail.
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
L’exemple suivant utilise DISTINCT
pour générer une liste de tous les titres uniques figurant dans la table DimEmployee
.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
L’exemple suivant calcule le montant total des ventes réalisées par jour.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Comme la clause GROUP BY
est utilisée, une seule ligne contenant la somme de toutes les ventes est retournée pour chaque jour.
L’exemple suivant calcule le prix moyen et la somme des ventes sur Internet pour chaque jour, en regroupant les résultats en fonction de la date de commande et de la clé de promotion.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
L’exemple suivant regroupe les résultats après avoir récupéré uniquement les lignes dont les dates de commande sont postérieures au 1er août 2002.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
L'exemple suivant effectue un regroupement en fonction d'une expression. Vous pouvez spécifier un regroupement en fonction d'une expression à condition qu'elle ne contienne pas de fonction d'agrégation.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
L’exemple suivant calcule la somme des ventes par jour, en triant les résultats par date.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Cette requête utilise la clause HAVING
pour limiter les résultats.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;
Événement
31 mars, 23 h - 2 avr., 23 h
Le plus grand événement d’apprentissage SQL, Fabric et Power BI. 31 mars au 2 avril. Utilisez le code FABINSIDER pour économiser 400 $.
Inscrivez-vous aujourd’hui