SELECT en SQL Oracle : syntaxe et exemples pratiques

Apprenez à utiliser la commande SELECT en SQL Oracle : syntaxe complète, exemples pratiques, erreurs courantes et bonnes pratiques pour interroger vos données.

Illustration du tutoriel SQL Oracle : SELECT en SQL Oracle : syntaxe et exemples pratiques

La commande SELECT en SQL Oracle : guide complet avec exemples

La commande SELECT en SQL Oracle est la pierre angulaire de tout langage de requête structuré. Elle permet d’extraire, de filtrer et d’afficher des données stockées dans une base de données relationnelle. Que vous soyez développeur, analyste ou administrateur de base de données, maîtriser le SELECT SQL Oracle est une compétence incontournable pour exploiter pleinement la puissance du moteur Oracle Database.

Publicité

Définition et utilisation du SELECT en SQL Oracle

La commande SELECT est une instruction de type DQL (Data Query Language). Son rôle est exclusivement de lire des données sans modifier le contenu de la base. Elle ne fait aucune écriture, aucune mise à jour : elle interroge.

En entreprise, le SELECT est omniprésent dans des contextes variés :

  • Reporting métier : générer des états financiers, des tableaux de bord commerciaux ou des rapports RH.
  • Audit de données : vérifier la cohérence ou l’intégrité d’enregistrements dans des tables de production.
  • Développement applicatif : alimenter des interfaces utilisateurs en données dynamiques via des requêtes SQL embarquées.
  • Exploration et analyse : comprendre la structure et le contenu d’une base lors d’une prise en main ou d’une migration.

Oracle Database, avec son optimiseur de requêtes avancé (le Cost-Based Optimizer), analyse chaque requête SELECT pour déterminer le plan d’exécution le plus performant. Il est donc crucial d’écrire des requêtes bien structurées pour en tirer le meilleur parti.

Syntaxe complète du SELECT SQL Oracle

Voici la syntaxe générale de la commande SELECT dans Oracle :


SELECT [DISTINCT | ALL] { * | expression [alias], ... }
FROM   nom_table [alias_table]
[WHERE condition]
[GROUP BY expression]
[HAVING condition_groupe]
[ORDER BY expression [ASC | DESC]]
[FETCH FIRST n ROWS ONLY];

Explication des paramètres essentiels

  • DISTINCT / ALL : DISTINCT élimine les doublons dans le résultat. ALL (valeur par défaut) retourne toutes les lignes.
  • * ou expression : L’astérisque * sélectionne toutes les colonnes. Il est préférable de nommer explicitement les colonnes souhaitées pour des raisons de performance et de lisibilité.
  • alias : Permet de renommer une colonne ou une table dans le résultat, en utilisant le mot-clé optionnel AS.
  • FROM : Indique la ou les tables sources. Oracle supporte les jointures multi-tables dans cette clause.
  • WHERE : Filtre les lignes selon une condition logique. Peut utiliser des opérateurs (=, LIKE, BETWEEN, IN, IS NULL, etc.).
  • GROUP BY : Regroupe les résultats selon une ou plusieurs colonnes, en général pour utiliser des fonctions d’agrégation (SUM, COUNT, AVG…).
  • HAVING : Filtre les groupes créés par GROUP BY, à ne pas confondre avec WHERE.
  • ORDER BY : Trie les résultats en ordre croissant (ASC, par défaut) ou décroissant (DESC).
  • FETCH FIRST n ROWS ONLY : Clause Oracle (depuis la version 12c) pour limiter le nombre de lignes retournées, en remplacement de ROWNUM.

Exemples pratiques de SELECT en SQL Oracle

Exemple 1 – Lister les employés d’un département avec filtre et tri

Contexte métier : Le service RH souhaite obtenir la liste des employés du département 10 (comptabilité), triés par ordre de salaire décroissant, avec leur nom, prénom et salaire annuel.


-- Sélection des colonnes spécifiques avec un alias pour le salaire annuel
SELECT
    e.LAST_NAME       AS "Nom",
    e.FIRST_NAME      AS "Prénom",
    e.SALARY * 12     AS "Salaire Annuel"   -- calcul d'expression directement dans le SELECT
FROM
    EMPLOYEES e                             -- alias de table 'e' pour alléger la syntaxe
WHERE
    e.DEPARTMENT_ID = 10                    -- filtre sur le département comptabilité
ORDER BY
    e.SALARY DESC;                          -- tri du plus haut au plus bas salaire

Résultat attendu : Une liste ordonnée des collaborateurs du département 10 avec leur rémunération annuelle calculée à la volée. L’alias de colonne entre guillemets doubles permet d’afficher des libellés avec des espaces et des accents, ce qui est propre à Oracle.

Exemple 2 – Analyse des ventes par catégorie de produit avec agrégation

Contexte métier : Un contrôleur de gestion veut connaître le chiffre d’affaires total par catégorie de produit, uniquement pour les catégories ayant généré plus de 50 000 euros de revenus au cours du dernier exercice.


-- Agrégation du chiffre d'affaires par catégorie de produit
SELECT
    p.CATEGORY_NAME             AS "Catégorie",
    COUNT(o.ORDER_ID)           AS "Nombre de commandes",
    SUM(oi.QUANTITY * oi.UNIT_PRICE) AS "Chiffre d'Affaires"   -- calcul du CA total
FROM
    ORDER_ITEMS  oi
    JOIN ORDERS    o  ON oi.ORDER_ID  = o.ORDER_ID
    JOIN PRODUCTS  p  ON oi.PRODUCT_ID = p.PRODUCT_ID
WHERE
    EXTRACT(YEAR FROM o.ORDER_DATE) = 2024    -- filtre sur l'exercice 2024 (syntaxe Oracle)
GROUP BY
    p.CATEGORY_NAME                           -- regroupement par catégorie
HAVING
    SUM(oi.QUANTITY * oi.UNIT_PRICE) > 50000  -- filtre post-agrégation sur le CA
ORDER BY
    "Chiffre d'Affaires" DESC;                -- tri sur l'alias de colonne

Résultat attendu : Un tableau synthétique des meilleures catégories de produits par chiffre d’affaires, idéal pour alimenter un rapport de direction ou un outil de Business Intelligence. Notez l’utilisation de EXTRACT, fonction native Oracle pour manipuler les composantes d’une date.

Publicité

Erreurs courantes avec SELECT en Oracle

Erreur : utiliser un alias de colonne dans la clause WHERE

Une erreur fréquente chez les débutants consiste à réutiliser un alias défini dans le SELECT directement dans la clause WHERE. Oracle retourne alors l’erreur ORA-00904: invalid identifier.

Exemple incorrect :


-- ? Erreur : l'alias "Salaire Annuel" n'est pas encore connu au moment du WHERE
SELECT SALARY * 12 AS "Salaire Annuel"
FROM   EMPLOYEES
WHERE  "Salaire Annuel" > 60000;

Solution correcte : Répétez l’expression dans le WHERE, ou utilisez une sous-requête (subquery) :


-- ? Solution 1 : répéter l'expression dans le WHERE
SELECT SALARY * 12 AS "Salaire Annuel"
FROM   EMPLOYEES
WHERE  SALARY * 12 > 60000;

-- ? Solution 2 : utiliser une sous-requête (inline view)
SELECT *
FROM (
    SELECT SALARY * 12 AS "Salaire Annuel"
    FROM   EMPLOYEES
)
WHERE "Salaire Annuel" > 60000;

Explication : Oracle traite les clauses SQL dans un ordre logique précis : FROM ? WHERE ? GROUP BY ? HAVING ? SELECT ? ORDER BY. Les alias définis dans le SELECT ne sont donc disponibles que dans la clause ORDER BY (et dans le HAVING dans certains cas).

Résumé

ClauseRôleObligatoire ?
SELECTDéfinit les colonnes ou expressions à afficher? Oui
FROMIndique la ou les tables sources? Oui (sauf SELECT sur DUAL)
WHEREFiltre les lignes avant agrégation? Non
GROUP BYRegroupe les lignes pour les fonctions d’agrégation? Non
HAVINGFiltre les groupes après agrégation? Non
ORDER BYTrie le résultat final? Non
FETCH FIRSTLimite le nombre de lignes retournées (Oracle 12c+)? Non

2 bonnes pratiques Oracle à retenir

  1. Évitez SELECT * en production : listez explicitement les colonnes nécessaires. Cela réduit la quantité de données transférées, améliore les performances et rend votre code plus robuste face aux évolutions de schéma.
  2. Utilisez des alias de table systématiquement : dès que votre requête implique plusieurs tables, préfixez chaque colonne avec l’alias de sa table (e.SALARY plutôt que SALARY). Cela évite les ambiguïtés et facilite la maintenance du code SQL.

Aller plus loin avec SQL Oracle

Vous maîtrisez maintenant les fondamentaux de la commande SELECT en SQL Oracle. Pour approfondir vos compétences, découvrez ces sujets complémentaires :

Vidéo : Vidéo SQL ORACLE – 02 : Les requêtes DML (SELECT, INSERT, UPDATE et DELETE).

https://www.youtube.com/watch?v=4IERHEJ-TRM[/embed]

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité