Destiné à plusieurs utilisateurs, SQL est le langage standard de définition et de manipulation de bases de données relationnelles.
Il peut être utilisé sous deux formes: soit sous forme interactive soit intégré dans une application (Oracle, Sybase, Microsoft SQL Server, Access, Ingres, etc.)
1. Récupérer des données d'une table
Syntaxe :
SELECT attribut1, attribut2 ...
FROM table
[ WHERE critère ] ;
Opérateurs
Opérateurs | Signification |
---|---|
= | égalité |
< | plus petit que |
> | plus grand que |
<= | plus petit ou égal |
>= | plus grand ou égal |
<> | différent |
LIKE | qui ressemble à |
BETWEEN ... AND ... | compris entre ... et ... |
1.1. Récupérer une ou plusieurs colonnes (projection)
1.1.1. Récupérer toutes les colonnes d'une table
Exemple :
Écrire la requête suivante : récupérer toute la relation client.
SELECT*
FROM client ;
1.1.2. Récupérer des colonnes spécifiques
Exemple :
Écrire la requête suivante : récupérer les colonnes idClient, carteDeCrédit de la relation commande.
SELECT idClient, carteDeCrédit
FROM commande ;
Exemple :
Écrire la requête suivante : récupérer, sans les doublons, les colonnes idClient, carteDeCrédit de la relation commande.
SELECT DISTINCT idClient, carteDeCrédit
FROM commande
1.1.3. Récupérer des colonnes spécifiques et les ordonner
Exemple :
Écrire la requête suivante : récupérer les colonnes civilité, nom, prénom ; les enregistrements étant rangés dans l'ordre croissant du nom (ordre alphabétique).
SELECT civilité, nom, prénom
FROM commande
ORDER BY nom ;
Exemple :
Écrire la requête suivante : récupérer les colonnes civilité, nom, prénom ; les enregistrements étant rangés dans l'ordre croissant du code postal et, selon le code postal suivant le nom.
SELECT civilité, nom, prénom
FROM commande
ORDER BY codePostal, nom ;
Exemple :
Écrire la requête suivante : récupérer les colonnes civilité, nom, prénom ; les enregistrements étant rangés dans l'ordre croissant du code postal et, selon le code postal suivant le nom.
SELECT civilité, nom, prénom
FROM commande
ORDER BY codePostal, nom ;
1.2. Récupérer une ou plusieurs lignes (Sélection)
1.2.1. Récupérer des lignes spécifiques
Exemple :
Écrire la requête suivante : récupérer toutes les clientes (les enregistrements des clients dont la civilité est Madame).
SELECT *
FROM client
WHERE civilité = "Madame" ;
Exemple :
Écrire la requête suivante : récupérer tous les clientes dont le compte est positif.
SELECT *
FROM client
WHERE compte > 0 ;
Exemple :
Écrire la requête suivante : récupérer tous les clients dont le nom commence par « Po ».
SELECT *
FROM client
WHERE nom LIKE 'P0%' ;
Exemple :
Écrire la requête suivante : récupérer tous les clients dont le prénom se termine par un a.
SELECT *
FROM client
WHERE prénom LIKE '%a' ;
Exemple :
Écrire la requête suivante : récupérer tous les clients ne résidant pas à Paris.
SELECT *
FROM client
WHERE commune <> "Paris" ;
Exemple :
Écrire la requête suivante : récupérer tous les clients ne résidant dont le compte est compris entre 25 et 100.
SELECT *
FROM commande
WHERE dateCom BETWEEN "2021-01-01" AND "2021-07-01" ;
1.2.2. Récupérer des valeurs spécifiques (Projection puis sélection)
Exemple :
Écrire la requête suivante : récupérer civilité, nom et prénom des clients parisiens.
SELECT civilité, nom, prénom
FROM client
WHERE commune = "Paris" ;
Exemple :
Écrire la requête suivante : récupérer nom et prénom des clientes de Paris.
SELECT civilité, nom, prénom
FROM client
WHERE civilité = "Madame" AND commune = "Paris" ;
2. Récupérer des données de plus d'une table
2.1. Équi-jointure (jointure naturelle)
Elle s'effectue à partir de la relation clé primaire - clé secondaire.
Syntaxe :
SELECT attribut1, attribut2...
FROM table1 NATURAL JOIN table2;
Exemple :
Écrire la requête suivante : récupérer les commandes passées par chaque client.
SELECT civilité, nom, prénom
FROM client NATURAL JOIN commande
2.2. θ-Jointure
L'équi-jointure est équivalente à :
SELECT attribut1, attribut2...
FROM table1 CROSS JOIN table2
WHERE table1.clé_primaire = table2.cle_etrangère ;
ou à :
SELECT attribut1, attribut2...
FROM table1 JOIN table2 USING (clé_primaire) ;
ou encore à :
SELECT attribut1, attribut2...
FROM table1 JOIN table2
ON table1.clé_primaire = table2.cle_etrangère ;
ou plus simplement :
SELECT attribut1, attribut2...
FROM table1, table2
WHERE table1.clé_primaire = table2.cle_etrangère ;
Exemple :
Écrire la requête suivante : récupérer les commandes effectuées par Monsieur Portis.
SELECT civilité, nom, prénom
FROM client NATURAL JOIN commande
WHERE client.idClient = 3 ;
ou :
SELECT civilité, nom, prénom
FROM client, commande
WHERE client.idClient = commande.idClient AND client.idClient = 3 ;
2.3. Jointure de plus de deux tables
Exemple :
Écrire la requête suivante : récupérer les produits commandés par Monsieur Portis.
SELECT nom, prénom, désignation
FROM client, commande, détailCommande, produit
WHERE client.idClient = commande.idClient
AND commande.idCom = détailCommande.idCom
AND détailCommande.idProd = produit.idProd;
3. Renommage d'une table
Exemple :
La requête précédente s'écrit :
SELECT nom, prénom, désignation
FROM client AS cl, commande AS co, détailCommande AS d, produit AS p
WHERE cl.idClient = co.idClient
AND co.idCom = d.idCom
AND d.idProd = p.idProd ;
ou encore :
SELECT nom, prénom, désignation
FROM client cl, commande co, détailCommande d, produit p
WHERE cl.idClient = co.idClient
AND co.idCom = d.idCom
AND d.idProd = p.idProd ;
Fonctions d'agrégation
1. Compter le nombre de lignes d'une table : la fonction COUNT
Exemple :
Écrire une requête qui permet de déterminer le nombre de clients (nombre de lignes de la table client).
SELECT COUNT(*)
FROM client
Avec renommage :
SELECT COUNT(*) AS nbre_client
FROM client
Un autre exemple :
Écrire une requête qui permet de déterminer le nombre de commandes effectuées par Monsieur Portis Emmanuel.
SELECT COUNT(*)
FROM client, commande
WHERE client.idClient = commande.idClient AND client.nom = 'Portis'
2. Calculer la somme des valeurs d'une colonne d'un ensemble de lignes : la fonction SUM
Exemple :
Écrire une requête qui permet de déterminer le montant de toutes les commandes de Monsieur Portis.
SELECT SUM(totaux)
FROM client, commande
WHERE client.idClient = commande.idClient AND client.nom = 'Portis'
3. Calculer la dépense moyenne de Monsieur Portis par commande : la fonction AVG
Exemple :
Écrire une requête qui permet de déterminer le montant moyen d'une commande de Monsieur Portis.
SELECT AVG(totaux)
FROM client, commande
WHERE client.idClient = commande.idClient AND client.nom = 'Portis'
La clause GROUP BY
La clause GROUP BY n'est valide que lorsqu'elle est utilisée conjointement avec l'une des fonctions d'agrégation SQL, telles que COUNT, MIN, MAX, AVG et SUM.
Exemple :
Écrire une requête qui permet de déterminer le nombre de commande de chaque client.
SELECT nom, prénom, COUNT(*)
FROM client, commande
WHERE client.idClient = commande.idClient
GROUP BY nom
Modifier une base de données
1. Ajouter un n-uplet à une table
Exemple :
Écrire une requête qui permet d'ajouter, dans la table client, Madame Ngassa Hermine résidant à 18, rue de la Libération 91100 Corbeil Essonnes avec un compte de -600 €.
INSERT INTO client (civilité, nom, prénom, adresse, codePostal, commune, compte)
VALUES (111, 'Madame', 'Ngassa', 'Hermine', '18 rue de la Libération', 91100, 'Corbeil-Essonnes')
2. Mettre à jour un n-uplet
UPDATE nom_de_la_table
SET colonne1 = nouvelle_valeur, colonne2 = nouvelle_valeur, ...
WHERE critère d'identification du n-uplet à mettre à jour
Exemple :
On s'est trompé, Monsieur Traoré se prénomme plutôt Ahmed.
Écrire une requête qui permet de corriger cette malencontreuse erreur.
UPDATE client
SET prénom = "Ahmed"
WHERE nom = "Traoré"
-
Exemple :
-
Bangoua-Enterprise souhaite offrir un bonus de 10 € à tous les clients dont le compte est supérieur à 100 €.
Écrire une requête permettant de réaliser cet objectif. -
Monsieur Portis décide de doubler, dans ces commandes, les quantités.
Écrire une requête permettant de réaliser cet objectif.
3. Supprimer un n-uplet
DELETE FROM nom_de_la_table
WHERE critère d'identification du n-uplet à supprimer
Exemple :
Écrire une requête qui permet de supprimer le client nommé Ngassa.
DELETE FROM client
WHERE idClient = 111