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.
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.
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.
Les sous-requêtes peuvent également être utilisées dans la liste de sélection pour retourner des valeurs calculées.
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 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.
Ces fonctions manipulent ou retournent des informations sur des chaînes de caractères.
Ces fonctions sont utilisées pour manipuler les types de données de date et d'heure.
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
);
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');
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)
);
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);
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);
Sélectionnez les noms des employés et convertissez-les en majuscules.
SELECT UPPER(Nom)
FROM Employes;
Trouvez tous les employés qui ont été embauchés cette année.
SELECT *
FROM Employes
WHERE YEAR(Date_Embauche) = YEAR(NOW());