Les requêtes avancées en SQL

Les sous-requêtes

Les sous-requêtes sont des requêtes SQL imbriquées dans une autre requête SQL. Elles sont utiles pour effectuer des opérations complexes, comme des calculs intermédiaires, des comparaisons ou des filtrages basés sur les résultats d'une autre requête.

Utilisation de Sous-requêtes dans WHERE

Les sous-requêtes dans la clause WHERE permettent de filtrer les données basées sur les résultats d'une autre requête.

Exemple :

SELECT *
FROM Employes
WHERE Salaire > (SELECT AVG(Salaire) FROM Employes);

Cette requête sélectionne les employés dont le salaire est supérieur à la moyenne des salaires de tous les employés.

Utilisation de Sous-requêtes dans SELECT

Les sous-requêtes peuvent également être utilisées dans la liste de sélection pour retourner des valeurs calculées.

Exemple :

SELECT ID_Employe, 
       (SELECT COUNT(*) FROM Commandes WHERE Commandes.ID_Employe = Employes.ID_Employe) AS Nombre_Commandes
FROM Employes;

Cette requête fournit le nombre de commandes pour chaque employé.

Les Fonctions SQL

Les fonctions SQL intégrées permettent d'effectuer des opérations sur les données. Elles peuvent être classées en plusieurs catégories, telles que les fonctions de chaîne de caractères, les fonctions numériques, et les fonctions de date et heure.

Fonctions de Chaîne de Caractères

Ces fonctions manipulent ou retournent des informations sur des chaînes de caractères.

Exemples :

Fonctions de Date et Heure

Ces fonctions sont utilisées pour manipuler les types de données de date et d'heure.

Exemples :

Points Clés à Retenir

Exercices Pratiques

Création de la Table Employes

Supposons que la table Employes ait les colonnes suivantes : ID_Employe, Nom, Poste, et Date_Embauche.

CREATE TABLE Employes (
    ID_Employe INT PRIMARY KEY,
    Nom VARCHAR(100),
    Poste VARCHAR(100),
    Date_Embauche DATE
);

Remplissage de la Table Employes

Insérons quelques enregistrements dans cette table.

INSERT INTO Employes (ID_Employe, Nom, Poste, Date_Embauche) VALUES
(1, 'Alice Dupont', 'Ingénieur', '2020-01-15'),
(2, 'Bob Martin', 'Analyste', '2019-08-01'),
(3, 'Caroline Dubois', 'Manager', '2018-05-23');

Création de la Table Commandes

Supposons maintenant que la table Commandes ait les colonnes suivantes : ID_Commande, ID_Employe, Date_Commande, et Montant.

CREATE TABLE Commandes (
    ID_Commande INT PRIMARY KEY,
    ID_Employe INT,
    Date_Commande DATE,
    Montant DECIMAL(10, 2),
    FOREIGN KEY (ID_Employe) REFERENCES Employes(ID_Employe)
);

Remplissage de la Table Commandes

Insérons quelques commandes.

INSERT INTO Commandes (ID_Commande, ID_Employe, Date_Commande, Montant) VALUES
(101, 1, '2021-03-15', 150.00),
(102, 2, '2021-03-16', 200.50),
(103, 1, '2021-03-17', 99.99),
(104, 3, '2021-03-18', 300.00),
(105, 2, '2021-03-19', 450.25),
(106, 1, '2021-03-20', 125.75),
(107, 3, '2021-03-21', 500.00),
(108, 2, '2021-03-22', 250.00),
(109, 1, '2021-03-23', 75.50),
(110, 3, '2021-03-24', 600.00);

Exercice 1 - Sous-requêtes

Trouvez les noms des employés qui ont réalisé plus de commandes que la moyenne des commandes par employé.

SELECT Nom
FROM Employes
WHERE (SELECT COUNT(*) FROM Commandes WHERE Commandes.ID_Employe = Employes.ID_Employe) > 
      (SELECT AVG(Comptage) FROM (SELECT COUNT(*) AS Comptage FROM Commandes GROUP BY ID_Employe) AS Moyenne);

Exercice 2 - Fonctions de Chaîne de Caractères

Sélectionnez les noms des employés et convertissez-les en majuscules.

SELECT UPPER(Nom)
FROM Employes;

Exercice 3: Fonctions de Date et Heure

Trouvez tous les employés qui ont été embauchés cette année.

SELECT *
FROM Employes
WHERE YEAR(Date_Embauche) = YEAR(NOW());