ALL, DISTINCT, DISTINCTROW, TOP prédicats (Microsoft Access SQL)
S’applique à : Access 2013 | Access 2016
Spécifie les enregistrements sélectionnés avec des requêtes SQL.
Syntaxe
SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] TABLE FROM
Une instruction SELECT contenant ces prédicats comporte les éléments suivants.
ALL : si vous n’incluez pas l’un des prédicats. Le moteur de base de données Microsoft Access sélectionne tous les enregistrements qui remplissent les conditions dans l'instruction SQL.
Les deux exemples suivants sont équivalents et renvoient tous les enregistrements de la table Employees :
SELECT ALL * FROM Employees ORDER BY EmployeeID;
SELECT * FROM Employees ORDER BY EmployeeID;
DISTINCT : omet les enregistrements qui contiennent des données en double dans les champs sélectionnés. Pour être incluses dans les résultats de la requête, les valeurs de chaque champ indiqué dans l'instruction SELECT doivent être uniques. Par exemple, il peut arriver que plusieurs employés répertoriés dans la table Employees aient le même nom. Si deux enregistrements contiennent Dupont dans le champ LastName, l'instruction SQL suivante ne renvoie qu'un seul enregistrement contenant Dupont :
SELECT DISTINCT LastName FROM Employees;
Si vous ne spécifiez pas DISTINCT, cette requête renvoie les deux enregistrements contenant Dupont. Si la clause SELECT contient plusieurs champs, la combinaison des valeurs de tous les champs doit être unique pour qu'un enregistrement puisse être inclus dans les résultats. Le résultat d'une requête qui utilise DISTINCT n'est pas modifiable et ne reflète pas les différentes modifications effectuées par d'autres utilisateurs.
DISTINCTROW : omet les données basées sur des enregistrements en double entiers, et pas seulement sur des champs en double. Par exemple, vous pouvez créer une requête qui joint les tables Customers (Clients) et Orders (Commandes) sur le champ CustomerID. La table Customers ne contient pas de champ CustomerID en double, contrairement à la table Orders, car il peut y avoir plusieurs commandes pour chaque client. L'instruction SQL suivante indique la manière d'utiliser DISTINCTROW pour produire une liste de sociétés qui ont passé au moins une commande mais sans fournir aucun détail sur ces commandes :
SELECT DISTINCTROW CompanyName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY CompanyName;
Si vous ne spécifiez pas DISTINCTROW, cette requête produit plusieurs lignes pour chaque société qui a passé plusieurs commandes. DISTINCTROW n'est efficace que lorsque vous sélectionnez des champs dans certaines tables utilisées dans la requête, mais pas dans toutes. DISTINCTROW est ignoré si votre requête n'inclut qu'une seule table ou si vous sélectionnez des champs dans toutes les tables.
TOP n [PERCENT] : retourne un certain nombre d’enregistrements qui se trouvent en haut ou en bas d’une plage spécifiée par une clause ORDER BY. Supposons, par exemple, que vous voulez les noms des 25 meilleurs étudiants de la promotion 1994 :
SELECT TOP 25 FirstName, LastName FROM Students WHERE GraduationYear = 1994 ORDER BY GradePointAverage DESC;
Si vous n’incluez pas la clause ORDER BY, la requête retourne un jeu arbitraire de 25 enregistrements de la table Students qui satisfont à la clause WHERE. Le prédicat TOP ne choisit pas entre des valeurs égales. Dans l'exemple précédent, si le vingt-cinquième et le vingt-sixième étudiants ont le même nombre de points, la requête retourne 26 enregistrements. Vous pouvez également utiliser le mot réservé PERCENT pour renvoyer un certain pourcentage d'enregistrements qui apparaissent au début ou à la fin d'une plage spécifiée par une clause ORDER BY. Supposons, à présent, qu'au lieu des 25 meilleurs étudiants, vous voulez les 10 pour cents ayant les moins bons résultats de la promotion :
SELECT TOP 10 PERCENT FirstName, LastName FROM Students WHERE GraduationYear = 1994 ORDER BY GradePointAverage ASC;
Le prédicat ASC spécifie les valeurs les plus basses. La valeur qui suit TOP doit être un entier non signé. TOP n'a aucun effet sur le fait de pouvoir modifier ou non la requête.
table : nom de la table à partir de laquelle les enregistrements sont récupérés.
Exemple
Dans cet exemple, une requête joignant les tables Customers et Orders sur le champ CustomerID est créée. La table Customers ne contient pas de champ CustomerID en double, contrairement à la table Orders, car il peut y avoir plusieurs commandes pour chaque client. L'utilisation de DISTINCTROW dans la requête permet de produire une liste des sociétés qui ont passé au moins une commande mais sans fournir aucun détail sur ces commandes.
Sub AllDistinctX()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Join the Customers and Orders tables on the
' CustomerID field. Select a list of companies
' that have at least one order.
Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _
& "CompanyName FROM Customers " _
& "INNER JOIN Orders " _
& "ON Customers.CustomerID = " _
& "Orders.CustomerID " _
& "ORDER BY CompanyName;")
' Populate the Recordset.
rst.MoveLast
' Call EnumFields to print the contents of the
' Recordset. Pass the Recordset object and desired
' field width.
EnumFields rst, 25
dbs.Close
End Sub
Voir aussi
- Forum Access pour les développeurs
- Aide Access sur support.office.com
- Forums Access sur UtterAccess
- Centre d'aide pour les développeurs Access et la programmation VBA (FMS)
- Billets sur Access sur StackOverflow
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour