LIF4-Cours-3-SQL1

De
Publié par

LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1SQLUn langage concret interagir avec le mod`ele relationnel :Un langage de manipulation de donn´ees.LIF4 - Initiation aux Bases de donn´ees : Un de description de donn´ees.Un langage pour administrer la base, g´erer les contrˆolesSQL - 1d’acc`es.Origine : IBM, dans les ann´ees 70.E.Coquery Standards :SQL-87 : 1987 (ISO)emmanuel.coquery@liris.cnrs.frSQL-2 : 1992 (ANSI)http ://liris.cnrs.fr/!ecoquery SQL-3 : 1999SQL-2003SQL-2006Di!´erences avec la th´eorie :possibilit´es de doublons;p´e d’ordonner le r´esultat des requˆetes;notion de valeur non d´efinie.LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1Interrogation simple ExempleSELECT att , att , ...1 2 Sch´ema :FROM nom table;Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)R´ecup´erer les valeurs contenus dans la table nom table, en neDonner le nom et la fonction de chaque employ´e :gardant que les attributs att1, att2, ...En alg`ebre relationnelle : SELECT Nom,Fonction FROM Employe;! (nom table)att ,att ,...1 2! (Employe)Nom,FonctionEn calcul relationnel “tuple” :{t.att ,t.att ,··· | nom table(t)} {t.Nom,t.Fonction | Employe(t)}1 2On peut remplacer att , att , ... par * pour utiliser tous les1 2 Demoattributs.LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1Exemple 2 mot cl´e ...
Publié le : samedi 24 septembre 2011
Lecture(s) : 73
Nombre de pages : 5
Voir plus Voir moins

LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
SQL
Un langage concret interagir avec le mod`ele relationnel :
Un langage de manipulation de donn´ees.
LIF4 - Initiation aux Bases de donn´ees : Un de description de donn´ees.
Un langage pour administrer la base, g´erer les contrˆolesSQL - 1
d’acc`es.
Origine : IBM, dans les ann´ees 70.
E.Coquery Standards :
SQL-87 : 1987 (ISO)emmanuel.coquery@liris.cnrs.fr
SQL-2 : 1992 (ANSI)
http ://liris.cnrs.fr/!ecoquery SQL-3 : 1999
SQL-2003
SQL-2006
Di!´erences avec la th´eorie :
possibilit´es de doublons;
p´e d’ordonner le r´esultat des requˆetes;
notion de valeur non d´efinie.
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Interrogation simple Exemple
SELECT att , att , ...1 2 Sch´ema :
FROM nom table;
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
R´ecup´erer les valeurs contenus dans la table nom table, en ne
Donner le nom et la fonction de chaque employ´e :gardant que les attributs att1, att2, ...
En alg`ebre relationnelle : SELECT Nom,Fonction FROM Employe;
! (nom table)att ,att ,...1 2
! (Employe)Nom,FonctionEn calcul relationnel “tuple” :
{t.att ,t.att ,··· | nom table(t)} {t.Nom,t.Fonction | Employe(t)}1 2
On peut remplacer att , att , ... par * pour utiliser tous les1 2 Demo
attributs.
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Exemple 2 mot cl´e DISTINCT
Sch´ema : Le mot cl´e DISTINCT permet d’´eliminer les doublons dans le
r´esultat.
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Donner les informations sur chaque employ´e :
Exemple :
SELECT * FROM Employe;
Donner les di!´erentes fonctions occup´ees dans l’entreprise :
Employe
SELECT DISTINCT Fonction FROM Employe;{t.Nom,t.Num,t.Fonction,t.Num sup,t.Embauche,
t.Salaire,t.Num Dept | Employe(t)}
DemoDemoLIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
S´elections (de lignes) Conditions du WHERE
SELECT att , att , ...1 2
Expressions simples :
FROM nom table
Comparaisons (=, !=, <, <=, >, >=)WHERE condition
entre un attribut et une constante ou un autre attribut
di!´erents types de donn´ees utilis´es pour les constantes :La clause WHERE sp´ecifie les lignes `a s´electionner grˆace `a la
nombres : 1, 1980, 1.5condition.
chaˆınes de caract`eres : ’Martin’, ’directeur’
dates : ’1980-06-18’
En alg`ebre relationnelle : le formattage des dates peut varier
! (" (nom table))att ,att ,... condition1 2 Combinaison d’expressions via :
le" : AND
En calcul relationnel “tuple” :
le# : OR{t.att ,t.att ,··· | nom table(t)"condition}1 2
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Exemple Exemple 2
Sch´ema :Sch´ema :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Quels sont les employ´es dont la date d’embauche est ant´erieure auQuels sont les employ´es dont la date d’embauche est ant´erieure au
erer 1 janvier 1999 et touchant au moins 30000 euros de salaire :1 janvier 1999 :
SELECT Nom
SELECT Nom
FROM Employe
FROM Employe
WHERE Embauche < ’1999-01-01’
WHERE Embauche < ’1999-01-01’;
AND Salaire >= 30000;
! (" ! !(Employe))Nom< 1999!01!01
! (" ! !(Employe))Nom Embauche< 1999!01!01" "{t.Nom | Employe(t)"t.Embauche < 1999$01$01 } " "{t.Nom | Employe(t)"t.Embauche < 1999$01$01 }
Demo Demo
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Autres conditions Autre exemple
L’op´erateur IN permet de sp´ecifier un ensemble de valeur
Quels sont les employ´es directeur ou ing´enieur, embauch´es entre le
possibles : er1 janvier 1990 et le 31 d´ecembre 1999 gagnant moins de 32000
Quels sont les employ´es qui sont directeur ou ing´enieur?
euros?SELECT Nom, Fonction
FROM Employe
WHERE Fonction IN (’ingenieur’,’directeur’);
SELECT Nom, Embauche, Fonction, Salaire
L’op´erateur BETWEEN ... AND permet de sp´ecifier un FROM Employe
intervalle de valeurs :
WHERE Fonction IN (’ingenieur’,’directeur’)
Quels employ´es gagnent entre 25000 et 30000 euros?
AND Embauche BETWEEN ’1990-01-01’ AND ’1999-12-31’
SELECT Nom, Salaire
AND Salaire < 32000;FROM Employe
WHERE Salaire BETWEEN 25000 AND 30000;
Attention `a ne pas confondre le AND du BETWEEN avec celui condition, connecteur"
qui correspond au".LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Valeurs non d´efinies Tri du r´esultat d’une requˆete
En pratique, il peut ˆetre int´eressant de trier le r´esultat d’unEn pratique, il est possible d’avoir des valeurs non d´efinies.
requˆete.Elles sont repr´esent´ees par le mot cl´e NULL.
SELECT att , att , ...1 2On peut tester si une valeur n’est pas d´efinie grˆace `a la
FROM nom tablecondition IS NULL (ou au contraire IS NOT NULL)
WHERE condition
Sch´ema : Batiment(Num bat, Nom bat, Ent princ, Ent Sec) ORDER BY att , att , ...i j
Les bˆatiments qui n’ont pas d’entr´ee secondaire auront une Le r´esultat de la requˆete est tri´e par ordre croissant sur
valeur NULL pour l’attribut Ent Sec. l’attribut atti
La requˆete suivante indique les bˆatiments n’ayant pas d’entr´ee En cas d’´egalit´e entre deux lignes au niveau de l’attribut att ,i
secondaire : on utilise l’attribut att , etc ...j
SELECT * Dans un ORDER BY, il est possible de faire suivre le nom
FROM Batiment d’un attribut par ASC ou DESC pour indiquer un ordre
WHERE Ent sec IS NULL; croissant ou d´ecroissant.
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Exemple Requˆetes sur plusieurs tables
SELECT att , att , ...1 2Sch´ema :
FROM nom table , nom table , ...1 2
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept) WHERE condition
ORDER BY att , att , ...i j
Donner le nom des employ´es du d´epartement num´ero 20, en triant
le r´esultat par salaire d´ecroissant, puis par nom (croissant) :
Il est possible d’utiliser plusieurs tables dans une requˆete.
Cela correspond `a e!ectuer un produit cart´esien entre lesSELECT Nom
di!´erentes tables.FROM Employe
WHERE Num dept=20 Si un attribut est pr´esent dans plusieurs tables utilis´ees, on
ORDER BY Salaire DESC, Nom; doit l’´ecrire nom table.att
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Jointures Exemple
Sch´ema :
En SQL, la jointure s’exprime comme une s´election sur le produit Batiment(Num bat, Nom bat, Ent princ, Ent Sec)
cart´esien. Departement(Num dept, Nom dept, Num bat)
Donner les d´epartements avec leur bˆatiments :
Jointure naturelle sur les relations R(A ,A ,B ,B ) et1 2 1 2
Departement! BatimentS(C ,C ,B ,B ) peut s’exprimer par :1 2 1 2
SELECT Num dept, Nom dept, Batiment.Num bat,
Nom bat, Ent princ, Ent sec
SELECT A , A , R.B , S.B , C , C FROM Departement, Batiment1 2 1 2 1 2
FROM R, S WHERE Departement.Num bat = Batiment.Num bat;
WHERE R.B =S.B AND R.B =S.B1 1 2 2 Une notation similaire peut ˆetre utilis´ee pour renommer les
attributs dans le SELECT.LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Renommages Exemple
Schema :Il est parfois utile de renommer des tables :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
SELECT att , att , ...1 2
Donner les noms et la fonction des employ´es avec le nom de leurFROM nom table nouveau nom ,1 1
sup´erieur hi´erarchique.nom table nom , ...2 2
WHERE condition
! (" (Nom,Superieur,Fonction Num=Num supORDER BY att , att , ...i j
! (Employe)%Nom,Num sup,Fonction
! (# (Employe))))Superieur,Num Nom/SuperieurIndication des renommage dans le FROM.
Les anciens noms indiqu´es dans le FROM ne peuvent pas ˆetre SELECT Employe.Nom, Employe.Fonction,
utilis´es dans les autres parties de la requˆete. Chef.Nom Superieur
Utile lorsque l’on veut e!ectuer des jointures ou des produits FROM Employe, Employe Chef
cart´esiens d’une table avec elle-mˆeme. WHERE Chef.Num = Employe.Num sup;
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Exemple 2 Sous-requˆetes
Il est possible d’utiliser le r´esultat d’une requˆete dans une autre
Schema :
requˆete.
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Augmentation de la puissance d’expression du langage.
Les sous-requˆetes sont utilisables dans les parties
Quels sont les employ´es, donn´es avec leur salaire, qui gagnent WHERE
moins que Bellot? FROM (`a condition de renommer le r´esultat)
SELECT (`a condition que pour chaque ligne s´electionn´ee par
la requˆete principale, on ne selectionne qu’une ligne dans la
sous-requˆete).SELECT Employe.Nom, Employe.Salaire
FROM Employe, Employe bel
WHERE Employe.Salaire < bel.Salaire
En cas de conflit sur les nom, c’est la d´eclaration la plus
AND bel.Nom = ’Bellot’;
proche qui est utilis´ee.
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Exemple Exemple : Sous-requˆete li´ee `a la requˆete principale
Si la sous-requˆete renvoie un r´esultat simple sur une ligne : Sch´ema :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Sch´ema :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Quels sont les employ´es qui ne travaillent pas dans le mˆeme
d´epartement que leur sup´erieur?
Quels sont les employ´es ayant la mˆeme fonction que ’Jones’?
SELECT Nom
SELECT Nom
FROM Employe Emp
FROM Employe
WHERE Num dept!=
WHERE Fonction =
(SELECT Num dept
(SELECT Fonction
FROM Employe
FROM Employe
WHERE Emp.Num sup = Num);
WHERE Nom=’Jones’);LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Sous-requˆetes renvoyant plusieurs lignes Exemple
Op´erateurs permettant d’utiliser de telles sous-requˆetes :
Sch´ema :
a IN (sous requete)
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
vrai si a apparaˆıt dans le r´esultat de sous requete.
a" ANY (sous requete)
Quels sont les employ´es, donn´es avec leur salaire, gagnant plus queou`" peut ˆetre {=,<,>,<=,>=}
tous les employ´es du d´epartement 20?vrai si il existe un b parmi les lignes renvoy´ees par
sous requete tel que a"b soit vrai.
a" ALL (sous requete) SELECT Nom, Salaire
ou`" peut ˆetre {=,<,>,<=,>=} FROM Employe
vrai si pour toutes les lignes b renvoy´ees par sous requete, WHERE Salaire > ALL (SELECT Salaire
a"b est vrai.
FROM Employe
EXISTS (sous requete) WHERE Num dept = 20);
vrai si le r´esultat de sous requete n’est pas vide.
LIF4 - Initiation aux Bases de donn´ees : SQL - 1 LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Exemple 2 Sous-requˆete avec un r´esultat `a plusieurs colonnes
On peut utiliser la notation (a, b, ...) pour former un n-uplet `a
Sch´ema : comparer avec le r´esultat de la sous-requˆete :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Sch´ema :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Quels sont les employ´es qui ont un subalterne?
Quels sont les employ´es ayant mˆeme fonction et mˆeme sup´erieur
que ’Bellot’?
SELECT Nom
FROM Employe Chef SELECT Nom
WHERE EXISTS (SELECT Nom FROM Employe
FROM Employe
WHERE (Fonction, Num sup) = (SELECT Fonction, Num sup
WHERE Employe.Num sup = Chef.Num);
FROM Employe
WHERE Nom=’Bellot’);
LIF4 - Initiation aux Bases de donn´ees : SQL - 1
Sous-requˆetes imbriqu´ees
Il est possible d’imbriquer les sous-requˆetes :
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Donner le nom et la fonction des employ´es du d´epartement 20 ayant
mˆeme fonction qu’une personne du d´epartement de ’Dupont’.
SELECT Nom, Fonction
FROM Employe
WHERE Num dept = 20
AND fonction IN
(SELECT Fonction
FROM Employe
WHERE Num dept = (SELECT Num dept
FROM Employe
WHERE Nom = ’Dupont’));

Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.