Vous êtes sur la page 1sur 68

Bases de données

EPI 2022/2023
Objectifs Du C ours

⦁ Ce cours permettra aux étudiants de concevoir et d’implanter une base de don


nées en passant par les différents niveaux :
o conceptuel,
o logique
o et physique.

⦁ Il aura l’occasion de bien assimiler l’apport des SGBD pour gérer les données

2
Plan du cours

❑ Chapitre 1 : Introduction et Principaux Concepts Des Bd

❑ Chapitre 2 : Un Modèle Conceptuel : Le Modèle EA

❑ Chapitre 3 : Le Modèle Relationnel Des BD

❑ Chapitre 4 : Le langage SQL

3
Chapitre 4 : Le Langage SQL

4
Le Langage S Q L
I. Introduction
II. Langage de définition de données LDD
III. Langage de manipulation de données LMD
IV.Langage d’Interrogation de données LID
V.Langage de contrôle de données LCD

5
Le langage S Q L
⦁ SQL signifie «Structured Query Language »ou Langage d ’interrogation structuré.
⦁ SQL est un langage complet de gestion de bases de données relationnelles. Il a été conçu par IBM
dans les années 70 et est devenu le langage standard des SGBDR.

➢ C ’est à la fois : un langage d ’interrogation de la base


▪ un langage de manipulation des données
▪ un langage de définition des données
▪ un langage de contrôle de l ’accès aux données.

⦁ SQL est utilisé par les principaux SGBDR : DB2, Oracle, SQLServer, ACCESS.

⦁ Chaque SGBD a cependant sa propre variante du langage.

6
Architecture du S G B D R

7
Langage de Définition des Données

I. Langage de Définition des Données

II. Les types de données

III. Les contraintes

8
Langage de Définition des Données
⦁ Le Langage de Définition des Données est la partie de SQL qui permet de décrire les
tables et autres objets manipulés par les SGBD.

I. La commande CREATE
II. La commande ALTER TABLE

III. La commande DROP TABLE

9
La commande C R E A T E TABLE
L ’ordre
CREATE TABLE permet de créer une table en définissant le nom, le type de
chacune des colonnes de la table.

CREATE TABLE table (colonne1 type1, colonne2 type2, …, colonnen typen);

Table est le nom que l ’on donne à la table. Colonnei est le nom d ’une colonne.
Typei est le type des données contenues dans Colonnei

Exemple : CREATE TABLE STAGE (


Num-Stage NUMBER(3) NOT NULL PRIMARY KEY,
Libellé-Stage VARCHAR2(15) NOT NULL,
Nb-jours NUMBER(2),
Type-Stage VARCHAR2(15),
Num-Cat NUMBER);

Les 1le0ttres minuscules et majuscules sont équivalentes


La commande C R E A T E TABLE

CREATE TABLE table (colonne1 type1, colonne2 type2, …, colonnen typen)


AS SELECT ...;

Exemple :
CREATE TABLE MINI_STAGE(
Numéro NUMBER(3) PRIMARY KEY,
Nom VARCHAR2(15) NOT NULL)
AS SELECT Num-Stage, Libellé-Stage FROM STAGE;

Il faut évidemment que les définitions des colonnes de la table créée et du résultat de
la sélection soient compatibles en type et en taille.

11
La commande C R E A T E TABLE
❑ On peut également spécifier le mot-clé AS et l ’interrogation directement derrière le
nom de la table.

❑ Dans ce cas, les noms de colonnes de la table créée auront les mêmes noms, types et
tailles que celles de l ’interrogation :

❑ Exemple :

CREATE TABLE MINI_STAGE


AS SELECT Num-Stage, Libellé-Stage FROM STAGE

12
La commande ALTER TABLE
Cette commande permet de modifier la définition d ’une table.
ALTER TABLE table
ADD
MODIFY (colonne1 type1, colonne2 type2, …, colonnentypen)
DROP

ALTER TABLE STAGIAIRE


ADD NomEntr VARCHAR2(20); Ajout d ’un attribut

ALTER TABLE STAGIAIRE


MODIFY NomEntr VARCHAR2(30); Modification dans le type d ’un attribut

ALTER TABLE STAGIAIRE


DROP NomEntr; Suppression d ’un attribut

13
La commande D R O P TABLE
❑ Cette commande permet de supprimer une table de la base de données.

❑ Les lignes de la table et la définition elle-même sont détruites.

❑ L ’espace occupé par la table est libéré.

DROP TABLE table

Exemple :

DROP TABLE STAGIAIRE;

14
Les types de données
⦁ Les principaux types de données sont les suivants:

I. Types numériques

II. Types chaînes de caractères

III. Types temporels

15
Les types de données
Type de données Syntaxe Description
Alphanumérique CHAR(n) Chaîne de caractères de longueur fixe n (n<16383)

VARCHAR(n) Chaîne de caractères de n caractères maximum


(n<16383)
Numérique NUMBER(n [,d]) Nombre de n chiffres [optionnellement d après la
virgule]
SMALLINT Entier signé de 16 bits (-32768 à 32767)
INT Entier signé de 32 bits (-2E31 à 2E31-1)
FLOAT Nombre à virgule flottante
Temporel DATE Date sous la forme 16/07/99
TIME Heure sous la forme 12:54:24
TIMESTAMP Date et Heure
16
Les contraintes

I. Les contraintes de domaine

II. Les contraintes d ’intégrité d ’entité

III. Les contraintes d ’intégrité référentielle

IV. Les contraintes particulières

17
Les contraintes de domaine
❑ Il s ’agit de définir l ’ensemble des valeurs que peut prendre un attribut.
❑ Ces contraintes sont décrites dans la définition d ’un attribut, directement après son type et sa
longueur.
✓ NOT NULL : on impose que l ’attribut possède une valeur
✓ DEFAULT : on spécifie une valeur par défaut dont le type doit correspondre au type
de l ’attribut
✓ UNIQUE : interdit qu'une colonne contienne deux valeurs identiques
❑ Exemple :
CREATE TABLE clients
(numCli …
nomCli VARCHAR(25) N OT N ULL,
CaCli INTEGER DEFAULT 0,
TypeCli VARCHAR(16) DEFAULT 'Particulier ’
…);
18
Les contraintes de domaine
❑ CHECK(condition)
Exemples : CREATE TABLE clients
(…,
TypeCli VARCHAR(16) DEFAULT 'Particulier'
CHECK (TypeCli IN ('Particulier', 'Administration', 'PME'))
CONSTRAINT Type_Clients, …

Prim_Comp VARCHAR(8) NOT NULL CHECK (Prim_Comp != Fini_Comp)


CONSTRAINT PRIMFINI, …

Liv_LigneCde NUMBER DEFAULT 0 CHECK (Liv_LigneCde <=


Qté_LigneCde) CONSTRAINT LIVQTE, …

19
Les contraintes d’intégrité d’entité
⦁ Elles spécifient la clé primaire d ’une table via la clause PRIMARY KEY.

⦁ Une clé primaire doit toujours avoir une valeur déterminée et unique pour la table.

⦁ Quand une clé primaire est constituée de plusieurs attributs (clé segmentée), la clause
PRIMARY KEY est placée après la définition des attributs, séparée par une virgule.

⦁ Exemples : - NumCli NUMBER PRIMARY KEY

- Create TABLE Appartement


(…),
PRIMARY KEY (NumApp, NumImm);
20
Remarques
⦁ Tous les attributs d ’une clé segmentée doivent être spécifiés NOT NULL

⦁ PRIMARY KEY peut aussi être séparée de la définition des attributs même
s ’il n ’y a qu’ un seul attribut

⦁ Pour une table, il n ’existe qu’ une seule clé primaire

21
Les contraintes d ’intégrité référentielle
REFERENCES nom_table_référencée (clé candidate)

Le nom de la clé candidate est facultatif quand c ’est la clé primaire.

Exemples :
CREATE TABLE Commandes
(NumCde NUMBER PRIMARY KEY,
DateCde DATE NOT NULL,
NumCli NUMBER NOT NULL REFERENCES clients,
MagCde NUMBER NOT NULL REFERENCES magasin);

22
Le Langage S Q L
I. Introduction
II. Langage de définition de données LDD
III. Langage de manipulation de données LMD
⦁ III.1 La commande INSERT
⦁ III. 2La commande UPDATE
⦁ III.3 La commande DELETE
IV.Langage d’interrogation de données LID
V.Langage de contrôle de données LCD

23
La com m a nde IN S E R T
❑ INSERT: Ajout de lignes dans une table

INSERT INTO table (col1, …, coln)


VALUES (val1, …, valn);
OU
INSERT INTO table (col1, …, coln)
SELECT …;

❑La liste des noms de colonnes est optionnelle. Si elle est omise, Oracle prend par
défaut l ’ensemble des colonnes de la table dans l ’ordre où elles ont été données lors de
la création de la table.

❑Si une liste de colonnes est spécifiée, les colonnes ne figurant pas dans la liste auront la
valeur NULL.
24
La commande INSERT: Exemple

INSERT INTO STAGIAIRE (Num-St, Nom-St, Prénom-St, Adr-St)

VALUES (567, ′Tounsi, ′Med ′, ′Tunis′);

INSERT INTO STAGIAIRE VALUES (567, ′Tounsi, ′Med ′, ′Tunis′);

INSERT INTO TUNIS_STAGIAIRE SELECT Num-ST, Nom-ST, Prénom-St4


FROM STAGIAIRE WHERE Adr-St = ′Tunis′

25
La commande UPDATE
Cette commande permet de modifier les valeurs d ’un ou de plusieurs champs, dans une
ou plusieurs lignes existantes d ’une table.

UPDATE table
SET col1 = exp1, col2 = exp2, …
WHERE prédicat

col1, col2, … sont les noms de colonnes qui seront modifiés.

26
La com m a nde UPDATE: Exemple
La clause WHERE est facultative

UPDATE STAGE
SET Nb-jours = 4
WHERE Type-Stage = ′TP′;

27
La commande D E L E T E
❑ L ’ordre DELETE permet de supprimer des lignes d ’une table

DELETE FROM table


WHERE prédicat

✓ La clause WHERE indique quelles lignes doivent être supprimées.


✓ Cette clause est facultative. Si elle n ’est pas précisée, TOUTES les lignes de la table
sont supprimées.

28
Le Langage S Q L
I. Introduction
II. Langage de définition de données LDD
III. Langage de manipulation de données LMD
IV.Langage d’Interrogation de données LID
V.Langage de contrôle de données LCD

29
Interrogation : l’ordre S E L E C T
⦁ La syntaxe complète d’un ordre SELECT

SELECT col, col, ..


FROM nom_table
[WHERE condition [ OR | AND condition]]
[GROUP BY col, col, ..]
[HAVING condition [ OR | AND condition]]
[ORDER BY col, col, …]

30
L’ordre S E L E C T
⦁ L’ordre SELECT permet l’interrogation d’une base de données afin d’afficher
des données.
⦁ La clause SELECT contient la liste de colonnes qui vont être affichées comme
résultat.
⦁ La clause FROM spécifie la ou les tables dans laquelle , la recherche va être
effectuée.
⦁ La clause WHERE spécifie une condition de sélection de quelques
enregistrements de l’ensemble de données de la table.

31
L’ordre S E L E C T : E X E M P LE
⦁ Exemple :
Afficher le nom et le salaire de tous les employés :
⦁ Réponse :
Select last_name, salary
From emp ;
⦁ Exemple :
Afficher les jobs des employés de département 20
⦁ Réponse :
Select job_id
From emp
Where department_id=20

32
L’interrogation avec prédicats(conditions):
🞂

⦁ Limiter les lignes retournées en utilisant la clause WHERE

SELECT*|[DISTINCT]colonne| expression[alias],…
FROM table;
[WHERE condition(s)];

⦁ WHERE : indique qu’une ligne doit valider une condition avant d’être retournée.

⦁ condition: peut être composé de nom de colonne, expression, des valeurs constantes et des
opérateurs de comparaison.

⦁ condition: est composée de colonnes, d’expressions, de constantes liées deux à deux entre des
opérateurs:
✓ de comparaison(>,=,<,>=,<=,<>);
✓ logiques(NOT, AND ou OR);
✓ intégrés(BETWEEN, IN, LIKE, ISNULL).
33
Between: exemple
⦁ Between: extraire des lignes en se basant sur un intervalle de valeurs.
⦁ Exemple: Afficher les clients qui ont un crédit entre 50 et 250'.
🞂

SELECT *
FROM Client
WHERE creditC >=50 AND creditC<=200;
⦁ Ou bien:
🞂

SELECT *
FROM Client
WHERE creditC BETWEEN 50 AND 200;

34
In: Exemple
⦁ In: extraire des lignes en se basant sur une liste de valeurs.
⦁ Exemple: Afficherlesproduitsdontlaquantitéenstockestégaleà20,40oubien50.

SELECT *
FROM Produit
WHERE QteS=20 OR QteS=40 OR QteS=50;
⦁ Ou bien:
SELECT *
FROM Produit
WHERE QteS IN (20,40,50);

35
LIKE: exemple
LIKE: rechercher les valeurs qui vérifie une condition textuelle.
La condition de recherche peut contenir des caractères ou des entiers:

✓ % indique zéro ou plusieurs caractères

✓ _ indique un seul caractère

Exemple :Afficher les clients dont la deuxième lettre des noms est 'a'.

SELECT *

FROM Client

WHERE nomC LIKE ('_a%');

36
IS[NOT]NULL:
⦁ IS[NOT]NULL: rechercher les valeurs dont certains champs contiennent des
valeurs nulles.

⦁ Exemple: Afficher les clients qui n'ont pas une adresse.

SELECT *

FROM Client

WHERE AdresseC IS NULL;

37
Opérateurs des prédicats pour la clause where

38
Tri des données :Order by
⦁ Le Tri : Trier les lignes retournées avec ORDER BY
⦁ Syntaxe:
🞂 SELECT expr FROM table
[WHERE condition(s)]
[ORDERBY{column,expr}[ASC|DESC]];
🞂

⦁ On peut spécifier une expression, un alias, un nom ou une position de colonne


dans la clause ORDER BY
⦁ Par défaut l’ordre de tri est ascendant.
⦁ Pour renverser l’ordre de tri spécifier le mot clé DESC après le nom de
colonne dans la clause ORDERBY

39
Tri des données :Order by
⦁ Exemple: Rechercher la liste des produits en triant le résultat avec le plus cher:

Select *
from Produit
Order by PU DESC;

⦁ Exemple: Rechercher le prix total des produits en triant le résultat par le montant le plus
faible
Select codP, Lib, PU*QteS AS "total"
from Produit
Order by total;

40
Les jointures
Les jointures en SQL permettent d’associer plusieurs tables dans une même requête. Cela permet
d’exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combinent les
données de plusieurs tables de manière efficace

En général, les jointures consistent à associer des lignes de 2 tables en associant l’égalité des valeurs
d’une colonne d’une première table par rapport à la valeur d’une colonne d’une seconde table.
Les jointures
Les jointures: Exemple
⦁ emp (num, nom, fonction, n_sup, embauche, salaire, comm, #n_dept)
⦁ dept(n_dept, nom,lieu)
Exemple : Afficher le nom de l’employé et le nom de son département.

Emp
num Nom …. N_dept
Dept
N_dept Nom ….

Dans cet exemple, le nom de l’employé se trouve dans la table « emp », tandis que le nom de
département se trouve dans « dept ». c’est la colonne n_dept qui existe dans les deux tables
qui va assurée leur liaison.
43
Les jointures
Il y a plusieurs méthodes pour associer 2 tables ensemble. Voici la liste des différentes techniques
qui sont utilisées :
Les jointures
➢INNER JOIN : jointure interne pour retourner les enregistrements quand la condition est
vraie dans les 2 tables.
Les jointures
LEFT JOIN (ou LEFT OUTER JOIN) : jointure externe pour retourner tous les enregistrements de la
table de gauche (LEFT = gauche) même si la condition n’est pas vérifiée dans l’autre table.
Les jointures
Les jointures
RIGHT JOIN (ou RIGHT OUTER JOIN) : jointure externe pour retourner tous les enregistrements
de la table de droite (RIGHT = droite) même si la condition n’est pas vérifiée dans l’autre table.
Les jointures
Les jointures
FULL JOIN (ou FULL OUTER JOIN) : jointure externe pour retourner les résultats quand la
condition est vraie dans au moins une des 2 tables.
Les jointures
Les jointures
➢ SELF JOIN : permet d’effectuer une jointure d’une table avec elle-même comme si c’était une
autre table.

➢ NATURAL JOIN : jointure naturelle entre 2 tables s’il y a au moins une colonne qui porte le
même nom entre les 2 tables SQL
Les jointures
CROSS JOIN : jointure croisée permettant de faire le produit cartésien de 2 tables. En d’autres mots,
permet de joindre chaque ligne d’une table avec chaque ligne d’une seconde table. Attention, le nombre
de résultats est en général très élevé.
Auto-jointure :
⦁ L’auto-jointure est une liaison d’une table à elle-même.

⦁ C'est-à-dire, utiliser la même table deux fois, la première pour cherche une valeur X à
partir de données, et la deuxième est de trouver le résultat final à partir de X.

⦁ Exercice : afficher le nom du directeur de l’employé numéro 7800.

❖emp (num, nom, fonction, n_sup, embauche, salaire, comm,


#n_dept )
❖ Dept (n_dept, nom,lieu)
❖ Salgrade (grade, salmin, salmax)

54
Auto-jointure: Exemple
⦁ Exercice : afficher le nom du directeur de l’employé numéro 7800
⦁ Réponse :
⦁ select emp.nom
⦁ from emp e, emp p
⦁ where e.num = 7800 and e.n_sup = p.num ;

Emp e
num Nom N_sup …. N_dept
7800 Tounsi_Med 6200

Emp p
num Nom N_sup … N_dept
6200 Sellami Ali

55
Auto-jointure: Exemple
⦁ Le serveur Oracle exécute cet ordre en trois étapes :
1. Parcourir la colonne «num »de la table « emp » en cherchant la valeur 7800.
2. - Lire la valeur « num_sup » de cet employé :6200
3. - Chercher 6200 dans la colonne « num » et lire le nom de directeur dans la colonne «
nom »

Emp e
num Nom N_sup …. N_dept
7800 Tounsi_Med 6200

Emp p
num Nom N_sup … N_dept
6200 Sellami Ali
56
Les fonctions disponibles
Les différentes fonctions disponibles sous Oracle:

❖ Fonctions arithmétiques

❖ Fonctions chaînes de caractères

❖ Fonctions Date

❖ Fonctions de conversion

❖ Fonctions diverses

❖ Fonctions de groupe

57
Les fonctions de groupe:
🞂

⦁ Les fonctions de groupe sont utilisées pour afficher des informations sur un
ensemble d'enregistrement.

⦁ Les fonctions de groupe: AVG, COUNT, MAX, MIN, SUM

SELECT fonctionGroupe (colonne),...


FROM table
[WHERE condition]

58
Les fonctions de groupe
⦁ Le tableau suivant présente les principales fonctions.
⦁ L’option DISTINCT évite les duplicatas alors que ALL les prend en compte (par
défaut).
⦁ À l’exception de COUNT, toutes les fonctions ignorent les valeurs NULL (il faudra
utiliser NVL pour contrer cet effet).

59
Les fonctions de groupe
⦁ Les fonctions de groupe agissent sur des groupes de lignes et donne un résultat par
groupe:

Num_emp Nom_emp ….. salaire

Tounsi Med …. 1800

Bejaoui Nawres …. 1200

Mansour Nahla …. 1900

Hellal Mehdi … 1850

Le plus grand salaire ???


MAX(salaire)

60
A V G , S U M , M A X ,MIN :
⦁ AVG et SUM sont utilisées avec les données numériques.
Exemple : select AVG(sal), SUM (sal), MIN(sal), MAX (sal)
from employés ;
⦁ MIN et MAX s’utilisent avec tout type de données.

Exemple : SQL>Select MIN (hiredate), MAX(hiredate)


From emp ;
⦁ MIN(date_embauche) MAX(date_embauche)
21-JAN-1981 26-MAR-2017

Exemple : SQL>Select MIN (nom_employé), MAX (nom_employé)


From employé ;
MIN (nom_employé) MAX (nom_employé)
Abbassi Zouari

61
U tilisation de la fonction C O UNT :
COUNT(*) ramène le nombre de ligne d’une table.

Exercice : afficher le nombre d’employé de département 30

Réponse : SQl> Select count(*)


From employés
Where id_depart = 30 ;

62
U tilisation de la fonction C O UNT :

Exercice : nombre de départements possédant des employés.


Réponse: SQl> Select count( distinct ( id_depart ))
From employés ;

63
U tilisation de la fonction C O UNT :

Exercice : afficher le nombre d’employé de département 10, qui ont une commision :

Réponse :
SQl> Select count(comm)
From emp
Where deptno = 10 ;

64
Utilisation de la fonction NVL :
⦁ la fonction NVL force la prise en compte des valeurs NULL dans les fonctions de
groupe en remplaçant la valeur NULL par une autre valeur.
⦁ Exemple :
SQL> Select AVG( NVL ( comm , 0 ))

From emp ;

65
La clause Group by
⦁ Elle réarrange la table résultat en un nombre minimum de groupes, tels que, à
l’intérieur de chaque groupe, l’attribut spécifié possède la même valeur pour chaque
tuple.

⦁ Cette clause n ’affecte pas l ’organisation physique de la table.

⦁ Lorsqu’on spécifie une clause GROUP BY, les fonctions de groupe sont calculées
pour chaque groupe.

66
La clause Group by
⦁ Cette clause permet l ’affichage de l ’attribut commun aux tuples d ’un groupe, suivi
de l ’affichage de la valeur des fonctions appliquées au groupe.

⦁ On peut ajouter une clause WHERE qui sélectionne les tuples

⦁ SELECT Nom-Cat, AVG(Nb-jours)


⦁ FROM STAGE
⦁ GROUP BY Nom-Cat;
⦁ SQL fait des groupes d ’après la valeur de Nom-Cat, puis, pour chaque valeur de
Nom-Cat, calcule la moyenne de l ’attribut Nb-jours.

⦁ Il affiche les valeurs de Nom-Cat correspondant à chaque groupe et la moyenne


associée.

67
Restriction de groupes, HAVING
⦁ On ne peut pas utiliser la clause WHERE pour limiter les groupes. La clause
HAVING permet ceci.

⦁ Exemple : afficher le salaire moyen de chaque département ,qui dépasse 1300.


⦁ Réponse :
Select deptno, AVG (sal)
From emp
Group by deptno
HAVING AVG(sal) > 1300 ;

68

Vous aimerez peut-être aussi