Cours BDD p4 SQL
Cours BDD p4 SQL
Ingénieur Docteur
Lamine BOUGUEROUA
Le langage SQL
Introduction
Norme
Définition des données
Manipulation des données
2
Introduction
Le langage SQL :(Structured Query Language)
3
SQL vs. Algèbre relationnel
On se focalise sur l’implantation de l’algèbre relationnelle dans un
langage pratique nommé SQL.
Plus de distinction entre schéma de relation et relation : notion de table
pour désigner les deux
Une table SQL n’est pas un ensemble de tuples, mais un multi-
ensemble de tuples (ou bag)
Exemple { 1,2,2,3 } est un multi-set, i.e. plusieurs occurrences possibles de
la même valeur, pas d’ordre.
Problème : les propriétés usuelles sur les ensembles ne sont plus toujours
vérifiées sur les multi ensembles.
4
Norme
Le langage SQL :(Structured Query Language)
SQL86
– version préliminaire
• SQL92 (SQL2)
– Support accru de l ’intégrité
– Le standard le plus répandu
• SQL-99 (SQL3)
– Extensions objet (UDT),
– requêtes récursives, déclencheurs,…
• SQL:2003 :
– introduction de fonctions pour la manipulation XML,…
5
Définition
Le langage SQL :(Structured Query Language)
Remarques :
SQL est un langage de requête, pas un langage de programmation
Une instruction SQL peut s'écrire sur plusieurs lignes. Pour être
exécutée, l'instruction doit se terminer par un point-virgule
Il n'y pas de variables ni de structures de contrôles (if, while, for)
SQL est intégré dans les langages de programmation comme
PL/SQL, C ou Java
6
Définition
Le langage SQL :(Structured Query Language)
Terminologie :
Quelque terme change entre algèbre relationnelle et SQL
7
Types des données
Dans les normes de SQL nous distinguons plusieurs types de données,
quelques exemples:
8
Types des données
Exemple :
Type Exemple
INTEGER 2, 3, 459
REAL 3.27E-4, 24E5
DOUBLE PRECISION 3.27265378426E-4, 24E12
NUMERIC [p, l] , DEC[p,l] 2.5, 456.342, 6
DATE '1998-08-25'
TIMESTAMP '1998-08-25 [Link].25'
9
Instructions SQL
Les instructions SQL sont regroupées en catégories en fonction de leur
utilité et des entités manipulées. Nous pouvons distinguer cinq
catégories, qui permettent :
La définition des éléments d’une base de données (tables, colonnes,
clefs, index, contraintes, . . .)
La manipulation des données (insertion, suppression, modification, …)
La gestion des droits d’accès aux données (acquisition et révocation
des droits)
La gestion des transactions
Le SQL intégré
10
Instructions SQL
SQL est alors décomposé en 5 parties :
1. LDD (langage de définition des données) : permet de modifier la structure de
la base de données
5. SQL procedural : est un ensemble d'outils pour que SQL s'interface avec des
langages hôtes
Remarque :
11
Langage de manipulation des données
LMD (langage de manipulation des données) : permet de consulter /
modifier le contenu de la base de données
Plan :
– Insertion => INSERT INTO
– Affichage / sélection => SELECT
– Mise à jour => UPDATE
– Suppression => DELETE
12
SQL – Insert Into
Le commande INSERT INTO permet d'ajouter un ou plusieurs Tuples à une
table
La syntaxe de la primitive INSERT INTO en SQL est la suivante :
INSERT INTO nom_table [(attribut1 [, attribut2]...)]
VALUES (val1, val2,...) | <clause SELECT>;
Il est également possible d'insérer des données provenant d'une autre table
par l'intermédiaire d'une commande select
13
SQL – Insert Into
INSERT INTO ([Link])
14
SQL – Insert Into
Le commande INSERT INTO – Exemple :
15
SQL - Select
Le commande SELECT permet de sélectionner des tuples d’une ou
plusieurs tables
16
SQL - Select
SELECT ([Link])
17
SQL - Select
Paramètres :
WHERE : spécifie les critères de sélection (optionnelle) qui peuvent être des
prédicats (conditions) de restriction ou de jointure
18
SQL - Select
Affichage - Exemples :
19
SQL - Select
Affichage – Condition (la clause WHERE):
– Cette condition peut inclure des opérateurs booléens (AND, OR, NOT), des
conditions élémentaires et des parenthèses
20
SQL - Select
Affichage – Prédicats :
21
SQL - Select
Affichage – Prédicats - suite :
22
SQL - Select
Affichage - Exemples :
23
SQL - Select
Affichage - Exemples :
Réponse :
SELECT * FROM VOITURE
WHERE Puissance <= 6 OR Prix >= 10 000;
Affichage
24
SQL - Select
Affichage - Exemples :
Réponse :
SELECT * FROM VOITURE
WHERE NOT (Puissance= 6);
Affichage
25
SQL - Select
Affichage - Exemples :
Affichage
26
SQL - Select
Affichage - Exemples :
Affichage
27
SQL – fonctions statistiques
Affichage – Fonctions statistiques :
28
SQL – fonctions statistiques
Affichage – Fonctions statistiques :
29
SQL – fonctions statistiques
Affichage - Exemples :
Questions :
− Quel est le prix maximal d’une voiture?
− Quel est le prix maximal d’une Renault?
Réponses :
SELECT MAX(prix) FROM VOITURE;
Affichages
Max(prix)
16000
Max(prix)
10000
30
SQL – fonctions statistiques
Affichage - Exemples :
Questions :
− Quel est le nombre de Tuples de la table VOITURE?
− Quel est le nombre de marque de voitures ?
Réponses :
SELECT COUNT(*) FROM VOITURE;
Affichages : Count(*)
6
Count(distinct marque)
4
Attention : sans distinct, les doublons seront considérés
31
SQL – fonctions statistiques
Affichage - Exemples :
Questions :
− Quel est la somme des prix des voitures ayant une Puissance de 5
chevaux?
− Quel est le prix moyen des voitures de 5 chevaux?
Réponses :
SELECT SUM(Prix) FROM VOITURE WHERE
Puissance=5;
32
SQL – Group By / Having
Affichage :
HAVING : définit les conditions que les groupes doivent respecter pour
être retenus, elle sélectionne les partitions désirées
– Elle ne peut comprendre que des conditions dont le premier terme est une
fonction statistique
– La clause HAVING est aux groupes (GROUP BY) ce que la clause WHERE
est aux lignes (SELECT)
33
SQL – Group By / Having
Fonctions statistiques - Exemples :
Questions :
− Quel est la somme des prix des voitures selon la Puissance dans la
table VOITURE?
Réponses :
Affichages :
SUM(Prix) Puissance
23 500 5
13000 6
15250 7
34
SQL – Group By / Having
Fonctions statistiques - Exemples :
Questions :
− Quel est la somme des prix des voitures selon la Puissance dans la
table VOITURE (calculer le prix maximum sur ces partitions et limiter
l’affichage aux partitions contenant au moins 2 éléments)?
Réponses :
SELECT SUM(Prix), Puissance FROM VOITURE
GROUP BY Puissance HAVING COUNT(*) > 1 ;
Affichages :
SUM(Prix) Puissance
23 500 5
15250 7
35
SQL – Tri
Affichage :
Dans une requête SQL, la clause ORDER BY se situe juste après une
clause WHERE ou après une clause GROUP BY
36
SQL – Tri
Fonctions statistiques - Exemples :
Questions :
− Afficher l'ensemble des Tuples de la table VOITURE triés sur
l'attribut Puissance selon un ordre croissant
Réponses :
Affichages :
37
SQL – Tri
Fonctions statistiques - Exemples :
Questions :
− Afficher l'ensemble des Tuples de la table VOITURE triés sur
l'attribut Puissance selon un ordre décroissant puis sur l'attribut
Couleur (ordre alphabétique) selon un ordre croissant
Réponses :
SELECT * FROM VOITURE ORDER BY Puissance DESC, Couleur;
Affichages :
Immatriculation Marque Couleur Puissance Prix
156AMN86 Renault Bleue 7 5 250
123ABC75 Renault Rouge 7 10 000
123ATT77 Rover Bleue 6 13 000
956BZD59 Peugeot Jaune 5 16 000
123ABC92 Peugeot Noire 5 2 500
698KLM45 Citroën Verte 5 5 000
38
SQL – opérateurs relationnels
Opérateurs relationnels :
39
SQL – opérateurs relationnels
Opérateurs relationnels - Exemples :
Questions :
− Afficher l'ensemble des Tuples de la table VOITURE dont la
Puissance est égale à 5 ou à 7 chevaux
Réponses :
SELECT * FROM VOITURE WHERE Puissance=‘5’
UNION SELECT * FROM VOITURE WHERE Puissance=‘7’;
Affichages :
Immatriculation Marque Couleur Puissance Prix
123ABC75 Renault Rouge 7 10 000
123ABC92 Peugeot Noire 5 2 500
698KLM45 Citroën Verte 5 5 000
956BZD59 Peugeot Jaune 5 16 000
156AMN86 Renault Bleue 7 5 250
40
SQL – Jointure
La jointure :
USING peut être utilisé si la condition de jointure concerne une colonne ayant le
même nom dans les deux « collections de données » de la jointure
41
SQL – Jointure
La jointure : les types de jointures possibles :
INNER JOIN (par défaut) : toutes les paires correspondantes des lignes
renvoyées et supprime les lignes n'ayant pas de correspondance entre les deux
tables
NATURAL JOIN : s’effectue à la condition qu’il y ai des colonnes du même
nom et de même type dans les 2 tables
CROSS JOIN (produit cartésien) : toutes les paires possibles sont renvoyées.
42
SQL – Jointure
Jointure - Exemples :
43
SQL – Jointure
Jointure - Exemples :
Questions :
− Afficher l’immatriculation, la marque et la couleur d’une voiture qui
existe dans la table Marque (jointure interne)
Réponses :
SELECT immatriculation, [Link], couleur FROM Voiture, Marque
WHERE [Link]=[Link];
Affichages :
Immatriculation Marque couleur
123ABC75 Renault Rouge
123ABC92 Peugeot Noire
956BZD59 Peugeot Jaune
156AMN86 Renault Bleue
44
SQL – Jointure
Jointure - Exemples :
Questions :
− Afficher les informations d’une voiture (jointure externe gauche avec
la table Marque)
Réponses :
SELECT * FROM Voiture LEFT JOIN Marques USING (marque);
Affichages :
45
SQL – requête imbriquée
Remarque :
Exemples :
Questions :
− Donner la requête qui permet d'afficher tous les Tuples de la table
VOITURE dont le prix est supérieur à la moyenne des prix de tous
les Tuples de cette même table
Réponses :
SELECT * FROM VOITURE
WHERE Prix > (SELECT AVG(Prix) FROM VOITURE) ;
46
SQL – requête imbriquée
Remarque :
En fonction des conditions que l'on veut exprimer au niveau des valeurs
renvoyées par la requête, on peut utiliser les prédicats IN, ANY, ALL ou
EXISTS :
ALL : permet de vérifier si la condition est réalisée pour toutes les valeurs de
la liste
47
SQL – requête imbriquée
Exemple:
Questions :
− Produire les informations au sujet des CLIENTS qui ont passé au
moins une commande
− Commandes passées après la dernière Livraison (date ultérieure)
Réponses :
48
SQL – Update
Mise à jour (UPDATE):
Il est possible de faire des mise à jour des données d’une BDD
UPDATE <nom_table>
SET <attribut1> = <expression1>, <attribut2> = <expression2> ...
[WHERE <condition>];
49
SQL – Update
Mise à jour (UPDATE):
50
SQL – Update
Update - Exemples :
Questions :
− Donner la requête qui permet d'augmenter le Prix de vente de 10%
de tous les Tuples de la table VOITURE
− Donner la requête qui permet d'augmenter le Prix de vente de 10%
des voiture de marque Renault
Réponses :
51
SQL – Delete
Suppression (DELETE):
Il est possible de supprimer des Tuples ou une partie des Tuples d’une
table
52
SQL – Delete
DELETE ([Link]):
53
SQL – Delete
DELETE - Exemples :
Questions :
− Donner la requête qui supprime tous les Tuples de la table VOITURE
− Donner la requête qui supprime les voitures de marque Renault
Réponses :
54
Résumé
Manipulation des données
1. Création des données => INSERT INTO
2. Consultation des données => SELECT
3. Modification des données => UPDATE
4. Suppression des données => DELETE
55
Recommandations
Quelques recommandations :
1. Utilisez les bases de données relationnelles pour gérer des relations =>
ce n’ai pas pour faire de la gestion de fichiers.
2. Privilégiez une clé purement informatique à une clé purement
sémantique.
3. Sélectionnez que les données utiles => évitez ce type de requêtes :
SELECT * .
4. Utilisez du SQL dynamique pour des requêtes SQL simples =>
construisez votre requête comme une chaîne de caractères et
exécutez-la.
5. Utilisez des index, mais à bon escient.
6. Simplifier et réécrivez les questions => optimise les requêtes.
7. Utilisez le moins possible d’objets temporaires => requête imbriquée
et/ou des fonctions.
8. N’utilisez pas le SELECT MAX(…) + 1 pour générer une clé => plutôt
auto incrément ou séquence selon le SGBD utilisé.
56
ANNEXE
57
Langage de définition des données
LDD (langage de définition des données) : permet de modifier la
structure de la base de données
Les instructions du LDD sont : CREATE, ALTER, DROP, RENAME,
AUDIT, NOAUDIT, ANALYZE, TRUNCATE
Plan :
− Les objets : table, schéma, vues
− Création des objets
− Modification des objets
− Suppression
58
Langage de définition des données - objet
Schéma: BDD
Schéma1 Schéma2 accès
accès tableB
tableA
tableA
utilisateur2
utilisateur1
Dans la pratique, tout utilisateur créant un objet dans une base de données,
engendre systématiquement un schéma
L'accès aux objets d'un schéma par un utilisateur quelconque, s'effectue par
l'intermédiaire du nom du propriétaire associé à celui de l'objet :
nom_utilisateur.nom_objet
Chaque objet dans une base de données créé par un utilisateur est ainsi
clairement identifié par le couple proprié[Link], évitant d'une part
d'éventuels noms doubles et d'autre part, des problèmes de sécurité
59
Langage de définition des données - objet
Vues (VIEW): BDD
Schéma1 Schéma2
tableB
tableA utilisateur1
accès
vueB
Une vue est une relation virtuelle au sens où ses instances n'existent
pas physiquement mais sont calculées dynamiquement à chaque
invocation de la vue
Une vue est définie par une requête ‘SELECT’ qui utilise des relations
(tables) ou des vues existantes
A la différence d'une table, une vue ne consomme pas d'espace de
stockage physique
Les vues peuvent servir à recueillir des données régulièrement
consultées et mises à jour
Les vues sont souvent employées pour des raisons de sécurité (il
possible de ne montrer qu'une partie des données d'une table)
60
Langage de définition des données - objet
Création d’un objet(CREATE) :
61
Langage de définition des données - objet
CREATE ([Link]) :
relational_properties
column_definition
62
Langage de définition des données - objet
63
Langage de définition des données - objet
Création d’un objet : CREATE
S'il y a plusieurs contraintes sur un attribut, elles sont séparées par des
virgules
Exemple :
//l'âge d'une personne ne peut pas être négatif et ne dépasse pas les 150 ans
CHECK (age>=0 and age<=150)
64
Langage de définition des données - contraintes
Règles d’usage des contraintes :
Exemple :
65
Langage de définition des données - contraintes
Création d’un objet :
Exemple :
66
Langage de définition des données - contraintes
Règles d’usage des contraintes :
67
Langage de définition des données - contraintes
Création des tables – Exemple 1 :
68
Langage de définition des données - contraintes
Création des tables – Exemple 2 :
69
Langage de définition des données - vues
VUES:
70
Langage de définition des données - vues
VUES:
Après sa création, une vue peut être utilisée de la même façon qu'une
table
71
Langage de définition des données - vues
VUES - Exemples:
72
Langage de définition des données - schéma
Schéma:
Remarques :
//Permet de connaître le schéma d'une table créée précédemment (sous Oracle) :
DESC nom_schéma
// sous MySQL :
SHOW nom_schéma
73
Langage de définition des données - MAJ
Modification d’un objet table :
//Renommer un attribut
RENAME COLUMN old_attribute_name TO new_attribute_name
// Renommer une table
RENAME TO new_table_name
74
Langage de définition des données - MAJ
Modification d’un objet table - suite :
75
Langage de définition des données - SUP
Suppression d’un objet(DELETE) :
La Syntaxe pour la suppression d'une table en SQL est la suivante :
DROP TABLE nom_table;
DROP TABLE nom_table CASCADE;
− Avant de supprimer une table, il faut supprimer toutes les références à cette
table dans les autres tables (ou utiliser le CASCADE CONSTRAINTS)
− Avant de supprimer une table, il faut avoir redéfini ou supprimé toutes les
vues impliquant cette table (nous reviendrons un peu plus loin sur la
définition des vues)
− La suppression d'une table implique de redéfinir ou supprimer toutes les
requêtes impliquant la table supprimée.
76
Langage de contrôle des données
LCD (langage de contrôle des données) : permet de gérer les privilèges,
c'est-à-dire les utilisateurs et les actions qu'ils peuvent entreprendre
Plan :
– GRANT : permet d'attribuer un privilège à différents utilisateurs sur
différents objets
– REVOKE : permet de révoquer, c'est-à-dire "retirer" un privilège
77
Langage de contrôle des données
LCD – GRANT:
78
Langage de contrôle des données
GRANT - Exemples :
− Requête qui donne l'ensemble des droits d'accès aux utilisateurs user2
et user3 uniquement sur les colonnes Immatriculation et Prix de la table
VOITURE
GRANT ALL PRIVILEGES (Immatriculation, Prix) ON VOITURE TO user2, user3;
− La requête suivante permet de donner à user2 tous les droits sur la table
VOITURE, il lui accorde également l'autorisation de transférer ces
privilèges
GRANT ALL PRIVILEGES ON VOITURE TO user2 WITH GRANT OPTION;
79
Langage de contrôle des données
LCD – REVOKE:
CASCADE
Entraînera la révocation des
RESTRICT
droits cédés à la manière d'un
Si le ou les utilisateurs visés ont cédés château de carte
leurs droits à d'autres, un message d'erreur
apparaîtra et le SGBDR refusera de
révoquer le ou les droits
80
Langage de contrôle des transactions
Plan :
– Propriétés ACID
– COMMIT : permet à l'utilisateur de fixer le moment où les
modifications en cours affecteront la base de données
– ROLLBACK : permet à l'utilisateur de ne pas valider les dernières
modifications en cours dans la base de données
81
Langage de contrôle des transactions
Session
SQL
82
Langage de contrôle des transactions
ACID :
Isolation : les transactions sont isolées les unes des autres. Les effets de la
transaction ne sont pas perceptibles tant que celle-ci n’est pas terminée
Durabilité : une fois validée, une transaction doit perdurer, c'est-à-dire que les
données sont persistantes même s'il s'ensuit une défaillance dans le système
83
Langage de contrôle des transactions
COMMIT :
Une transaction (ou une partie de transaction) qui n'a pas encore été
enregistrée définitivement n'est visible que pour l'utilisateur qui
l'introduit
84
Langage de contrôle des transactions
ROLLBACK :
85
Division
Exemple :
Question :
Quels sont les étudiants qui sont notés sur l’ensemble des modules ?
Et1 BDD
Et2 Java
Et3 STAT
Et4 ELEC
Il suffit de trouver les étudiants qui sont reliés à TOUS les modules.
Table notes :
IdEtudiant, idModule, note
Table modules :
IdModule, nom module
Solution :
Division de notes par modules
87
Division
Implémentation 1 :
88
Division
Implémentation 2 :
Cette requête recherche les étudiants pour qui il n’existe pas de module
qu’ils ne sont pas notés
89
Division
Implémentation 3 :
90