La commande SELECT
1. Introduction à la commande SELECT
La commande SELECT permet d’extraire des données depuis une ou plusieurs tables.
Syntaxe générale :
SELECT [DISTINCT] liste_colonnes
FROM table
[WHERE condition]
[GROUP BY colonnes]
[HAVING condition]
[ORDER BY colonnes [ASC|DESC]];
2. Sélection de données de base
Afficher toutes les colonnes :
SELECT * FROM employes;
Sélectionner des colonnes spécifiques :
SELECT nom, prenom FROM employes;
Utiliser un alias :
SELECT nom AS NomEmploye FROM employes;
Concaténation de colonnes :
SELECT nom || ' ' || prenom AS NomComplet FROM employes;
3. Filtrage des données avec WHERE
Filtrer avec conditions :
SELECT * FROM employes WHERE salaire > 2000;
Utiliser AND / OR :
SELECT * FROM employes WHERE poste = 'DEV' AND salaire > 2500;
Utiliser BETWEEN :
SELECT * FROM employes WHERE salaire BETWEEN 2000 AND 3000;
Recherche avec LIKE :
SELECT * FROM employes WHERE nom LIKE 'S%';
Valeurs NULL :
SELECT * FROM employes WHERE commission IS NULL;
4. Tri des résultats avec ORDER BY
Trier par salaire croissant :
SELECT nom, salaire FROM employes ORDER BY salaire ASC;
Trier par salaire décroissant :
SELECT nom, salaire FROM employes ORDER BY salaire DESC;
5. Fonctions intégrées
Fonctions numériques :
SELECT ROUND(salaire, 0), TRUNC(salaire, -2) FROM employes;
Fonctions de caractères :
SELECT UPPER(nom), LOWER(prenom), LENGTH(nom) FROM employes;
Fonctions de dates :
SELECT SYSDATE, ADD_MONTHS(SYSDATE, 3) FROM dual;
6. Fonctions d’agrégation
Obtenir des statistiques :
SELECT COUNT(*), AVG(salaire), MAX(salaire), MIN(salaire) FROM
employes;
Regrouper avec GROUP BY :
SELECT poste, AVG(salaire) FROM employes GROUP BY poste;
Filtrer les groupes avec HAVING :
SELECT poste, AVG(salaire) FROM employes GROUP BY poste HAVING
AVG(salaire) > 2500;
7. Les motifs de format de date en Oracle
En Oracle, les dates peuvent être affichées ou converties à l’aide de la fonction TO_CHAR
avec des motifs de format (date format models).
Quelques motifs les plus utilisés :
• YYYY : année sur 4 chiffres (ex. 2025)
• YY : année sur 2 chiffres (ex. 25)
• MM : mois numérique (01 à 12)
• MON : abréviation du mois (ex. JAN, FEV)
• MONTH : nom complet du mois (ex. JANVIER)
• DD : jour du mois (01 à 31)
• DY : abréviation du jour de la semaine (ex. LUN, MAR)
• DAY : nom complet du jour (ex. LUNDI)
• HH24 : heure en format 24h
• MI : minutes
• SS : secondes
Exemple de requête : extraire l’année d’une date
Supposons qu’on ait une table employes avec une colonne date_embauche.
Pour afficher uniquement l’année :
SELECT nom, TO_CHAR(date_embauche, 'YYYY') AS Annee_Embauche
FROM employes;
8. Les fonctions de chaînes en Oracle
Oracle met à disposition plusieurs fonctions de chaînes de caractères permettant de
manipuler, transformer ou analyser du texte. Elles sont très utilisées pour formater les
résultats d’une requête ou effectuer des recherches plus précises.
Parmi les plus courantes :
• UPPER(chaine) : transforme le texte en majuscules.
• LOWER(chaine) : transforme le texte en minuscules.
• INITCAP(chaine) : met en majuscule la première lettre de chaque mot.
• LENGTH(chaine) : retourne le nombre de caractères.
• SUBSTR(chaine, debut, longueur) : extrait une sous-chaîne.
• INSTR(chaine, motif) : retourne la position d’un motif dans une chaîne.
• CONCAT(chaine1, chaine2) ou || : concatène deux chaînes.
• TRIM(chaine), LTRIM, RTRIM : suppriment les espaces (ou caractères spécifiques)
à gauche, à droite, ou des deux côtés.
• REPLACE(chaine, ancien, nouveau) : remplace un motif par un autre.
Exemple pratique
SELECT nom,
UPPER(nom) AS NomMaj,
SUBSTR(nom, 1, 3) AS DebutNom,
LENGTH(nom) AS TailleNom
FROM employes;
9. Jointures
Jointure interne (INNER JOIN) :
SELECT e.nom, d.nom_dept FROM employes e INNER JOIN departements d ON
e.id_dept = d.id_dept;
Jointure externe (LEFT JOIN) :
SELECT e.nom, d.nom_dept FROM employes e LEFT JOIN departements d ON
e.id_dept = d.id_dept;
10. Sous-requêtes
Sous-requête dans WHERE :
SELECT nom FROM employes WHERE salaire > (SELECT AVG(salaire) FROM
employes);
Sous-requête corrélée :
SELECT nom FROM employes e WHERE salaire > (SELECT AVG(salaire) FROM
employes WHERE id_dept = e.id_dept);
11. Opérateurs ensemblistes
UNION :
SELECT nom FROM employes UNION SELECT nom FROM anciens_employes;
INTERSECT :
SELECT nom FROM employes INTERSECT SELECT nom FROM anciens_employes;
MINUS :
SELECT nom FROM employes MINUS SELECT nom FROM anciens_employes;