Sunteți pe pagina 1din 4

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

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

IF6 - Initiation aux Bases de donnes : e SQL - 1


E.Coquery emmanuel.coquery@liris.cnrs.fr http ://www710.univ-lyon1.fr/ecoquery/enseignement/if6

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.

Origine : IBM, dans les annes 70. e Standards :


SQL-87 : 1987 (ISO) SQL-2 : 1992 (ANSI) SQL-3 : 1999 SQL-2003 SQL-2006

Dirences avec la thorie : e e


possibilits de doublons ; e possibilit dordonner le rsultat des requtes ; e e e notion de valeur non dnie. e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 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)

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

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

Slections (de lignes) e


SELECT att1 , att2 , . . . FROM nom table WHERE condition La clause WHERE spcie les lignes ` slectionner grce ` la e a e a a condition. En alg`bre relationnelle : e att1 ,att2 ,... (condition (nom table)) En calcul relationnel tuple : {t.att1 , t.att2 , | nom table(t) condition}

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

Combinaison dexpressions via : le : AND le : OR

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

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

Loprateur BETWEEN ... AND permet de spcier un e e intervalle de valeurs :


Quels employs gagnent entre 25000 et 30000 euros ? e SELECT Nom, Salaire FROM Employe WHERE Salaire BETWEEN 25000 AND 30000 ; Attention ` ne pas confondre le AND du BETWEEN avec celui a qui correspond au .

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

Valeurs non dnies e


En pratique, il est possible davoir des valeurs non dnies. e Elles sont reprsentes par le mot cl NULL. e e e On peut tester si une valeur nest pas dnie grce ` la e a a condition IS NULL (ou au contraire IS NOT NULL) Schma : e
Batiment(Num bat, Nom bat, Ent princ, Ent Sec)

Tri du rsultat dune requte e e


En pratique, il peut tre intressant de trier le rsultat dun e e e requte. e SELECT att1 , att2 , . . . FROM nom table WHERE condition ORDER BY atti , attj , . . . Le rsultat de la requte est tri par ordre croissant sur e e e lattribut atti En cas dgalit entre deux lignes au niveau de lattribut atti , e e on utilise lattribut attj , etc . . . Dans un ORDER BY, il est possible de faire suivre le nom dun attribut par ASC ou DESC pour indiquer un ordre croissant ou dcroissant. e

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 ;

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

Requtes sur plusieurs tables e


SELECT att1 , att2 , . . . FROM nom table1 , nom table2 , . . . WHERE condition ORDER BY atti , attj , . . .

Jointures

Exemple
Schma : e
Batiment(Num bat, Nom bat, Ent princ, Ent Sec) Departement(Num dept, Nom dept, Num bat)

En SQL, la jointure sexprime comme une slection sur le produit e cartsien. e

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

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

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 ;

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

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)

Exemple : Sous-requte lie ` la requte principale e e a 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

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

Sous-requtes renvoyant plusieurs lignes e


Oprateurs permettant dutiliser de telles sous-requtes : e e a IN (sous requete)
vrai si a appara dans le rsultat de sous requete. t 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

IF6 - Initiation aux Bases de donnes : SQL - 1 e

IF6 - Initiation aux Bases de donnes : SQL - 1 e

Sous-requte avec un rsultat ` plusieurs colonnes e e a


On peut utiliser la notation (a, b, . . .) pour former un n-uplet ` a comparer avec le rsultat de la sous-requte : e e Schma : e
Employe(Nom, Num, Fonction, Num sup, Embauche, Salaire, Num Dept)

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)) ;

S-ar putea să vă placă și