sql et bases de données relationnelles langage sql c’est un langage fourni avec tout sgbd...
TRANSCRIPT
SQL et Bases de donnees relationnelles
November 26, 2013
SQL et Bases de donnees relationnelles
SQL :
En tant que langage d’interrogation
En tant que langage de mise a jour
En tant que langage de definition de donnees
SQL et Bases de donnees relationnelles
Langages de requete
Langages qui permettent d’interroger la BD(i) Langages relationnels “purs”
Algebre relationnelle
Calcul relationnel par n-uplet
Calcul relationnel par domaine
(ii) Langages pratiques
SQL (Structured Query Language)
QUEL (Query Language)
SEQUEL (Structured English as a Query Language)
QBE (Query By Example)
SQL et Bases de donnees relationnelles
Le langage SQL
C’est un langage fourni avec tout SGBD relationnelcommercialise.
C’est un standard reconnu par l’ISO depuis 87(standard⇒ portabilite)
On en est a la version 2 (SQL92) et la version 3 est annonceepour bientot
SQL est un LDD et un LMD. Il est aussi utilise pour definirdes vues, les droits d’acces, manipulation de schema physique. . .
SQL et Bases de donnees relationnelles
Structure de base
Une requete SQL typique est de la forme :
SELECT A1, . . . ,An
FROM r1, . . . , rmWHERE P
Les Ai sont des attributs, les rj sont des noms de relations et P estun predicat.Cette requete est equivalente a
πA1,...,An
(σP(r1 × · · · × rm)
)
SQL et Bases de donnees relationnelles
La clause SELECT
La clause SELECT correspond a la projection de l’algebre.Les titres des films :
SELECT TitreFROM film
L’utilisation de l’asterisque permet de selectionner tous les attributs
SELECT *FROM film
SQL et Bases de donnees relationnelles
La clause SELECT (suite)
SQL autorise par defaut les doublons. Pour le forcer a les eliminer,on utilise la clause DISTINCT
SELECT DISTINCT TitreFROM film
La clause SELECT peut contenir des expressions arithmetiquesainsi que le renommage d’attributs
SELECT Prix HT * 1.206 AS Prix TTCFROM produit
SQL et Bases de donnees relationnelles
La clause WHERE
Correspond au predicat de selection dans l’algebre.La condition porte sur des attributs des relations qui apparaissentdans la clause FROM
SELECT DISTINCT TitreFROM filmWHERE Realisateur = “Bergman” AND
Acteur =“Stewart”SQL utilise les connecteurs AND, OR et NOTPour simplifier la clause WHERE, on peut utiliser la clauseBETWEEN
SELECT NumFROM compteWHERE Solde BETWEEN 0 AND 10000
SQL et Bases de donnees relationnelles
La clause FROM
Elle correspond au produit cartesien de l’algebre.Le titre et le realisateur des films programmes a l’UGC deBordeaux.
SELECT Titre, RealisateurFROM film f, programme pWHERE f.titre=p.titre AND
p.NomCine=“UGC”Noter l’utilisation des variables p et f pour designer les relationsprogramme et film.
SQL et Bases de donnees relationnelles
Les variables n-uplets
Elles sont definies dans la clause FROM SoitEmp(Id,Nom,Id chef). Donner la liste des noms des employes ainsique les noms de leurs chefs.
SELECT e1.Nom, e2.Nom AS Nom ChefFROM emp e1, emp e2WHERE e1.Id chef = e2.Id
On ne peut pas exprimer sans recours a des variables n-uplets.
SQL et Bases de donnees relationnelles
La clause ORDER BY
SQL permet de trier les resultats de requete
SELECT *FROM programmeWHERE NomCine=“UGC”ORDER BY Horaire ASC, Titre DESC
SQL et Bases de donnees relationnelles
Jointure et Jointure externe
On considere les deux tables
Personne(NSS, Nom) et
Voiture(Matricule, modele, Proprio).
Si on fait Personne on Voiture, on n’obtient aura que lespersonnes qui ont une (des) voiture(s).
Soit la reque suivante :SELECT *FROM Personne P Left Outer Join Voiture V
ON P.NSS = V.Proprio
Cette requete retourne aussi les personnes n’ayant pas devoiture.Ces tuples auront des valeurs nulles pour les champsprovennant de Voiture.
Si on met juste Outer Join alors on aura les personnes sansvoitures et les voitures sans Proprietaire.
La jointure est exprimee par : T1 Inner Join T2 On Condition
SQL et Bases de donnees relationnelles
Operateurs ensemblistes
SELECT . . .. . .UNION/ INTERSECT/ EXCEPTSELECT . . .
Attention : Ces operations eliminent les doublons, pour pouvoir lesgarder, utiliser a la place INTERSECT ALL . . .Si t apparaıt m fois dans r et n fois dans s alors il apparaıt
m + n fois dans r UNION ALL s
min(m, n) fois dans r INTERSECT ALL s
max(0,m − n) fois dans r EXCEPT ALL s
SQL et Bases de donnees relationnelles
Les fonctions d’aggregats
Ce sont des fonctions qui agissent sur des ensembles(multi-ensembles) de valeurs :
AVG : la valeur moyenne de l’ensembleMIN : la valeur minimaleMAX : la valeur maximaleSUM : le total des valeurs de l’ensembleCOUNT : le nombre de valeur dans l’ensemble
SQL et Bases de donnees relationnelles
Les fonctions d’aggregats (suite)
SELECT COUNT(Titre)FROM Programme
Cette requete retourne le nombre de films programmes a Bordeaux.Attention : Un meme titre peut etre compte plusieurs fois s’il estprogramme a des heures differentes et dans des salles differentes.
SELECT COUNT( DISTINCT Titre)FROM Programme
SQL et Bases de donnees relationnelles
Aggregats et GROUP BY
Le nombre de films programmes dans chaque salle
SELECT NomCine, COUNT(DISTINCT Titre)FROM ProgrammeGROUP BY NomCine
Les attributs apparaissant dans la clause SELECT en dehors desaggregats doivent etre associes a la clause GROUP BY
SQL et Bases de donnees relationnelles
Aggregats et la clause HAVING
Les salles ou sont programmes plus de 3 films
SELECT NomCine, COUNT(DISTINCT Titre)FROM ProgrammeGROUP BY NomCineHAVING COUNT(DISTINCT Titre) > 3
Le predicat associe a la clause HAVING est teste apres laformation des groupes definis dans la clause GROUP BY
SQL et Bases de donnees relationnelles
Requetes imbriquees
SQL fournit un mecanisme qui permet d’imbriquer les requetes.Une sous requete est une requete SQL (SELECT-FROM-WHERE)qui est incluse dans une autre requete. Elle apparaıt au niveau dela clause WHERE de la premiere requete.Les films programmes a l’UGC non programmes au TriaonSELECT TitreFROM ProgrammeWHERE NomCine=“UGC” and Titre NOT IN (
SELECT TitreFROM ProgrammeWHERE NomCine=“Trianon”)
SQL et Bases de donnees relationnelles
Requetes imbriquees (suite)
Compte(Num, Solde, NomTit)Trouver les comptes dont les soldes sont superieurs aux soldes descomptes de Durand
SELECT *FROM CompteWHERE Solde > ALL (
SELECT SoldeFROM CompteWHERE NomTit=“Durand”)
En remplacant ALL par SOME, on obtient les comptes dont lessoldes son sup. au solde d’au moins un compte de Durand.
SQL et Bases de donnees relationnelles
Requetes imbriquees (suite)
Les cinemas qui passent tous les films programmes a l’UGCSELECT NomCineFROM programme p1
WHERE NOT EXISTS(
(SELECT DISTINCT TitreFROM programmeWHERE NomCine=“UGC”)EXCEPT(SELECT DISTINCT TitreFROM programme p2
WHERE p1.NomCine=p2.NomCine))
SQL et Bases de donnees relationnelles
Test d’absence de doublons
La clause UNIQUE permet de tester si une sous requete contientdes doublons.Les titres de films programmes dans une seule salle et un seulhoraireSELECT p.TitreFROM programme p
WHERE UNIQUE(
(SELECT p1.TitreFROM programme p1
WHERE p.Titre=p1.Titre)
SQL et Bases de donnees relationnelles
Les relations derivees
Titulaire(Nom, Adresse)Compte(Num, Solde, NomTit)Donner le solde moyen des comptes de chaque personne ayant unsolde moyen superieur a 1000SELECT NomTit, SoldeMoyen
FROM(
SELECT NomTit, AVG(Solde)FROM Compte
GROUP BY NomTit)
AS Result(NomTit, SoldeMoyen)WHERE SoldeMoyen > 1000
Noter qu’on aurait pu exprimer cette requete en utilisant la clauseHAVING
SQL et Bases de donnees relationnelles
Les vues
Permettent de definir des relations virtuelles dans le but de (i)cacher certaines informations a des utilisateurs, (ii) faciliterl’expression de certaines requetes (iii) ameliorer la presentation decertaines donnees.Une vue est definie par une expression de la forme :
CREATE VIEW V AS requete
requete : est une expression quelconque de requeteV : est le nom de la vue
SQL et Bases de donnees relationnelles
Les vues (suite)
Soit la relation : Emp(NumE, Salaire, Dept, Adresse)
CREATE VIEW EmpGen AS(
SELECT NumE, Dept, Adresse
FROM Emp)
Toutes les informations concernant les employes dudepartement 5.SELECT *FROM EmpGenWHERE Dept = 5
SQL et Bases de donnees relationnelles
Mise a jour des vues
Soit la relation : Personne(Nom,Salaire).
Supposons que la table Personne est vide.CREATE VIEW Gros Salaire ASSELECT *FROM PersonneWHERE Salaire > 10000
INSERT INTO Gros Salaire VALUES(”Martin”, 5000)
Si on faitSELECT * FROM Gros Salaire; on n’obtient aucun tuple.
SQL et Bases de donnees relationnelles
Si a la creation de la vue on rajoute l’option
WITH CHECK OPTION
alors l’insertion est refusee.
Les mises a jours des vues sont traduites en des mises a joursdes tables sous-jacente. La traduction n’est pas toujoursunique.=⇒ Certaines vues ne permettent pas des mises a jour.
SQL et Bases de donnees relationnelles
Modification des relations : Suppression
Supprimer tous les employes du departement 5DELETE FROM EmpWHERE Dept=5
Supprimer du programme tous les films programmes a l’UGCou un des acteurs est DiCaprio.DELETE FROM programme
WHERE NomCine = “UGC” AND EXISTS(
SELECT TitreFROM filmWHERE programme.Tite = film.Titre AND
film.Acteur =“DiCaprio”)
SQL et Bases de donnees relationnelles
Modification des relations : Suppression
Supprimer les comptes dont le solde est inferieur a la moyennedes soldes de tous les comptes.DELETE FROM compteWHERE Solde < (SELECT AVG(Solde) FROM compte)
Remarque : Si les n-uplets sont supprimes un a un de larelation compte, on peut penser qu’a chaque suppression on aune nouvelle valeur de AVG(Solde).
Solution de SQL : D’abord, calculer AVG(Solde) et ensuitesupprimer les tuples satisfaisant le test sans recalculer achaque fois la nouvelle valeur de AVG(Solde).
SQL et Bases de donnees relationnelles
Modification des relations : Insertion
Inserer un n-uplet dans la relation “compte”INSERT INTO compte(Num, Solde, NomTit) VALUES(
511, 1000, “Dupont”)
ou bienINSERT INTO compte VALUES(
511, 1000, “Dupont”)
Insere un n-uplet avec un solde inconnu.INSERT INTO compte VALUES(
511, NULL, “Dupont”)
ou bienINSERT INTO compte(Num, NomTit) VALUES(
511, “Dupont”)
Les 2 dernieres m.a.j sont equivalentes sauf si une valeur pardefaut du Solde a ete specifiee lors de la definition de la tablecompte. SQL et Bases de donnees relationnelles
Modification des relations : Insertion
Supposons qu’on a cree une relation TitMoy(NomTit, Moyenne)qui doit contenir le nom des clients de la banque ainsi que lamoyenne des soldes de leurs comptes.INSERT INTO TitMoy(NomTit, Moyenne)SELECT NomTit, AVG(Solde)FROM compteGROUP BY NomTit
SQL et Bases de donnees relationnelles
Modification des relations : Update
Rajouter 1% a tous les comptes dont le solde est inferieur a 500UPDATE compteSET Solde = Solde * 1.01WHERE Solde ≤ 500La condition qui suit la clause WHERE peut etre une requete SQL.
SQL et Bases de donnees relationnelles
SQL en tant que LDD
Le schema des relations
Les domaines des attributs
Les contraintes d’integrite
La gestion des autorisations
La gestion du stockage physique
Les index associes a chaque relation
SQL et Bases de donnees relationnelles
Domaines
char(n) : chaıne de caracteres de taille fixe n
varchar(n) : chaıne de caracteres de taille variable maisinferieure a n
int : Entier (un sous ensemble fini des entiers, depend de lamachine)
smallint : Entier. Sous ensemble de int
numeric(p,d) : Un reel code sur p digits et au max d digitspour la partie a droite de la decimale.
SQL et Bases de donnees relationnelles
Domaines
real : Un reel flottant.
date : YYYY-MM-DD (annee, mois, jours)
time : HH:MM:SS (heure, minute, seconde)
Les valeurs nulles (NULL) sont possibles dans tous lesdomaines. Pour declarer qu’un attribut ne doit pas etre nul, ilfaut rajouter NOT NULL
CREATE DOMAIN nom-client char(20)
SQL et Bases de donnees relationnelles
Creation des tables
On utilise la clause CREATE TABLECREATE TABLE compte (
Num int NOT NULL,Solde int,NomTit varchar(20))
Rajout de contraintes :CREATE TABLE compte (
Num int NOT NULL,Solde int DEFAULT 0,NomTit varchar(20),CONSTRAINT pk compte PRIMARY KEY (Num),CONSTRAINT ck compte CHECK (Num ≥ 1) )
En SQL92, si un attribut est cle alors il est different de NULL
SQL et Bases de donnees relationnelles
Cle etrangere
Soient Personne(NSS, Nom) etVoiture(Matricule, modele, Proprio).“Proprio” correspond au NSS du proprietaire. C’est une cleetrangere dans le schema Voiture car c’est une cle dans un autreschema.
SQL et Bases de donnees relationnelles
Cle etrangere
CREATE TABLE Voiture (Matricule CHAR(8),Modele CHAR(10),Proprio CHAR(3),CONSTRAINT pk voiture PRIMARY KEY(Matricule),CONSTRAINT fk voiture proprio FOREIGN KEY(Proprio)
REFERENCES PersonneON [DELETE — UPDATE] CASCADE—RESTRICT—SET NULL)CASCADE : Si une personne est supprimee, alors les voitures qu’elle
possede sont supprimees.RESTRICT : Le systeme refuse la suppression d’une personne s’il ya des voitures qui lui sont rattachees. C’est l’option par defaut.SET NULL : Si une personne est supprimee, alors l’attributProprio prend la valeur NULLL’insertion d’une voiture ne peut se faire que si le “proprio” existedans Personne (ou bien valeur nulle)SQL et Bases de donnees relationnelles
Valeurs nulles et requetes
Employe Nom Salaire
Dupont 10000Martin NULL
SELECT *FROM EmployeWHERE Salaire > 12000
Ne retourne aucun tuple. Pareil si la condition est :WHERE Salaire < 8000
SQL et Bases de donnees relationnelles
Valeurs nulles et requetes
SELECT SUM(Salaire) FROM Employe;Retourne 10000SELECT COUNT(Salaire) FROM Employe;Retourne 2SELECT AVG(Salaire) FROM Employe;Retourne 10000SELECT COUNT(*) FROM EmployeWHERE Salaire IS NOT NULL;Retourne 1
SQL et Bases de donnees relationnelles
Manipulation de schema
La commande DROP TABLE permet de supprimer une table.Ex : DROP TABLE compte.
Si une vue est definie sur la table compte alors il faut utiliserDROP TABLE compte CASCADE
La commande ALTER TABLE permet de modifier le schemad’une relation. Exemple :ALTER TABLE compte ADD Date ouverture dateALTER TABLE compte DROP Solde CASCADE
SQL et Bases de donnees relationnelles
Le mecanisme des droits
Soit la table Pers(Num, Nom, Adr, Num Serv, Salaire)
1 Dupont ne peut pas acceder a Pers
2 Dupont Peut lire une partie de Pers mais ne peut rienmodifier
3 Dupont Peut lire un seul tuple (celui le concernant) sanspouvoir le modifier
4 Dupont peut en plus modifier l’attribut Adr
5 Dupont peut acceder a l’attribut salaire mais seulemententre 9h et 17h a partir du terminal 25
6 Dupont peut modifier salaire si celui-ci est inferieur a 8000
7 Dupont peut modifier la relation si il est responsable duNum Serv du tuple qu’il veut modifier
Les droits dependent du contenant, du contexte et/ou du contenu
SQL et Bases de donnees relationnelles
Les droits dans SQL
SELECT: privilege qu’il faut posseder pour lire une tableINSERT, DELETE, UPDATE: privilieges necessaires pour mettre ajour une table.INSERT(X), UPDATE(X): privilege necessaire pour inserer, mettrea jour l’attribut X.
SQL et Bases de donnees relationnelles
Octroi et retrait de privileges
GRANT privilege ON objet TO utilisateur [WITH GRANT OPTION]
REVOKE [GRANT OPTION FOR] privilege ON objet FROM utilisateurRESTRICT | CASCADE
Exemples :GRANT ALL ON TABLE resultat TO directeur WITH GRANT OPTION;GRANT INSERT ON TABLE resultat TO sec 1;GRANT SELECT, UPDATE(points) ON TABLE resultat TO prof 1;Remarque : Un utilisateur peut recevoir le meme privileges deplusieurs sources. Cela est utilie quand l’une d’elles veut le luiretirer.
SQL et Bases de donnees relationnelles
Octroi et retrait de privileges
soit la sequence :A: GRANT SELECT ON TABLE T TO B WITH GRANT OPTION
B: GRANT SELECT ON TABLE T TO C WITH GRANT OPTION
C: GRANT SELECT ON TABLE T TO D WITH GRANT OPTION
A: GRANT SELECT ON TABLE T TO D WITH GRANT OPTION
A: REVOKE SELECT ON TABLE T FROM BNi B ni C ne pourront lire T. Par contre D continue a pouvoir fairedes lectures.
SQL et Bases de donnees relationnelles
Utilisation des vues
CREATE VIEW Informations PersoAS SELECT *
FROM EmployeWHERE nom = USER;GRANT SELECT, UPDATE(adresse)ON Informations PersoTO PUBLIC
SQL et Bases de donnees relationnelles