Академический Документы
Профессиональный Документы
Культура Документы
Bases de données
SQL
E.Coquery
emmanuel.coquery@liris.cnrs.fr
Bases de données
SQL
Un langage concret interagir avec le modèle relationnel :
Un langage de manipulation de données.
Un langage de description de données.
Un langage pour administrer la base, gérer les contrôles
d’accès.
Origine : IBM, dans les années 70.
Standards :
SQL-87 : 1987 (ISO)
SQL-2 : 1992 (ANSI)
SQL-3 : 1999
SQL-2003
SQL-2006
Différences avec la théorie :
possibilités de doublons ;
possibilité d’ordonner le résultat des requêtes ;
notion de valeur non définie.
Bases de données
Interrogation
Plan
1 Interrogation
Requêtes simples
Sur plusieurs tables
Fonctions
Aggrégats
Interrogation simple
En algèbre relationnelle :
πatt1 ,att2 ,... (nom table)
Exemple
Schéma :
πNom,Fonction (Employe)
Bases de données
Interrogation
Requêtes simples
Exemple 2
Schéma :
Employe
Bases de données
Interrogation
Requêtes simples
Exemple :
En algèbre relationnelle :
πatt1 ,att2 ,... (σcondition (nom table))
Bases de données
Interrogation
Requêtes simples
Conditions du WHERE
Expressions simples :
Comparaisons (=, !=, <, <=, >, >=)
entre un attribut et une constante ou un autre attribut
différents types de données utilisés pour les constantes :
nombres : 1, 1980, 1.5
chaı̂nes de caractères : ’Martin’, ’directeur’
dates : ’1980-06-18’
le formattage des dates peut varier
Combinaison d’expressions via :
le ’et’, ∧ : AND
le ’ou’, ∨ : OR
Bases de données
Interrogation
Requêtes simples
Exemple
Schéma :
SELECT Nom
FROM Employe
WHERE Embauche < ’1999-01-01’ ;
πNom (σEmbauche<0 1999−01−010 (Employe))
Bases de données
Interrogation
Requêtes simples
Exemple 2
Schéma :
SELECT Nom
FROM Employe
WHERE Embauche < ’1999-01-01’
AND Salaire >= 30000 ;
πNom (σEmbauche<0 1999−01−010 ∧Salaire≥30000 (Employe))
Bases de données
Interrogation
Requêtes simples
Autres conditions
Autre exemple
condition, connecteur ∧
Bases de données
Interrogation
Requêtes simples
Exemple
Schéma :
SELECT Nom
FROM Employe
WHERE Num dept=20
ORDER BY Salaire DESC, Nom ;
Bases de données
Interrogation
Sur plusieurs tables
Jointures naturelles
Exemple
Schéma :
Batiment(Num bat, Nom bat, Ent princ, Ent Sec)
Departement(Num dept, Nom dept, Num bat)
Renommages
Exemple
Schema :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Exemple 2
Schema :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Quels sont les employés, donnés avec leur salaire, qui gagnent
moins que Bellot ?
Sous-requêtes
Exemple
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
SELECT Nom
FROM Employe
WHERE Fonction =
(SELECT Fonction
FROM Employe
WHERE Nom=’Jones’) ;
Bases de données
Interrogation
Sur plusieurs tables
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
SELECT Nom
FROM Employe Emp
WHERE Num dept !=
(SELECT Num dept
FROM Employe
WHERE Emp.Num sup = Num) ;
Bases de données
Interrogation
Sur plusieurs tables
Exemple
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Quels sont les employés, donnés avec leur salaire, gagnant plus que
tous les employés du département 20 ?
Exemple 2
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
SELECT Nom
FROM Employe Chef
WHERE EXISTS (SELECT Nom
FROM Employe
WHERE Employe.Num sup = Chef.Num) ;
Bases de données
Interrogation
Sur plusieurs tables
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
SELECT Nom
FROM Employe
WHERE (Fonction, Num sup) = (SELECT Fonction, Num sup
FROM Employe
WHERE Nom=’Bellot’) ;
Bases de données
Interrogation
Sur plusieurs tables
Sous-requêtes imbriquées
Opérations ensemblistes
Exemple
Schéma :
Employe1(Nom, Num, Fonction, NumSup, Embauche, Salaire, NumDept)
Employe2(Nom, Num, Fonction, Numsup, Embauche, Salaire, NumDept)
Liste des département ayant des employé dans 2 filiales dont les
employés sont donnés par Employe1 et Employe2 :
Expressions
Entre autres :
Fonctions et expressions arithmétiques
Fonctions sur les chaı̂nes de caractères
Fonctions sur les dates
Fonctions de conversion
Expressions - 2
Dans le SELECT :
le nom dans la relation résultat est en général l’expression
elle-même
⇒ utiliser le renommage.
Dans le WHERE :
permet d’exprimer des conditions plus complexes
Dans le ORDER BY :
il est ainsi possible de trier les lignes selon des valeur plus
complexes que de simples attributs
Bases de données
Interrogation
Fonctions
+ : unaire et binaire ;
− : unaire et binaire ;
∗ : multiplication et / : division ;
ABS(e) : valeur absolue de e ;
COS(e) : cosinus de e avec e en radians ;
SQRT (e) : racine carrée de e ;
MOD(m, n) : reste de la division entière de m par n,
vaut 0 si n = 0 ;
ROUND(e, n) : valeur arrondie de e à n chiffres après la
virgule, n optionnel et vaut 0 par défaut ;
TRUNC (e, n) : valeur tronquée de e à n chiffres après la
virgule, n optionnel et vaut 0 par défaut.
Pour ROUND et TRUNC, si n est négatif cela indique des chiffres
avant la virgule.
Bases de données
Interrogation
Fonctions
Exemple
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Exemple - 2
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Exemple - 3
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Exemple
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Fonctions de conversion
Fonction de conversion - 2
MySQL :
CAST (e AS type) ou CONVERT (e, type) : convertit e en
type.
type peut être BINARY, CHAR, DATE, TIME, DATETIME,
SIGNED, UNSIGNED
Bases de données
Interrogation
Agrégats
Exécution naı̈ve
Exécution naı̈ve - 2
Exemple
Schéma :
Departement(Num dept, Nom dept, Num bat)
Batiment(Num bat, Nom bat, Ent princ, Ent Sec)
Exemple - 2
Departement Batiment
Num dept Nom dept Num bat Num bat Nom bat Ent princ Ent Sec
10 Marketing 1 1 Turing Nord Ouest
20 Developpement 2 1 Turing Nord Ouest
30 Direction 3 1 Turing Nord Ouest
10 Marketing 1 2 Einstein Ouest NULL
20 Developpement 2 2 Einstein Ouest NULL
30 Direction 3 2 Einstein Ouest NULL
10 Marketing 1 3 Newton Sud Nord
20 Developpement 2 3 Newton Sud Nord
30 Direction 3 3 Newton Sud Nord
10 Marketing 1 4 Pointcarre Est NULL
20 Developpement 2 4 Pointcarre Est NULL
30 Direction 3 4 Pointcarre Est NULL
Exemple - 2
Departement Batiment
Num dept Nom dept Num bat Num bat Nom bat Ent princ Ent Sec
10 Marketing 1 1 Turing Nord Ouest
20 Developpement 2 1 Turing Nord Ouest
30 Direction 3 1 Turing Nord Ouest
10 Marketing 1 2 Einstein Ouest NULL
20 Developpement 2 2 Einstein Ouest NULL
30 Direction 3 2 Einstein Ouest NULL
10 Marketing 1 3 Newton Sud Nord
20 Developpement 2 3 Newton Sud Nord
30 Direction 3 3 Newton Sud Nord
10 Marketing 1 4 Pointcarre Est NULL
20 Developpement 2 4 Pointcarre Est NULL
30 Direction 3 4 Pointcarre Est NULL
Exemple - 3
Departement Batiment
Num dept Nom dept Num bat Num bat Nom bat Ent princ Ent Sec
20 Developpement 2 2 Einstein Ouest NULL
30 Direction 3 3 Newton Sud Nord
10 Marketing 1 1 Turing Nord Ouest
Regroupements
Conséquences du regroupement
Exemple
Schéma : Employe(Nom, Num, Fonction, Salaire, Num Dept)
SELECT Fonction,Num Dept
FROM Employe
GROUP BY Fonction, Num Dept
ORDER BY Num Dept ;
Exemple - 2
SELECT Fonction
FROM Employe
GROUP BY Fonction, Num Dept
Exemple - 3
Exemple - 4
Fonctions d’agrégation
Exemple
Fonctions d’agrégation - 2
COUNT (e) : Le nombre d’occurrences de e dans le groupe.
Les n-uplets pour lesquels e vaut NULL ne sont pas comptés.
* peut remplacer e. Compte alors le nombre de n-uplets du
groupe.
MAX (e) : La valeur maximale de e pour le groupe.
MIN(e) : La valeur minimale de e pour le groupe.
SUM(e) : La somme des valeurs de e pour le groupe.
AVG (e) : La moyenne de l’évaluation de e sur le groupe.
STDDEV (e) : L’écart-type de e pour le groupe.
VARIANCE (e) : La variance de e pour le groupe.
e peut être précédé du mot clé DISTINCT : dans ce cas, on
élimine les doublons.
Important pour COUNT, SUM, AVG, STDDEV et
VARIANCE.
Bases de données
Interrogation
Agrégats
Exemple
Schéma :
Employe(Nom, Num, Fonction, Salaire, Num Dept)
Departement(Num dept, Nom dept, Num bat)
Exemple - 2
Exemple
SELECT Num Dept, COUNT(DISTINCT Fonction) NbFonctions
FROM Employe
WHERE Salaire > 15000
GROUP BY Num Dept
HAVING COUNT(*) > 2 ;
Exemple - 2
Exemple - 3
Exemple - 4
Exemple - 5
Tout regrouper
Exemple
Schéma :
Employe(Nom, Num, Fonction, Salaire, Num Dept)
SELECT SUM(Salaire)
FROM Employe
WHERE Num dept = 10 ;
Bases de données
Interrogation
Agrégats
Double regroupement
Exemple
Schéma :
Employe(Nom, Num, Fonction, Salaire, Num Dept)
Plan
1 Interrogation
Requêtes simples
Sur plusieurs tables
Fonctions
Aggrégats
Insertion
Instruction INSERT
INSERT INTO nom table(att1 , . . ., attn )
VALUES(val1 , . . ., valn )
Ajoute le n-uplet (val1 , . . ., valn ) à la relation nom table.
vali correspond à l’attribut atti .
Si un attribut de la relation nom table n’apparaı̂t pas dans
att1 , . . . , attn , alors la valeur du n-uplet pour cet attribut est
NULL.
La spécification des attributs att1 , . . ., attn est optionnelle
Si on précise pas les attributs, il faut donner une valeur à tous
les attributs.
L’ordre sur des valeurs (val1 , . . ., valn ) est celui des attributs
dans la définition de la relation nom table.
C’est un des cas où cet ordre est important.
Bases de données
Modifications d’une instance
Exemple
Exemple
Schéma :
Departement(Num dept, Nom dept, Num bat)
Batiment(Num bat, Nom bat, Ent princ, Ent Sec)
Dept important(Nom,Bat)
Supression
Exemple
Exemple - 2
Schéma :
Batiment(Num bat, Nom bat, Ent princ, Ent Sec)
Departement(Num dept, Nom dept, Num bat)
Modification de n-uplets
Exemple
Exemple - 2
UPDATE Employe
SET Salaire = Salaire * 1.1
WHERE Fonction = ’ingenieur’ ;
Bases de données
Modifications d’une instance
Exemple - 3
Schéma :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Departement(Num dept, Nom dept, Num bat)
Exemple - 3 - suite
UPDATE Departement
SET Num chef =
(SELECT Num
FROM Employe
WHERE Fonction = ’directeur’
AND Employe.Num dept = Departement.Num dept
AND Embauche <= ALL
(SELECT Embauche
FROM Employe E
WHERE Fonction = ’directeur’
AND E.Num dept = Departement.Num dept))
WHERE Num chef IS NULL ;
Bases de données
Modifications d’une instance
Transactions
Transactions en SQL
COMMIT ;
Valide les modifications effectuées.
Les modifications sont alors définitives et visibles par tous.
ROLLBACK ;
Annule les modifications effectuées depuis le début de la
transaction.
Bases de données
Modifications d’une instance
Plan
1 Interrogation
Requêtes simples
Sur plusieurs tables
Fonctions
Aggrégats
Création de table
De manière optionnelle :
Certaines contraintes d’intégrité.
Des caractéristiques de stockage.
Des données provenant d’une requête.
Bases de données
Définition et modification du schéma d’une base
Création simple
Exemple :
Exemple
Vues
Création :
Type CHAR(longueur )
Chaı̂ne de caractères de taille fixe longueur .
Type VARCHAR(longueur )
Chaı̂ne de caractère de taille variable longueur .
Bases de données
Définition et modification du schéma d’une base
Oracle
Types BLOB et CLOB : jusqu’à 8 To de données binaires
(BLOB) ou de caractères (CLOB).
MySQL
Types BLOB et TEXT : jusqu’à 64 Ko de données binaires ou
de caractères.
Types MEDIUMBLOB et MEDIUMTEXT : jusqu’à 16 Mo.
Types LONGBLOB et LONGTEXT : jusqu’à 4 Go.
Bases de données
Définition et modification du schéma d’une base
Dates
Oracle
Type DATE : date, y compris l’heure à la seconde près.
Type TIMESTAMP : plus précis.
MySQL
Type DATE : date au jour près.
Type DATETIME : date + heure à la seconde près
Type TIMESTAMP : nombre de secondes écoulées depuis le
1er janvier 1970, affichage similaire à DATETIME
Type TIME : un nombre d’heures:minutes:secondes
Bases de données
Définition et modification du schéma d’une base
Types énumérés
MySQL :
Type ENUM(’val1 ’, ’val2 ’, . . .) :
Les valeurs autorisées pour l’attribut sont val1 , val2 , . . .
Oracle :
Type VARCHAR(n) CHECK (att IN (’val1 ’, ’val2 ’, . . .)) :
att est l’attribut dont on définit le type.
Les valeurs autorisées pour l’attribut sont val1 , val2 , . . .
n doit être supérieur à la plus grande longueur de valeur vali .
Bases de données
Définition et modification du schéma d’une base
Références
Oracle :
http ://download-uk.oracle.com/docs/cd/
B19306 01/server.102/b14220/datatype.htm
MySQL :
http ://dev.mysql.com/doc/refman/5.0/fr/column-types.html
Bases de données
Définition et modification du schéma d’une base
Exemple :
Crée une table Bureau avec un attribut Nom emp entier pouvant
être NULL, Num bat contenant un entier qui ne peut pas être
NULL et enfin Emplacement contenant une chaı̂ne de caractère et
qui ne peut pas être NULL.
Bases de données
Définition et modification du schéma d’une base
Clés étrangères
Une clé étrangère est une référence vers la clé primaire d’une table.
Tout comme les clé primaires, elles peuvent être constituées
de plusieurs attributs.
Les valeurs pour (att1 , . . ., attk ) doivent correspondre aux
valeurs d’un des n-uplets de table cible pour les attributs
(att10 ,. . .,attk0 ) ;
Contrainte CHECK
Plan
1 Interrogation
Requêtes simples
Sur plusieurs tables
Fonctions
Aggrégats
Bien sûr, il faudra mettre à jour la table une fois les employés saisis.
Bases de données
Exemple de mise en place d’une base
UPDATE Departement
SET Num chef =
(SELECT Num
FROM Employe
WHERE Fonction = ’directeur’
AND Employe.Num dept = Departement.Num dept
AND Salaire >=
(SELECT MAX(Salaire)
FROM Employe e
WHERE e.Num dept = Departement.Num dept
AND Fonction = ’directeur’)
);