Langage SQL - Support 2023-2024
Langage SQL - Support 2023-2024
Langage SQL - Support 2023-2024
PRATIQUE SQL |
LE LANGAGE SQL
1. Introduction
1.1. Langage de requêtes
En effet, les SGBD doivent implémenter deux langages :
• Un Langage de Définition de Données (LDD) qui permet de créer le schéma
conceptuel de la base de données, les schémas externe, physique, ...
• Un Langage de Manipulation de Données (LMD) qui permet d'interroger la base
de données bien sûr, mais aussi de la modifier (créer, supprimer ou modifier
des enregistrements)
1 sur 24
Pratique SQL IAI-TOGO (2023-2024)
2 sur 24
Pratique SQL IAI-TOGO (2023-2024)
Tous les SGBD relationnels devaient être conformes à SQL2 "entry" pour la fin de
l'année 1993, à SQL2 "intermediate" pour la fin de l'année 1994. Ces normes actent
l'évolution d'un simple langage d'accès à une BD relationnelle (SQL1) vers un langage
de programmation BD (SQL3). SQL devient aussi un langage d'échange de données
entre SGBD relationnels dans un contexte réparti. L'extension vers l'objet relationnel
rend ce langage complexe et finalement non accessible à un utilisateur final, ce qui
initialement était un but recherché.
3 sur 24
Pratique SQL IAI-TOGO (2023-2024)
Chaque SGBD possède d'autres domaines qui lui sont propres. Ayez bien conscience
que toute utilisation d'élément non normalisé rend vos sources dépendant d'un
produit !
4 sur 24
Pratique SQL IAI-TOGO (2023-2024)
5 sur 24
Pratique SQL IAI-TOGO (2023-2024)
5. Langage d'Interrogation
5.1. Syntaxe générale
SELECT <liste d'attributs projetés>
FROM <liste de relations>
WHERE <liste de critères de restriction et de jointure>
3. Donner les crus des vins de millésime 1985 et de degré supérieur à 9 triés par
ordre croissant
SELECT cru
FROM vins
WHERE mil=1985 AND deg>9
ORDER BY cru;
6 sur 24
Pratique SQL IAI-TOGO (2023-2024)
FROM vins;
SELECT *
FROM vins
WHERE deg BETWEEN 8 AND 12;
7 sur 24
Pratique SQL IAI-TOGO (2023-2024)
SELECT *
FROM VINS
WHERE DEG IN (8, 9, 10, 11, 12);
NB : Cette dernière requête ne donnera de bons résultats que si tous les degrés sont
des entiers. Mais elle est mise dans ce cours à but pédagogique pour vous faire
connaître l’usage de la clause IN.
6. Donner les vins dont le cru commence par la lettre 'B' ou 'b'
SELECT *
FROM vins
WHERE cru LIKE 'B%' OR cru LIKE 'b%';
NB : Les V, P sont appelés des alias. Ils peuvent être utilisés pour ne pas à avoir à
réécrire les noms complets des relations à chaque fois qu’on les appelle.
Avez-vous remarqué la différence de taille des résultats (en nombre de tuples bien
sûr) ?
8 sur 24
Pratique SQL IAI-TOGO (2023-2024)
9 sur 24
Pratique SQL IAI-TOGO (2023-2024)
elle est assez répandue (Oracle depuis la version 9, MySQL, DB2, SQL Server par
exemple).
• Jointure naturelle : elle est utilisable lorsque les deux relations à joindre ont
(au moins) un attribut commun de même nom sur lequel doit s'effectuer la
jointure
SELECT V.nv, P.nvt
FROM vins V NATURAL JOIN productions P ;
Si on veut expliciter le ou les attributs communs sur lesquels faire la jointure (lorsque
l'on ne veut pas utiliser tous les attributs communs comme expression de jointure) :
SELECT V.nv, P.nvt
FROM vins V JOIN productions P USING (nv) ;
10 sur 24
Pratique SQL IAI-TOGO (2023-2024)
NB : MySQL n'implémente pas cet opérateur. Sous Oracle, cet opérateur se nomme
MINUS !
En cas d'ambiguïté, il faut parenthéser les requêtes.
Remarque : Attention à ne pas mélanger dans un SELECT un agrégat avec un attribut classique
(par exemple SUM(QTE) avec NOM dans l'exemple précédent). Un agrégat renvoie un résultat
unique alors qu'un attribut renvoie un ensemble de résultat. Le seul cas possible d'utilisation
d'un tel mélange est lorsqu'il y a une clause GROUP BY.
1. Donner les vins dont le degré est supérieur à la moyenne des degrés de tous
les vins
SELECT *
FROM vins
WHERE deg > (SELECT Avg (deg) FROM vins);
11 sur 24
Pratique SQL IAI-TOGO (2023-2024)
Attention : Cette requête n'est pas aussi simple qu'elle en a l'air ! En effet, si on
regarde de plus près, on s'aperçoit que la sous-requête portant sur EXPEDITIONS
utilise dans sa clause WHERE la variable n-uplet C qui est définie dans la requête
externe portant sur COMMANDES. La requête externe revient à faire une boucle sur
la relation COMMANDES avec la variable C qui prend successivement chaque valeur
de COMMANDES et la requête interne traite chaque valeur de C.
5.6.2. Exemples
1. Donner pour le cru Jurançon la moyenne des degrés de ses vins
SELECT AVG (deg)
FROM vins
WHERE cru='Jurançon' ;
12 sur 24
Pratique SQL IAI-TOGO (2023-2024)
Attention, la requête suivante est syntaxiquement incorrecte (parce que son schéma
n'est plus défini conformément au modèle relationnel) :
SELECT cru, AVG(deg)
FROM vins
WHERE cru ='Jurançon' ;
On se pose la même question mais pour tous les crus et non pas seulement le
Jurançon. Si on connait tous les crus de la base de données, on peut lancer une
requête par cru sur le modèle précédent. L'inconvénient est qu'il va falloir pas mal de
requêtes. Si on ne connait pas les crus, cette solution ne fonctionne pas. Il faut alors
absolument recourir au groupement (c'est donc là son principal intérêt) :
SELECT cru, AVG (deg)
FROM vins
GROUP BY cru ;
13 sur 24
Pratique SQL IAI-TOGO (2023-2024)
agrégats. Il n'y a jamais d'expression de restriction sur les valeurs des attributs dans
la clause HAVING !
Exemple : Donner les crus et les moyennes de degré des vins associés, si aucun vin
du cru considéré n'a de degré supérieur ou égal à 12
SELECT cru, AVG(deg)
FROM vins
GROUP BY cru
HAVING MAX(deg)< 12 ;
qui donne pour chaque cru la moyenne des degrés des vins de degré inférieur à 12
(elle correspond à la requête initiale mais travaillant non pas sur la relation VINS
toute entière, mais seulement les tuples de degré inférieur à 12).
Exemple : Numéro et nom du (ou des) buveurs ayant fait la plus grosse commande
SELECT B.nb, B.nom
FROM buveurs B, commandes C
WHERE B.nb = C.nb
AND C.qte >= ALL ( SELECT qte FROM commandes ) ;
14 sur 24
Pratique SQL IAI-TOGO (2023-2024)
15 sur 24
Pratique SQL IAI-TOGO (2023-2024)
Attention, cette écriture n'est correcte que parce que l'on est sûr (par définition) que
l'ensemble des vins produits par un viticulteur est inclus (ou égal) dans l'ensemble des
vins de la base de données.
5.9. Synthèse
5.9.1. Expression des conditions de restriction
Condition de recherche :
• Sélection de tuples (clause WHERE) et sélection de groupes (clause HAVING)
• Composition de conditions élémentaires à l'aide des connecteurs logiques :
NOT, AND, OR
• Evaluée à Vrai ou Faux (ou Inconnu)
Conditions élémentaires :
• Exprimée à l'aide d'un prédicat
• Evaluée à Vrai ou Faux (ou Inconnu)
• Liste des prédicats SQL
• Comparaison : =, <, <=, >=, >, <> entre un attribut et une valeur ou entre deux
attributs
• Intervalle : BETWEEN
• Comparaison de chaîne : LIKE
• Test de nullité : IS NULL
• Appartenance : IN
• Quantification: EXISTS, ANY, ALL
16 sur 24
Pratique SQL IAI-TOGO (2023-2024)
(1) FROM <liste relations Ri> (1) Produit cartésien des relations Ri
(2) WHERE <condition sur tuples C1> (2) Sélection des tuples de (1) vérifiant C1
(5) ORDER BY <liste attributs Al> (5) Tri des groupes obtenus en (4) suivant les valeurs des Al
Requête SQL
SELECT B.nom, Sum(C.qte)
FROM buveur B, commandes C
WHERE B.nb=C.nb AND B.ville = 'Bordeaux'
GROUP BY B.nb, B.nom
HAVING MIN(C.qte) > 20
ORDER BY B.nom ;
Attention, ici on groupe par numéro puis par nom de buveur, parce que la clé de
BUVEURS est le numéro (et non pas le nom) et donc que l'on peut rajouter n'importe
quel attribut dans la partition après la clé sans changer les partitions construites. Si
on ne groupe que par le nom, le résultat peut être erroné (rien ne garantit qu'il n'y a
pas deux buveurs de même nom) et si on groupe par numéro seulement, on ne pourra
pas sélectionner le nom qui ne sera pas dans les attributs de partitionnement.
17 sur 24
Pratique SQL IAI-TOGO (2023-2024)
Si quelques attributs seulement sont renseignés, il faut préciser leur nom. Les
attributs non renseignés prennent alors la valeur NULL.
INSERT INTO vins (nv, cru) VALUES (200, 'Gamay') ;
18 sur 24
Pratique SQL IAI-TOGO (2023-2024)
UPDATE VITICULTEURS
SET VILLE = 'Bordeaux'
WHERE NVT = 150 ;
19 sur 24
Pratique SQL IAI-TOGO (2023-2024)
ANNEXE
20 sur 24
Pratique SQL IAI-TOGO (2023-2024)
21 sur 24
Pratique SQL IAI-TOGO (2023-2024)
22 sur 24
Pratique SQL IAI-TOGO (2023-2024)
1. Introduction...................................................................................................... 1
1.1. Langage de requêtes ................................................................................... 1
1.2. Langages de manipulation formels ............................................................. 1
1.3. Langages de requêtes orientés utilisateur ................................................... 1
1.4. Lien avec les langages de programmation ................................................... 1
2. Présentation de SQL : fonctionnalités ............................................................... 1
2.1. Langage de définition de données ............................................................... 1
2.2. Langage de manipulation de données ......................................................... 2
2.3. Puissance du langage de manipulation ....................................................... 2
2.4. Origine ....................................................................................................... 2
2.5. Normalisation ISO ...................................................................................... 2
3. Base de données exemple ................................................................................. 3
4. Définition et contrôle des données .................................................................... 3
4.1. Introduction ............................................................................................... 3
4.2. Domaines de base ...................................................................................... 3
4.3. Schéma d’une base de données .................................................................. 4
4.4. Schéma d'une relation ................................................................................ 4
4.4.1. Création d'un schéma de relation ......................................................... 4
4.4.2. Ajout d'un attribut ............................................................................... 5
4.4.3. Suppression d'un schéma de relation (norme SQL2 !)........................... 5
4.5. Contraintes d'intégrité ................................................................................ 5
4.5.1. Définition ............................................................................................. 5
4.5.2. Contraintes définies en SQL1 ............................................................... 5
4.5.3. Contraintes définies en SQL2 ............................................................... 5
5. Langage d'Interrogation .................................................................................... 6
5.1. Syntaxe générale ........................................................................................ 6
5.2. Requêtes mono-relation .............................................................................. 6
5.3. Expression de jointure ................................................................................ 8
5.3.1. Expression de jointure de manière procédurale : les blocs select
imbriqués ......................................................................................................... 9
5.3.2. Expression d'une auto-jointure ............................................................ 9
5.4. Opérateurs ensemblistes .......................................................................... 10
23 sur 24
Pratique SQL IAI-TOGO (2023-2024)
24 sur 24