Vous êtes sur la page 1sur 135

| ||


 ||

|

Animateur : M. HAIJOUBI
| 
1. Traduire les opérations de l¶algèbre Relationnelle
en requêtes SQL.
2. Exploiter l'environnement du SGBDR pour
interroger une base de données.
3. Exploiter les commandes de description de
données.
4. Exploiter les commandes de manipulation des
données.
5. Gérer des transactions.
6. Utiliser les différents types d¶objets sur une base de
données.
7. Sécuriser les données.
2
3
=  
  
  
   
|
Î L¶algèbre relationnelle
Î Le langage SQL
Î Utiliser L¶ordre SELECT

Base de données exemple :


Groupe(È *nomg)
stagiaire(È*nom*prénom*adresse*dn*ln*sexe*
nb*È )

4
    
Î L'algèbre relationnelle est à l'origine du langage |  (Structured Query
Language) d'IBM* langage d'interrogation et de manipulation de tous
les SGBDR actuels (Oracle* PostgreSQL* MySQL* MS SQLServer* MS
Access et tous les autres).
Î Une bonne maîtrise de l'algèbre relationnelle permet de concevoir
n'importe quelle requête aussi complexe soit elle avant de la mettre en
œuvre à l'aide du langage SQL
Î Les opérations de base
Î Projection
Î Sélection
Î Jointure
Î Les opérations ensemblistes
Î Union
Î Intersection
Î Différence
Î Produit cartésien

5
   
Î Opération qui consiste à extraire toutes lignes d¶une table pour un sous ensemble de
colonnes
Î Exemple :
Liste des nom*prénom des stagiaires
Select nom*prénom from stagiaire

2  2  2 2
Amrani Med Sefrou 30/12/1987
Saadi Maha Fes 12/10/1988
Ayachi Rachida Fes 11/08/1986

2  2 
|2 2 

stagiaire Amrani Med
Saadi Maha
Ayachi Rachida
6

 
Î Permet de retenir les lignes répondant à une condition de sélection
Î La condition est exprimée à l'aide des opérateurs =* >* <* >=* <=* <>* opérateurs logiques de base
ET* OU* NON et éventuellement des parenthèses
Î Exemple :
| 
 |

2  2  2 2
Amrani Med Sefrou 30/12/1987
Saadi Maha Fes 12/10/1988
Ayachi Rachida Fes 11/08/1986

|2 2  2  2  2 2



stagiaire Saadi Maha Fes 12/10/1988
Where ln=µFes¶
Ayachi Rachida Fes 11/08/1986
7
 
Î  
                  
 
 
Î È          

        
  
 

2  2  2 2 È  È  2 


Amrani Med Sefrou 30/12/1987 TDI1B TDI1A Groupe A

Saadi Maha Fes 12/10/1988 TDI1A TDI1B Groupe B


TDI1C Groupe C
Ayachi Rachida Fes 11/08/1986 TDI1C

SELECT * FROM stagiaire*groupe WHERE


È  È 

2  2  2 2 È  È  2 


Amrani Med Sefrou 30/12/1987 TDI1B TDI1B Groupe B

Saadi Maha Fes 12/10/1988 TDI1A TDI1A Groupe A

Ayachi Rachida Fes 11/08/1986 TDI1C TDI1C Groupe C


8
ë  ë
Î Cet opérateur porte sur deux tables qui doivent avoir
le même nombre d'attributs définis dans le même
domaine. On parle de tables ayant le même schéma.
Î La table résultat possède les attributs des tables
d'origine et les lignes de chacune* avec ou sans
élimination des doublons éventuels.

9

 
Î Cet opérateur porte sur deux tables de même
schéma
Î La table résultat possède les attributs des
tables d'origine et les lignes communes à
chacune.

10
› 
Î Cet opérateur porte sur deux tables de même
schéma
Î La table résultat contient les lignes de la
première table qui n'appartiennent pas à la
deuxième

11
† 

Î Cet opérateur porte sur deux tables
Î La table résultat est formé par la concaténation de
chaque ligne de la première table avec l'ensemble
des lignes de la deuxième

12
† =   › 
Î Dans cet exercice vous allez utiliser SQL Server pour
créer la base de données EFP comprenant les deux
tables : groupe et stagiaire.
Î Démarrer SQL Enterprise manager
Î Enregistrer votre serveur
Î Créer la base de données
Î Créer les tables
Î Créer le schéma de la base de données
Î Utiliser l¶analyseur de requêtes pour interroger la BD

13
 |
Î En 1970* SQL (Standard Query Language* en français langage
de requêtes structurées ) est né à la suite des travaux
mathématiques de Codd (Directeur de recherche du centre IBM
à San-José) * travaux qui ont fondé les bases de données
relationnelles
Î Suite à ces recherches plusieurs langages sont apparus :
‡IBM Sequel (Structured English Query Language) en 1977
‡IBM Sequel/2
‡IBM System/R
‡IBM DB2
Î En 1982* SQL fut lancé commercialement par IBM. SQL a subit
3 normalisations :
‡SQL1 en 1986 (version minimale)
‡SQL1 en 1989 (+ intégrité)
‡SQL2 en 1992
‡SQL3 en 1999
Î Aujourd'hui SQL constitue le point d'entrée obligatoire sur une
Base de Donnée relationnelle.
14
ë 
  |
| | */liste d¶attributs

nom(s) de table(s)
condition de sélection
 !"#nom de l¶attribut de regroupement
$%condition de regroupement
"#critère(s) de tri

  &|&
 |

|«.. 

15
›|
Î Le résultat d¶un SELECT étant un ensemble* il peut y
avoir des doublons
Î Le mot clé DISTINCT permet de préciser que l¶on ne
veut qu¶un seul exemplaire de ces enregistrements
Î Remarque : le résultat est une liste triée

Î Exemple : liste des prénom des stagiaires

SELECT prénom FROM stagiaire


SELECT DISTINCT prénom FROM stagiaire

16

 

Î §ous pouvez utiliser les opérateurs
arithmétiques '() pour effectuer des
calculs
Î Priorité des opérateurs : * et / sont prioritaires
sur + et ±
Î §ous pouvez utiliser les parenthèses

Î Exemple :
|  
 
17
(   ((
Î Une valeur NULL est une valeur non
disponible* non affectée* inconnue ou
inapplicable. Une valeur NULL est différente
du zéro ou de l'espace. Le zéro est un chiffre
et l'espace est un caractère
Î Exemple :
| 

 
| 

18

   
Î Renomme l¶en-tête de colonne
Î Est utile dans les calculs
Î Suit immédiatement le nom de la colonne
avec le mot-clé AS
Î Doit obligatoirement être inclus entre
guillemets s¶il contient des espaces* des
caractères spéciaux ou si il faut tenir compte
des majuscules/minuscules
Î Exemple :
|  $| 
 
19
a    

Î L'opérateur de concaténation (+) permet de
concaténer des colonnes à d'autres colonnes*
à des expressions arithmétiques ou à des
valeurs constantes
Î Exemple :
| (( 
 $|!

 

20
† ë 
| 
Écrire les requêtes qui permettent :
Î Afficher la liste de tous les stagiaires
Î Afficher la liste des villes de naissance sans
doublons
Î Afficher une liste qui comprend deux
colonnes : une pour le nom et prénom
concaténés et une autre pour l¶adresse
Î Afficher la liste des lieux et dates de
naissance en définissant des aléas pour ces
deux colonnes
21
 
 
Î Dans la clause WHERE* les chaînes
alphanumériques et les dates doivent être
incluses entre simples quottes
Î Opérateurs de Comparaison
þ   | È  
 
 | þ 
 | þ  þ
  þ 
  þ  þ
  þ 

22
 
Î L'opérateur BETWEEN permet d'afficher des
lignes en fonction d'un intervalle de valeurs
Î §ous spécifiez un intervalle comprenant une
limite inférieure et une limite supérieure

Î Exemple :
| 

 
"*$*+
23
a  
Î Permet de comparer une expression avec
une liste de valeurs* utilisez l'opérateur IN
Î Opérateur d¶appartenance à un ensemble de
valeurs

Î Exemple :
| 

 
, -    .
24
a  (
Î L'opérateur LIKE permet d¶effectuer une
comparaison partielle
Î Il est surtout employé avec les colonnes contenant
des données de type alphanumériques
Î Il utilise les jokers % et _ (µpour cent¶ et µblanc
souligné¶). Le joker % remplace n'importe quelle
chaîne de caractères* y compris la chaîne vide. Le
blanc souligné remplace un et un seul caractère.

Î Exemple :
| 
 
 /"$
25
a  ( 
 
Î Un opérateur logique combine le résultat de
deux conditions pour produire un résultat
unique ou inverse le résultat d'une condition
unique. SQL inclut trois opérateurs logiques :

AND Intersection
OR Union
NOT négation
26
 ›!
 
sexe=µM¶ $ ln=µFes¶

27
  !ë 
sexe = µM¶  ln=µFes¶

28
 ›"
Î ORDER BY colonne1 | 1 [ASC ou DESC ] [* colonne2
| 2 [ASC ou DESC ] ...
Î La clause ORDER BY sert à trier les lignes
Î $|, È.classe les lignes en ordre
croissant. C'est l'ordre par défaut.
Î |, È.classe les lignes en ordre
décroissant.

Î Exemple :
| 
 
"# |

29
 
 †
Î La clause TOP n permet d¶afficher les n
premières lignes de la requête

Î Exemple :
| !0 

  
"#|

30
†   
  
Développer les requêtes suivantes :
Î Liste des stagiaires ayant une note du bac supérieure à 12
Î Liste des stagiaires de sexe féminin puis celle des stagiaires
masculins
Î Liste des stagiaires né à Taza puis ceux qui ne sont pas nés à
Fes
Î Liste des stagiaires qui portent les prénoms : Fatima* Meryem
ou Ahmed
Î Les stagiaires qui habitent le quartier Benslimane
Î Les stagiaires de sexe masculin ayant plus de 12 dans la note
du Bac
Î Les stagiaires ayant une note entre 11 et 12
Î Liste des stagiaires triée dans l¶ordre décroissant des notes
Î Liste des stagiaires triée par sexe puis par nom
31
>  
   
Î>   


Î >   þ 
Î >  
Î >      

32
>  

#

Î Les fonctions scalaires suivantes effectuent une


opération sur une valeur de type chaîne et renvoient
une valeur numérique ou de type chaîne.
Î  : longueur d¶une chaîne
Î | "| : extraction
Î   !! : majuscule/minuscule
Î 

: supprimer espaces
Î %|1Renvoie l'inverse d'une expression de
type caractère
Î  : compare deux chaînes et renvoie
une valeur de 0 à 4 (0 indique peu ou pas de
similarité* 4 indique une forte similarité )
33
  
Î Renvoie le nombre de caractères d'une expression
de chaîne* à l'exception des espaces de droite en fin
de chaîne

Î |2 
LEN ,  2
  2.

Î  1 dans l'exemple ci-après* le nombre de


caractères et les données figurant dans le  du
stagiaire sont sélectionnés
|, . 

| 
34

  
>$

|ë|

Î Extraction d¶une sous chaîne de caractères

Î Syntaxe :
Î LEFT ,È 2  2.
Î RIGHT ,È 2  2.
Î SUBSTRING ,È 2    2.

35

  놆 
Î Conversion majuscule (UPPER) et minuscule
(LOWER) d¶une chaîne de caractères
alphabétiques

Î Syntaxe :
Î UPPER ,È 2.
Î LOWER ,È 2.

36

  
Î Suppression des espaces à gauche (LTRIM)
ou à droite (RTRIM) d¶une chaîne de
caractères

Î Syntaxe :
Î LTRIM ,È 2.
Î RTRIM ,È 2.

37
† 
#
 
Développer les requêtes suivantes
Î Liste des noms et longueurs des noms des
stagiaires. Puis trier la liste dans l¶ordre décroissant
des longueurs des noms.
Î Afficher une liste contenant les cinq premiers
caractères du nom. Puis une autre liste avec les cinq
derniers caractères du nom.
Î Liste des adresses en majuscule avec les lieux de
naissance en minuscule.
Î Liste des adresses inversées
Î Afficher tous les prénoms similaires à FATM »
38
>  
 

Î Les fonctions numériques utilisent et


ramènent des valeurs numériques.
Î   : calculer l¶arrondi
Î  : trouver l¶entier immédiatement
supérieur ou égal
Î   : valeur entière

39
>  
›
Î Date = Année* mois* jour*
heure* minute* seconde*
milliseconde

Î Les fonctions scalaires    È  


suivantes effectuent une $$
opération sur une valeur $
d'entrée de type date et $!$
heure et renvoient une valeur $#
numérique* une valeur de

type date ou heure* ou une
#$
chaîne.

40
  ›››
Î Renvoie une nouvelle    $
  
valeur    2 222222
calculée en ajoutant un   
intervalle à la date   3 
spécifiée. 2 2 22
Î |2  2 
DATEADD , 2    
2   . 2 
3  33
  
È  
 È  
41
  ››>>
Î $1renvoie le nombre de limites de
date et d'heure traversées entre deux dates
données.

Î |2 
DATEDIFF , 2        2.

Î  : calcul de l¶age des stagiaires


| DATEDIFF(year* dn* getdate())

stagiaire
42
  ݠ
Î Renvoie un entier représentant l'élément de
date précisé dans la date spécifiée.
Î |2 1
DATEPART , 2    .

Î  :
SELECT DATEPART(month* dn)
FROM stagiaire

43
›"$  "
Î Ces fonctions renvoient respectivement le
jour* mois et année d¶une date donnée

Î Syntaxes :
Î DAY , .
Î MONTH , .
Î YEAR , .

44
† 
 

 
Développer les requêtes suivantes :
Î Liste des nom et année de naissance des
stagiaires
Î Liste des noms et ages des stagiaires
Î Liste des stagiaires nés un Jeudi
Î Liste des stagiaires nés au mois de Juillet
Î Les noms et prénoms des stagiaires nés
entre 15/3/1985 et le 14/3/1987

45
>  
 %
 & 
Î |Convertit un nombre en chaîne de caractère
Î $|Renvoie le code ASCII du caractère placé à
l'extrême gauche d'une expression de caractères
Î $1convertit un code ASCII  en un caractère
Î $|  %1Convertit explicitement une
expression d'un type de données en une expression
d'un type de données différent. CAST et CON§ERT
offrent la même fonctionnalité.

46
  

 

ÎLe produit cartésien


ÎL¶équi-jointure
ÎL¶auto-jointure
ÎLes jointures externes
ÎOpérations ensemblistes

47
  

Î Le produit de deux tables permet d¶obtenir toutes les combinaisons de lignes de ces deux
tables
| 
  

È   È  È   


B2501
C2103
D1254
Ali
Laila
Said
tdi1a
tdi1a
tdi1a
 tdi1a
tdi1b
Groupe A
Groupe B

È   È  È   


B2501 Ali tdi1a tdi1a Groupe A


C2103 Laila tdi1a tdi1a Groupe A
D1254 Said tdi1a tdi1a Groupe A
B2501 Ali tdi1a tdi1b Groupe B
C2103 Laila tdi1a tdi1b Groupe B
D1254 Said tdi1a tdi1b Groupe B
48
' 
Î On appelle équi-jointure une jointure dont la qualification est une égalité entre
deux colonnes.
|È  
  
 È  È 

|È  
 4  
 È  È 

È   È  È   


B2501 Ali tdi1a  tdi1a Groupe A
C2103 Laila tdi1a  tdi1a Groupe A
D1254 Said tdi1a  tdi1a Groupe A
B2501 Ali tdi1a
 tdi1b Groupe B
C2103 Laila tdi1a
 tdi1b Groupe B
D1254 Said tdi1a
 tdi1b Groupe B

49
 
 
Î Il est possible d¶utiliser des aléas des tables
utilisé dans une jointure pour simplifier
l¶écriture de la requête SQL

Î Exemple :
|  

   
 È È 

50
 ' 
Î C'est une jointure d'une table avec elle-même
Î Utile lorsqu'on souhaite relier des attributs qui
se trouvent à l'intérieur d'une même table

Î Exemple : afficher les couples de stagiaires


(noms) nés à la même ville
| *   

  *  
 * 
$ *È È
51

 
(

Î Une equi-jointure ne renvoie des lignes que si la colonne de


jointure d'une table est égale à la colonne de jointure de l'autre
table
Î Il peut être utile d'afficher toutes les lignes d'une table qu'il y ait
ou non correspondance avec l'autre table de jointure
Î Les colonnes pour lesquelles il n'y a pas de correspondance
sont remplies avec la valeur NULL
Î Cette opération s'appelle une jointure externe
Î Il existe deux type de jointures externes : jointure externe
gauche et jointure externe droite
Î Notation
Î Jointure externe gauche  ou 4 
Î Jointure externe droite  ou 4 

52
†  
 
 
Î Commencer par ajouter les tables suivantes à la BD :
Î Module( È * nomm)
Î Resultat( ÈÈ * controle*efm)
Î Mettre à jour le diagramme de la BD
Î Remplir la table des modules et ajouter quelques
enregistrements dans la table des résultats
Î Télécharger et attacher la BD efp2 puis développer
les requêtes suivantes :
Î Produit cartésien des tables stagiaire et module
Î Liste des noms et notes des stagiaires
Î Modifier la requête précédente pour afficher même les
stagiaires qui n¶ont pas de note
53
 

 


Î L¶opérateur UNION
Î L¶opérateur INTERSECT
Î L¶opérateur MINUS

54
 ë 
Î Exemple : on souhaite créer une liste comprenant les
10 meilleurs stagiaires par rapport à la note du bac
avec une répartition équitable par sexe (5 garçons et
5 filles)
,| 0 

  
"#|.
 
,| 0 

  

"#|.
55
 |
Î Exemple : on souhaite obtenir les noms des stagiaires de sexe
masculin ayant une note du bac supérieure à 12

Î Solution ensembliste
,| 
 
 
.
|
,| 
 
*.

Î Solution prédicative
| 
 
 
$*

56
 ë|
Î On voudrait obtenir les noms des stagiaires féminins
qui ne sont pas nés à FES

Î Solution ensembliste
| 
 
 

 |
| 
 
|

Î Solution prédicative
| 
 
 |
57
†  

 

 
Î Donner les versions ensemblistes et
prédicatives des requêtes suivantes :
Î Noms des stagiaires masculins ayant moins
de 20 ans
Î Noms des stagiaires du groupe TSDI2A qui ne
sont pas né à TAZA*SEFROU ou TAOUNATE
Î Une liste contenant 3 stagiaires né à FES et 3
né à SEFROU ayant obtenu la meilleurs note
au bac

58
   
 
 
Î Il peut être intéressant de regrouper des
lignes afin de faire des opérations par groupe
(opérations statistiques par exemple)
Î Cette opération se réalise à l'aide de la
clause à * suivie du nom de chaque
colonne sur laquelle on veut effectuer des
regroupements.

59
>  
  

>

  
|

|
       

  
 
|
  
!  þ
"

 ! 
þ þ  ! 


 #|
           



|
          


||
  |      



60
 

 ë†"
Î Cette clause permet de créer des sous-
ensembles de lignes pour lesquels la valeur
d'une (ou plusieurs) colonne est identique

Î Exemple : calculer la moyenne des notes du


bac pour chaque groupe
|È  ,.

 
 !"#È 

61
 
  

Î Cette clause* contrairement à la clause WHERE qui


précise les conditions à appliquer sur les lignes d'une
table* permet de préciser des conditions au niveau
des sous-ensembles créés par GROUP BY

Î Exemple : reprendre la requête précédente mais


afficher uniquement les ligne dont la moyenne est
supérieur à 12.5
|È  ,.

 
 !"#È 
$% ,.*0

62
   
Î Toutes les colonnes qui apparaissent après
la clause SELECT* sujette à un
regroupement* doivent :
Î Soit faire partie d¶une fonction
d¶agrégation
Î Soit apparaître dans la clause
GROUP BY

63
†   
  
 
Î Développer les requêtes suivantes :
Î Moyenne des notes de contrôle par module d¶abord en
affichant le codem et la moyenne* ensuite en affichant
le nomm et la moyenne
Î Nombre total de stagiaires
Î Nombre de stagiaires de chaque groupe
Î Note maximale et note minimale pour chaque module
Î Moyenne de tous les contrôles par stagiaire. Afficher
seulement ceux dont la moyenne est supérieur à 11.75
Î Moyenne des efm des stagiaires de sexe féminin
Î Combien y¶a-t-il de lieux de naissance distincts
Î Combien y¶a-t-il de prénoms différents par groupe

64
| 


Î Une sous requête est une requête SELECT qui


renvoie une valeur unique et est imbriquée dans une
autre instruction SELECT
Î Les instructions contenant une sous-requête se
présentent généralement sous une des formes
suivantes :
Î expression  ,sous requête.
Î expression opérateur_comparaison $#&
$,sous requête.
Î  ||,sous requête.

65
| 

  
Î Exemple : liste des stagiaires n¶ayant pas de
note au module 3 :

|   



 
È 
,|È
   
È +.

66
| 

  
 "
Î Exemple : le stagiaire ayant la plus hausse
note du bac :

|   



 
$
,|
 .

67
| 

   ||
Î Exemple : liste des modules pour lesquels il
existe au moins une note attribuée à un
stagiaire :

| 
  
||
,| 
   
È   È .

68
†= 


 
Développer les requêtes suivantes :
Î Liste des stagiaires n¶ayant pas de note pour
le module 2
Î Liste des stagiaires ayant eu la meilleur note
au module 3
Î Liste des stagiaires ayant eu la dernière note
au module 3

69
70
 (  % 
|
›  ›
Î L'Analyseur de requêtes SQL permet :
Î créer des requêtes et autres scripts SQL
Î procéder au débogage en cas de problème de
performances des requêtes ($ È3 

È  * $ È3 È    * $ È3
       È * $   !

)
Î localiser des objets dans les bases de données
Î insérer* mettre à jour ou supprimer rapidement des
lignes dans une table (fenêtre Ouvrir une table)
Î §ous pouvez exécuter l'Analyseur de requêtes SQL
directement à partir du menu 
 ou de SQL
Server Enterprise Manager. Une autre possibilité
consiste à lancer l'application à partir de l'invite de
commandes* en exécutant l'utilitaire  . 71
72
 (  
 


    

Î Principaux objets d'une base de données


Î Créer une base de données
Î Créer une table
Î Types de données des colonnes
Î Modifier la définition d¶une table
Î Supprimer une table

73
† ( 
 

  

a   

p  
     
 
  

 
  
    
  
 



       
  


74
 
  

$$$"$| efp Crée une bd nommée efp


ON
( NAME = µefp_data¶* Nom logique du fichier de données
FILENAME = 'd:\demo\efp_dat.mdf'* Nom physique sur le disque
SIZE = 10* MAXSIZE = 50* Taille initiale et taille maximale
FILEGROWTH = 5 ) Croissance du fichier de données
LOG ON
( NAME = µefp_log'* Nom logique du jurnal
FILENAME = 'd:\demo\efp_log.ldf'* Nom physique sur le disque
SIZE = 5MB* MAXSIZE = 25MB* Taille initiale et taille maximale
FILEGROWTH = 5MB ) Croissance du fichier journal

75
  
CREATE TABLE nomtable
(colonne1 definitionType* colonne2 definitionType* «.)

Î Cet ordre fait partie d'une série d'ordres appartenant


au langage de définition des données (LDD) qui sera
étudié dans les prochains chapitres.
Î Exemple :
CREATE TABLE resultat
(cin varchar(12)* codem int* controle float* efm float*
Moyenne AS (controle + efm)/3 )

76
  ›>ë
Î On peut déclarer une valeur par défaut pour
une colonne en utilisant l'option DEFAULT

Î Cette option empêche l'insertion de valeurs


NULL dans une colonne lors de l'ajout d'une
ligne

77
& 
  

 

 þ |   


   $  #
 (
)=
 $  #


()=
 
   
*   
 
 % +
| 
 
 =
',

 
 
'=,='=
>   ,%  
   ›

  =  
 

  = 
|  › 
78
     
Î Il est possible modifier la structure d¶une table pour
ajouter* par exemple* une colonne oubliée ou
changer une définition de colonne existante
Î Cela est possible grâce à la commande $
$"
Î §ous pouvez ajouter des colonnes à une table en
utilisant l'ordre ALTER TABLE avec la clause ADD
Î Exemple :
ALTER TABLE resultat
ADD appreciation §ARCHAR(60)

79
|  
Î Pour supprimer une table* tapez la
commande :

DROP TABLE <nom de la table>

Exemple : suppression de la table des résultats:

DROP TABLE resultat

80
†==›
  
  
=
En utilisant Enterprise manager* Créer la base
de données test puis* avec l¶analyseur de
requêtes :
Î Créer la table groupe »
Î Créer la table stagiaire »
Î Créer la table resultat »
Î Créer la table module »

81
 

Î NOT NULL
Î PRIMARY KEY
Î FOREIGN KEY
Î UNIQUE
Î CHECK

82
 ë
Î La contrainte NOT NULL interdit la présence
de valeurs NULL dans la colonne à laquelle
elle s'applique
Î Par défaut* les colonnes peuvent contenir des
valeurs NULL

Î Exemple :
CREATE TABLE groupe
(codeg int* nomg varchar(30)   )
83
†"-"
Î Une contrainte PRIMARY KEY crée une clé primaire
pour la table
Î La contrainte PRIMARY KEY est une colonne ou un
ensemble de colonnes qui identifie de manière
unique chaque ligne d'une table
Î garantit qu'aucune colonne faisant partie de la clé
primaire ne contient de valeur NULL

Î Exemple :
CREATE TABLE groupe
(codeg varchar(6)* nomg varchar(30)   
CONSTRAINT pk_groupe PRIMARY KEY(codeg) )
84
> 
-"
Î La contrainte FOREIGN KEY* ou contrainte d'intégrité
référentielle* désigne une colonne ou une combinaison de
colonnes comme étant une clé étrangère
Î établit une relation avec une clé primaire

Î Exemple :
CREATE TABLE stagiaire
(cin varchar(12)* nom varchar(30)* « *
codeg varchar(6)*
CONSTRAINT pk_stagiaire PRIMARY KEY (cin)*
CONSTRAINT fk_groupe FOREIGN KEY (codeg)
REFERENCES groupe(codeg)
ON DELETE NO ACTION
ON UPDATE CASCADE
)

85
ëë
Î Une contrainte d'intégrité de type clé UNIQUE exige
que chaque valeur dans une colonne ou dans un
ensemble de colonnes (la clé) soit unique

Î Exemple :
CREATE TABLE stagiaire
(cin varchar(12)* ni int* nom varchar(30)* « *
codeg varchar(6)*
CONSTRAINT pk_stagiaire PRIMARY KEY (cin)*
CONSTRAINT fk_groupe FOREIGN KEY (codeg)
REFERENCES groupe(codeg)*
CONSTRAINT uk_ni UNIQUE (ni) )
86
 -
Î La contrainte CHECK définit une condition
que chaque ligne doit obligatoirement
satisfaire

Î Exemple :
CREATE TABLE stagiaire
(cin varchar(12)* nom varchar(30)*
sexe CHAR(1)*« *
CHECK (sexe=µF¶ or sexe=µM¶) )
87
| 

  
Î Utilisez l'ordre ALTER TABLE avec la clause
DROP
Î L'option CASCADE provoque également la
suppression de toutes les contraintes
associées

Î Exemple :
ALTER TABLE stagiaire
DROP CONSTRAINT fk_groupe
88
†= 
=
Ajouter aux tables de la base de données test
les éléments suivants :
Î Clés primaires
Î Clés étrangères avec mise à jour en cascade
Î Les notes doivent être comprises entre 0 et
20
Î Le sexe doit être µF¶ ou µM¶ avec µF¶ comme
valeur par défaut
Î Les notes ne doivent pas accepter NULL

89
90
 (  
 

   
  

Î Ajout d¶une ligne


Î Ajout de plusieurs lignes avec SELECT
Î Insertion de valeurs NULL
Î Modification de ligne
Î Suppression d¶une ligne

91
  
Î Pour ajouter de nouvelles lignes dans une table*
utilisez l'ordre INSERT

Î Syntaxe :
INSERT INTO table [(colonne1* colonne2 « )]
§alues (valeur1* valeur2* « )

Î Exemple :
INSERT INTO groupe (codeg* nomg)
§ALUES (µTDI1A¶* µTechniques Dév Info 1 groupe A¶)

92
  

 
%
|
Î Il est possible d¶insérer le résultat d¶une
requête SELECT dans une table

Î Exemple : archivage de la liste des stagiaires


INSERT INTO archive_stagiaire
SELECT * FROM stagiaire

93

 % 
ë
Î Si une colonne n'est pas explicitement spécifiée dans
la liste* elle reçoit automatiquement une valeur NULL
Î Méthode implicite : ajout d¶un groupe sans fournir de
valeur pour le nom du groupe :
INSERT INTO groupe (codeg)
§ALUES (µTDI1A¶)

Î Méthode explicite : spécifiez le mot-clé NULL


INSERT INTO groupe (codeg* nomg)
§ALUES (µTDI1A¶* NULL)

94
   
Î §ous pouvez modifier des lignes existantes au
moyen de l'ordre UPDATE
Î Syntaxe :
UPDATE table
SET colonne1=valeur1* colonne2=valeur2 «
[WHERE condition]

Î Exemple :
UPDATE stagiaire SET adresse =¶19* hay saada 2 Fès¶
WHERE cin = µc150¶

UPDATE resultat SET note = note + 1


WHERE codem=1
95
| 

  
Î §ous pouvez supprimer des lignes existantes
au moyen de l'ordre DELETE

Î Syntaxe :
DELETE [FROM] table
WHERE condition

Î Exemple :
DELETE resultat
WHERE note is null
96
†=   
  
 

Î Ajouter un groupe à la table groupe


Î Code : µTDI2A¶ nom : µTechniques dév. Info 2 A¶
Î Ajouter un stagiaire du groupe TDI2A à la table
stagiaire
Î Supprimer le groupe TDI2A. Que constatez vous et
pourquoi ?
Î Supprimer les stagiaires qui ont une note du bac
inférieure à 11. Que constatez vous et pourquoi ?
Î Tous les stagiaires de première année sont admis en
deuxième année* écrire la requête qui permet de
modifier leur groupe
97
98
 


 

Î Qu¶est ce qu¶une transaction


Î Démarrage des transactions
Î Fin des transactions
Î BEGIN TRANSACTION
Î COMMIT TRANSACTION
Î ROLLBACK TRANSACTION

99


 
Î Les transactions offrent un mécanisme de
regroupement d'une série de modifications de
base de données dans une opération logique
Î Une fois les modifications apportées à la
base de données* elles peuvent être validées
ou annulées comme une seule unité

100
› 

 

Î §ous pouvez lancer des transactions explicites* implicites ou en
mode de validation automatique
Î  È    È  : Pour démarrer une transaction
explicite* utilisez l'instruction BEGIN TRANSACTION.
Î  È           : C'est le
mode par défaut de SQL Server. Chaque instruction est validée
lorsqu'elle se termine. Il est inutile de spécifier des instructions
de contrôle des transactions.
Î  È    È  : §ous pouvez activer le mode de
transaction implicite en utilisant l'instruction SET
IMPLICIT_TRANSACTIONS ON. L'instruction suivante démarre
automatiquement une nouvelle transaction. La transaction est
active jusqu'à l'exécution d'une instruction COMMIT ou
ROLLBACK

101
>

 

Î §ous pouvez terminer une transaction par
une instruction COMMIT ou ROLLBACK.
Î 

 : garantit que toutes les


modifications effectuées sur la base de
données au cours de la transaction sont
permanentes
Î  "$/ : annule toutes les modifications
effectuées par la transaction en rétablissant
les données dans l'état où elles étaient avant
le début de celle-ci

102

| 
Î Indique le début d'une transaction locale
explicite

Î Syntaxe :
BEGIN TRANSACTION

103
 | 
Î Marque la fin d'une transaction réussie
implicite ou définie par l'utilisateur

Î |2 1
COMMIT TRANSACTION

104
 -| 
Î Annule une transaction implicite ou explicite
jusqu'au début de la transaction ou jusqu'au
dernier point d'enregistrement à l'intérieur de
la transaction

Î |2 1
ROLLBACK TRANSACTION

105
†= 

 

Î La table compte comprend les champs suivants :


numéro* nom et solde
Î Simuler une panne du serveur après l¶exécution
d¶une partie d¶une transaction. Cette transaction
comprend deux commandes update qui permettent
d¶effectuer un virement de 1000DH du compte n°100
vers le compte n°200
Begin transaction
Update compte set solde = solde -1000 where numero = 100
(panne du serveur = arrêter puis redémarrer le serveur)
Update compte set solde = solde -1000 where numero = 200
Commit transaction
Î Que constatez vous?

106
107
 ë 
 
 
& 
 



  

Î Les vues
Î Les index

108

%

Î Une est une table virtuelle dont le contenu est


défini par une requête
Î Une vue ressemble à une table réelle* avec un
ensemble de colonnes nommées et de lignes de
données
Î Une vue n'existe pas en tant qu'ensemble de valeurs
de données stocké dans une base de données
Î Les lignes et les colonnes de données proviennent
de tables référencées dans la requête qui définit la
vue et sont produites dynamiquement lorsque la vue
est utilisée
109
%

%

Î Limiter l'accès à la base de données en


affichant une sélection de celle-ci
Î Simplifier la consultation des données. Une
vue peut être utilisée pour extraire les
données de plusieurs tables.
Î Permet à des groupes d'utilisateurs d'accéder
aux données en fonction de leurs critères
particuliers

110
  %
Î §ous pouvez créer une vue en utilisant l'ordre
$% suivi du nom de la vue* du
mot $| et d¶une requête SQL

Î Exemple :
CREATE §IEW filles AS
SELECT * FROM stagiaire WHERE sexe=µF¶

CREATE §IEW garcons AS


SELECT * FROM stagiaire WHERE sexe=µM¶
111
| 

 %
Î DROP §IEW supprime une vue dans la base
de données courante

Î Exemple :
DROP §IEW garcons

112

(
Î Les index des bases de données sont similaires aux index que
l'on trouve dans les livres
Î L'index d'un livre vous permet de rechercher rapidement des
informations sans lire la totalité de l'ouvrage
Î Celui d'une base de données permet de rechercher des
données dans une table sans analyser la table tout entière
Î L'index d'un livre est une liste de mots accompagnés du numéro
de page où ils se trouvent
Î L'index d'une base de données est une liste des valeurs d'une
colonne accompagnées des emplacements de stockage des
lignes où les valeurs se trouvent
Î Un index peut être créé dans une table* soit sur une seule
colonne* soit sur un ensemble de colonnes

113
(   (
Î Lorsque vous créez un index ordonné en
clusters* la table est copiée* les données de
la table sont triées et la table initiale est
supprimée

Î La création d'un index unique garantit l'échec


de toute tentative d'entrer des valeurs de clé
en double

114
  (
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX nom_ 2
ON { | } ,È  22[ ASC | DESC ] [ ...2] .

Î   :
CREATE UNIQUE INDEX idx_inscription
ON stagiaire (nins)

CREATE INDEX idx_nom


ON stagiaire (nom)

115
†=%
( =
Î Créer des vues à partir des requêtes du TP09

Î Ajouter un index unique comprenant les deux


colonnes nom et prénom des stagiaires

116
117
 | 
 
  

SYSTEME D¶EXPLOITATION

SYSTEME DE GESTION DE BASE DE DONNEES

BASE DE DONNEES

OBJETS DE LA BASE DE DONNEES

118
 
  
SQL Server peut fonctionner selon deux modes
de sécurité :
Î   3  È    : Ce
mode permet à l'utilisateur de se connecter
par le biais d'un compte utilisateur Windows
Î    (authentification Windows et
authentification SQL Server) : ce mode
permet aux utilisateurs de se connecter à
SQL Server à l'aide d¶un compte Windows ou
d¶un compte propre à SQL Server

119
 

Î Les rôles sont de puissants utilitaires permettant de réunir les


utilisateurs en une seule unité à laquelle il est possible
d'appliquer des autorisations
Î Les autorisations octroyées à un rôle* refusées ou révoquées
s'appliquent aussi aux membres du rôle.
Î §ous pouvez créer un rôle représentant un poste rempli par une
catégorie de collaborateurs* lui octroyer les autorisations
appropriées.
Î Chaque fois qu'un collaborateur passe à un autre travail* il suffit
de l'ajouter comme membre du rôle.
Î Il n'est pas nécessaire d'accorder* de refuser ou de révoquer les
autorisations de chaque utilisateur à chaque fois qu'il accepte
ou qu'il quitte un travail.
Î Elles sont automatiquement appliquées aux utilisateurs dès
qu'ils deviennent membres du rôle
120
%   
5  È  
2  Exécute n'importe quelle opération dans SQL
Server
  Configure les paramètres au niveau du serveur.
  Ajoute et supprime les serveurs liés et exécute
certaines procédures système stockées telles que
    .
È  2 Gère les connexions au serveur.
 È  Gère les traitements s'exécutant dans une
instance de SQL Server.
È  Crée et modifie les bases de données.
  Gère les fichiers sur disque.
  Exécute l'instruction BULK INSERT.

121
 

  
(

5    
È par défaut

  Propriétaire de la BD* possède toutes les autorisations sur la BD.

ÈÈ  gère les accès : ajoute ou supprime des utilisateur.

 È  2 gère les droits : accès* propriétés d'objet* rôles et membres des rôles

 Exécute les commandes de description de données (DDL)


opérateur de sauvegarde (mais pas de restauration !). Lance les
È  
instructions DBCC* CHECKPOINT et BACKUP.
droit de consultation des données de la base (lecture uniquement).
  Sélectionne toutes les données de toutes les tables utilisateur dans la
base de données.
droit en lecture* écriture des données de la base. Modifie les données
  
de toutes les tables utilisateur dans la base de données.
2  révocation des droits en lecture sur tous les objets de la base
2   révocation des droits en écriture sur tous les objets de la base

122
 
&
 
Î Compte sql server par défaut
Î Il est affecté au rôle de serveur 2  et
ne peut pas être modifié
Î Par défaut le compte  possède un mot de
passe vide
Î Assignez un mot de passe au compte 
pour vous prémunir contre tout accès non
autorisé

123
 þ! þ
! › a 
Î  est un utilisateur qui possède les autorisations
implicites nécessaires pour effectuer toutes les
activités dans la base de données
Î L'utilisateur  ne peut pas être supprimé et est
toujours présent dans toutes les bases de données
Î Si l'utilisateur È3* membre du rôle de serveur
2 * crée une table ** celle-ci appartiendra à
 et sera désignée par  ** et non È3*.
Î Si È3est seulement membre du rôle de base de
données  * et qu'il crée une table ** celle-
ci appartiendra à È3 et sera désignée par
È3*

124
 
   .
,
 ,|
%
Î Cet exemple montre comment accorder à un
compte Windows l'accès à une base de
données et comment associer la connexion à
un utilisateur de la base de données :
Î (sp = stored procedure procédure stockée)
USE master
sp_grantlogin µdomaine\said¶
sp_defaultdb @loginame = µsaid'* defdb = µefpµ
USE efp
sp_grantdbaccess µsaid¶* µsaid¶
125
' (  
   
L'ajout d'un utilisateur affectés à des rôles prédéterminés se fait en
deux temps :
1. création de la connexion
2. ajout d'un utilisateur et de son rôle
Les procédures stockées à utiliser sont les suivantes :

 È      È


 È      5

il est nécessaire d'utiliser la base de données cible.

  : création de l¶utilisateur hamid dont le mot de passé


kw7E.6J et possédant le rôle de lecteur uniquement :

exec sp_addlogin µhamid'* 'kw7E.6J'* µefp'


sp_adduser µhamid'* 'u_hamid'* 'db_datareader'
126
  

 
Accordez des autorisations d'instruction et
d'objet qui permettent à un compte utilisateur:
Î d'effectuer des opérations ou de travailler
avec des données dans la base de données
en cours
Î de les restreindre quant aux opérations et
informations qui ne font pas partie de leur
fonction

127
  , 
Î  joute un compte
comme membre du rôle de base de données
Î |2 1
   È  

Î  1
sp_addrolemember µcomptable'* µsaid'

128


Î Permet à un utilisateur de travailler avec les données de la base
ou d'exécuter des instructions particulières.
Î $         È  1
GRANT { ALL | 2 È 2[ ...2] }
TO È  [ ...2]
Î ALL : Accorde toutes les autorisations
Î ÷2 È 2Nom de l'instruction pour laquelle l'autorisation
est accordée. La liste des instructions peut inclure :
CREATE DATABASE* CREATE DEFAULT* CREATE
FUNCTION* CREATE PROCEDURE* CREATE RULE*
CREATE TABLE* CREATE §IEW* BACKUP DATABASE*
BACKUP LOG
Î Exemples :
Î GRANT ALL to said
Î GRANT CREATE §IEW to rachid

129


Î $         1
GRANT
{ ALL [ PRI§ILEGES ] |   2[ ...2] }
{
[ ,È 22[ ...2] .] ON {  | 
| ON {  | } [ ,È  22[ ...2] .]
}
TO È  [ ...2]
Exemples :
Î GRANT SELECT ON module TO public
Î GRANT INSERT* UPDATE* DELETE ON stagiaire TO
fatima* said* ali

130

  
 
Î supprime une autorisation précédemment
accordée à l'utilisateur ou au rôle
Î désactive une autorisation héritée d'un ou de
plusieurs autres rôles
Î vous assure qu'un utilisateur ou un rôle
n'héritera pas à l'avenir d'une autorisation

131
›"
Î $         È  1
DENY { ALL | 2 È 2[ ...2] }
TO È  [ ...2]
Î $         1
DENY
{ ALL [ PRI§ILEGES ] |   2[ ...2] }
{
[ ,È  22[ ...2] .] ON { 
| ON {  | } [ ,È  22[ ...2] .]
}
TO compte [ ...2]
[ CASCADE ]
Î   :
GRANT SELECT ON stagiaire TO public
DENY SELECT* INSERT* UPDATE* DELETE ON stagiaire TO
laila* driss

132
  
 
Î §ous pouvez retirer une autorisation précédemment
accordée ou refusée
Î Le retrait d'une autorisation est similaire à un refus
dans la mesure où les deux actions suppriment une
autorisation accordée au même niveau
Î Cependant* cela n'empêche pas l'utilisateur* le
groupe ou le rôle d'hériter d'une autorisation
accordée à un niveau supérieur.
Î Par conséquent* si vous retirez l'autorisation
d'affichage d'une table accordée à un utilisateur* il est
possible que celui-ci puisse encore l'afficher parce
que l'autorisation avait été accordée à un rôle auquel
il appartient

133
 -
Î $         È  1
RE§OKE { ALL | 2 È 2[ ...2] }
FROM È  [ ...2]
Î $         1
RE§OKE
{ ALL [ PRI§ILEGES ] |   2[ ...2] }
{
[ ,È  22[ ...2] .] ON { 
| ON {  | } [ ,È  22[ ...2] .]
}
FROM compte [ ...2]
[ CASCADE ]
Î   :
RE§OKE CREATE TABLE FROM ali
RE§OKE SELECT ON stagiaire FROM meryem

134
†=

Î Changer la sécurité du serveur et passer à la sécurité mixte
Î Créer les comptes et les rôles suivants :
Î Aziz et Driss : directeurs
Î Rachida* said et mourad : surveillance générale
Î Mounia* fatima* khalid : formateurs
Î Accorder au rôle directeur tous les droits sur la base de
données efp
Î Accorder au rôle surveillant le droit de lecture des tables groupe
et stagiaire
Î Accorder au rôle formateur le droit de lecture sur toutes les
tables et le droit d¶écriture sur la table resultat
Î Retirer à l¶utilisateur mourad le droit de lecture de la colonne
adresse de la stagiaire
Î Autoriser said à modifier l¶adresse
135