Documente Academic
Documente Profesional
Documente Cultură
SQL
Un langage concret interagir avec le mod`le relationnel : e
Interrogation simple
Un langage de manipulation de donnes. e Un langage de description de donnes. e Un langage pour administrer la base, grer les contrles e o dacc`s. e
SELECT att1 , att2 , . . . FROM nom table ; Rcuprer les valeurs contenus dans la table nom table, en ne e e gardant que les attributs att1, att2, ... En alg`bre relationnelle : e att1 ,att2 ,... (nom table) En calcul relationnel tuple : {t.att1 , t.att2 , | nom table(t)} On peut remplacer att1 , att2 , . . . par * pour utiliser tous les attributs.
Exemple
Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Exemple 2
Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
mot cl DISTINCT e
Le mot cl DISTINCT permet dliminer les doublons dans le e e rsultat. e
Donner le nom et la fonction de chaque employ : e SELECT Nom,Fonction FROM Employe ; Nom,Fonction (Employe) {t.Nom, t.Fonction | Employe(t)} Demo
Donner les informations sur chaque employ : e Exemple : SELECT * FROM Employe ; Employe {t.Nom, t.Num, t.Fonction, t.Num sup, t.Embauche, t.Salaire, t.Num Dept | Employe(t)} Demo SELECT DISTINCT Fonction FROM Employe ; Donner les direntes fonctions occupes dans lentreprise : e e
Demo
Conditions du WHERE
Expressions simples : Comparaisons (=, !=, <, <=, >, >=) entre un attribut et une constante ou un autre attribut dirents types de donnes utiliss pour les constantes : e e e
nombres : 1, 1980, 1.5 cha nes de caract`res : Martin, directeur e dates : 1980-06-18
le formattage des dates peut varier
Exemple
Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Quels sont les employs dont la date dembauche est antrieure au e e 1er janvier 1999 : SELECT Nom FROM Employe WHERE Embauche < 1999-01-01 ; Nom (Embauche< 19990101 (Employe)) {t.Nom | Employe(t) t.Embauche < 1999 01 01 } Demo
Exemple 2
Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Autres conditions
Loprateur IN permet de spcier un ensemble de valeur e e possibles :
Quels sont les employs qui sont directeur ou ingnieur ? e e SELECT Nom, Fonction FROM Employe WHERE Fonction IN (ingenieur,directeur) ;
Autre exemple
Quels sont les employs directeur ou ingnieur, embauchs entre le e e e 1er janvier 1990 et le 31 dcembre 1999 gagnant moins de 32000 e euros ? SELECT Nom, Embauche, Fonction, Salaire FROM Employe WHERE Fonction IN (ingenieur,directeur) AND Embauche BETWEEN 1990-01-01 AND 1999-12-31 AND Salaire < 32000 ; condition, connecteur
Quels sont les employs dont la date dembauche est antrieure au e e 1er janvier 1999 et touchant au moins 30000 euros de salaire : SELECT Nom FROM Employe WHERE Embauche < 1999-01-01 AND Salaire >= 30000 ; Nom (Embauche< 19990101 (Employe)) {t.Nom | Employe(t) t.Embauche < 1999 01 01 } Demo
Exemple
Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Donner le nom des employs du dpartement numro 20, en triant e e e le rsultat par salaire dcroissant, puis par nom (croissant) : e e
Les btiments qui nont pas dentre secondaire auront une a e valeur NULL pour lattribut Ent Sec. La requte suivante indique les btiments nayant pas dentre e a e secondaire : SELECT * FROM Batiment WHERE Ent sec IS NULL ;
SELECT Nom FROM Employe WHERE Num dept=20 ORDER BY Salaire DESC, Nom ;
Jointures
Exemple
Schma : e
Batiment(Num bat, Nom bat, Ent princ, Ent Sec) Departement(Num dept, Nom dept, Num bat)
Il est possible dutiliser plusieurs tables dans une requte. e Cela correspond ` eectuer un produit cartsien entre les a e direntes tables. e Si un attribut est prsent dans plusieurs tables utilises, on e e doit lcrire nom table.att e
Jointure naturelle sur les relations R(A1 , A2 , B1 , B2 ) et S(C1 , C2 , B1 , B2 ) peut sexprimer par :
Donner les dpartements avec leur btiments : e a Departement 1 Batiment SELECT Num dept, Nom dept, Batiment.Num bat, Nom bat, Ent princ, Ent sec FROM Departement, Batiment WHERE Departement.Num bat = Batiment.Num bat ; Une notation similaire peut tre utilise pour renommer les e e attributs dans le SELECT.
SELECT A1 , A2 , R.B1 , S.B2 , C1 , C2 FROM R, S WHERE R.B1 =S.B1 AND R.B2 =S.B2
Renommages
Il est parfois utile de renommer des tables : SELECT att1 , att2 , . . . FROM nom table1 nouveau nom1 , nom table2 nouveau nom2 , . . . WHERE condition ORDER BY atti , attj , . . . Indication des renommage dans le FROM. Les anciens noms indiqus dans le FROM ne peuvent pas tre e e utiliss dans les autres parties de la requte. e e Utile lorsque lon veut eectuer des jointures ou des produits cartsiens dune table avec elle-mme. e e
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)
Donner les noms et la fonction des employs avec le nom de leur e suprieur hirarchique. e e Nom,Superieur ,Fonction (Num=Num sup ( Nom,Num sup,Fonction (Employe) Superieur ,Num (Nom/Superieur (Employe)))) SELECT Employe.Nom, Employe.Fonction, Chef.Nom Superieur FROM Employe, Employe Chef WHERE Chef.Num = Employe.Num sup ;
Quels sont les employs, donns avec leur salaire, qui gagnent e e moins que Bellot ? SELECT Employe.Nom, Employe.Salaire FROM Employe, Employe bel WHERE Employe.Salaire < bel.Salaire AND bel.Nom = Bellot ;
Sous-requtes e
Il est possible dutiliser le rsultat dune requte dans une autre e e requte. e Augmentation de la puissance dexpression du langage. Les sous-requtes sont utilisables dans les parties e
WHERE FROM (` condition de renommer le rsultat) a e SELECT (` condition que pour chaque ligne slectionne par a e e la requte principale, on ne selectionne quune ligne dans la e sous-requte). e
Exemple
Si la sous-requte renvoie un rsultat simple sur une ligne : e e Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Quels sont les employs ayant la mme fonction que Jones ? e e SELECT Nom FROM Employe WHERE Fonction = (SELECT Fonction FROM Employe WHERE Nom=Jones) ;
Quels sont les employs qui ne travaillent pas dans le mme e e dpartement que leur suprieur ? e e SELECT Nom FROM Employe Emp WHERE Num dept != (SELECT Num dept FROM Employe WHERE Emp.Num sup = Num) ;
En cas de conit sur les nom, cest la dclaration la plus e proche qui est utilise. e
Exemple
Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
Exemple 2
Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)
a 2 ANY (sous requete) o` 2 peut tre {=, <, >, <=, >=} u e a 2 ALL (sous requete) o` 2 peut tre {=, <, >, <=, >=} u e EXISTS (sous requete)
vrai si il existe un b parmi les lignes renvoyes par e sous requete tel que a2b soit vrai.
Quels sont les employs, donns avec leur salaire, gagnant plus que e e tous les employs du dpartement 20 ? e e SELECT Nom, Salaire FROM Employe WHERE Salaire > ALL (SELECT Salaire FROM Employe WHERE Num dept = 20) ;
Quels sont les employs qui ont un subalterne ? e SELECT Nom FROM Employe Chef WHERE EXISTS (SELECT Nom FROM Employe WHERE Employe.Num sup = Chef.Num) ;
vrai si pour toutes les lignes b renvoyes par sous requete, e a2b est vrai. vrai si le rsultat de sous requete nest pas vide. e
Sous-requtes imbriques e e
Il est possible dimbriquer les sous-requtes : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept) Donner le nom et la fonction des employs du dpartement 20 ayant e e mme fonction quune personne du dpartement de Dupont. e e
Quels sont les employs ayant mme fonction et mme suprieur e e e e que Bellot ? SELECT Nom FROM Employe WHERE (Fonction, Num sup) = (SELECT Fonction, Num sup FROM Employe WHERE Nom=Bellot) ;
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)) ;