Bases de données relationneles : sql

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.)

client
fournisseur
commande
detailCommande

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 :
  1. 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.
  2. 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

Faites-vous plaisir 1 :