2. Introduction
Les serveurs de données relationnels présentent
aujourd’hui une interface externe sous forme d’un
langage de recherche et mise à jour, permettant de
spécifier les ensembles de données à sélectionner ou
à mettre à jour à partir de propriétés des valeurs, sans
dire comment retrouver les données.
Plusieurs langages assertionnels permettant de
manipuler des bases de données relationnelles ont
été proposés, en particulier QUEL [Zook77], QBE
[Zloof77] et SQL [IBM82, IBM87].
le langage SQL est normalisé [ISO89, ISO92] et
constitue le standard d’accès aux bases de données
relationnelles
3. Introduction
SQL = Structured Query Language
Langage de requêtes standard pour
l’interrogation de bases de données
relationnelles (SQL-1 en 1989, puis SQL-2 en
1992, et enfin SQL-3 )
Développé à l’origine pour le protype de SGBD
recherche d’IBM SYSTEM/R, qui a débouché sur
les produits commerciaux SQL/DS et DB-2
Mélange d’algèbre relationnelle et de calcul
relationnel à variables n-uplets
4. Introduction
De manière générale, SQL comme les autres
langages qui ont été proposés (e.g., QUEL)
utilisent tous des critères de recherche (encore
appelés qualifications)
SQL: construits à partir de la logique des
prédicats du premier ordre. Ils comportent:
5. LDD: Langage de Définition de Données: définir le
schéma de la base de données
La définition d’un schéma logique comprend
essentiellement deux parties :
1) d’une part la description des tables et de leur contenu,
2) d’autre part les contraintes qui portent sur les
données de la base. La spécification des contraintes est
souvent placée au second plan bien qu’elle soit en fait
très importante : elle permet d’assurer, au niveau de la
base des contrôles sur l’intégrité des données qui
s’imposent à toutes les applications accédant à cette
base.
3) Un dernier aspect de la définition d’un schéma, est la
description de la représentation physique.
6. LMD :Langage de Manipulation de Données:
interroger et modifier les données de la base
•Langage de contrôle d’accès aux données.
7. CRÉATION DE TABLE
CREATION SCHEMA
CREATE SCHEMA AUTHORIZATION nom-schema
create table nom_relation (nom_attribut_1
type_attribut_1, …)
CREATE TABLE <nom de table> (<élément de
table>+)
8. CRÉATION DE TABLES
Un élément de table est soit une définition de
colonne, soit une définition de contrainte,
comme suit :
<ÉLÉMENT DE TABLE> ::= <DÉFINITION DE
COLONNE> | <CONTRAINTE DE TABLE>
9. Une colonne est définie par un nom et un type
de données. Une valeur par défaut peut
être précisée. Une contrainte de colonne peut
aussi être définie à ce niveau. On obtient
donc la syntaxe suivante :
<DÉFINITION DE COLONNE> : := <NOM DE
COLONNE> <TYPE DE DONNÉES>
[<CLAUSE DÉFAUT>] [<CONTRAINTE DE
COLONNE>]
11. EXEMPLE
CREATE TABLE Internaute
(email VARCHAR (50) NOT NULL,
nom VARCHAR (20) NOT NULL,
prenom VARCHAR (20),
motDePasse VARCHAR (60) NOT NULL,
AnneeNaiss DECIMAL (4))
CREATE TABLE Cinéma (nom VARCHAR (50) NOT
NULL, adresse VARCHAR (50) DEFAULT ’Inconnue’)
12. LDD
EXPRESSION DES CONTRAINTES D’INTÉGRITÉ
1)Les contraintes de colonnes permettent de
spécifier différentes contraintes d’intégrité
– valeur nulle impossible (syntaxe NOT NULL),
– unicité de l’attribut (syntaxe UNIQUE ou
PRIMARY KEY),
– contrainte référentielle – syntaxe REFERENCES
<table référencée> [(<colonne référencée>)]
– contrainte générale (syntaxe CHECK
<condition>)spécifier des plages ou des listes de
valeurs possibles
13. 1.Un attribut doit toujours avoir une valeur. C’est la
contrainte NOT NULL vue précédemment.
2. Un attribut (ou un ensemble d’attributs)
constitue(nt) la clé de la relation.
3. Un attribut dans une table est liée à la clé primaire
d’une autre table (intégrité référentielle).
4. La valeur d’un attribut doit être unique au sein de la
relation.
5. Enfin toute règle s’appliquant à la valeur d’un
attribut (min et max par exemple).
LDD
EXPRESSION DES CONTRAINTES D’INTÉGRITÉ
14. Clé de la table (1)
CREATE TABLE Internaute (email VARCHAR (50)
NOT NULL, nom VARCHAR (20) NOT NULL,
prenom VARCHAR (20),
motDePasse VARCHAR (60) NOT NULL,
anneeNaiss INTEGER,
PRIMARY KEY (email))
15. 1 CREATE TABLE Notation (idFilm INTEGER NOT
NULL, email VARCHAR (50) NOT NULL,
note INTEGER DEFAULT 0,
PRIMARY KEY (titre, email))
2 CREATE TABLE Artiste(id INTEGER NOT NULL,
nom VARCHAR (30) NOT NULL,
prenom VARCHAR (30) NOT NULL,
anneeNaiss INTEGER,
PRIMARY KEY (id),
UNIQUE (nom, prenom));
Clé de la table (2)
16. Clés étrangères
CREATE TABLE Film (idFilm INTEGER NOT NULL,
titre VARCHAR (50) NOT NULL,
annee INTEGER NOT NULL,
idMES INTEGER,
codePays INTEGER,
PRIMARY KEY (idFilm),
FOREIGN KEY (idMES) REFERENCES Artiste,
FOREIGN KEY (codePays) REFERENCES Pays);
17. MODIFICATION d’une table
ALTER TABLE nomTable ACTION description
ACTION peut être principalement ADD, MODIFY,
DROP ou RENAME, et description est la commande
de modification associée à ACTION.
18. Modification des attributs
On peut ajouter un attribut region à la table Internaute
avec la commande :
ALTER TABLE Internaute ADD region VARCHAR(10);
On peut modifier La taille de region
ALTER TABLE Internaute MODIFY region
VARCHAR(30) NOT NULL;
ALTER TABLE Internaute ALTER region SET
DEFAULT ’BLIDA’;
ALTER TABLE Internaute DROP region; //détruire
19. LMD
la recherche (mot clé SELECT ) permet de retrouver
des tuples ou parties de tuples vérifiant la qualification
citée en arguments ;
– l’insertion (mot clé INSERT ) permet d’ajouter des
tuples dans une relation ; les tuples peuvent être fournis
par l’utilisateur ou construits à partir de données existant
déjà dans la base ;
– la suppression (mot clé DELETE ) permet de
supprimer d’une relation les tuples vérifiant la
qualification citée en argument ;
– la modification (mot clé UPDATE )permet de
mettre à jour les tuples vérifiant la qualification citée en
argument à l’aide de nouvelles valeurs d’attributs ou de
résultats d’opérations arithmétiques appliquées aux
24. Les critères de sélection
Comparaison à une valeur donnée.
Pour chaque enregistrement, la valeur d'un champ donné
est comparée à une valeur fixe. Cette valeur fixe est
généralement une valeur numérique, une date ou un texte.
Voici les opérateurs de comparaison:
= "est égal"
> "strictement supérieur"
< "strictement inférieur"
>= "supérieur ou égal"
<= "inférieur ou égal"
<> "est différent"
25. 1. Afficher le prénom et le nom de tous les employés du
service "Marketing"
SELECT fldPrénom, fldNom
FROM tblEmployés
WHERE fldService='Marketing';
2. Afficher le prénom, le nom et l'âge de tous les
employés plus jeunes que 50 ans
SELECT fldPrénom, fldNom, fldAge
FROM tblEmployés
WHERE fldAge<50;
26. 3 Augmentez de la valeur 1 à l'âge de AICHA.
UPDATE tblEmployés
SET fldAge=fldAge+1
WHERE fldNom=‘AICHA';
4. Effacez tous les employés du service Informatique.
DELETE FROM tblEmployés
WHERE fldService='Informatique';
27. 5. Afficher le nom, le prénom et l'âge de tous les
employés entrés en service à partir du
1.1.2014
SELECT fldNom, fldPrénom, fldAge
FROM tblEmployés
WHERE fldEntréeService>=#1/1/14#;
28. Comparaison à un filtre
• % représente n'importe quelle séquence de 0 ou
plusieurs caractères;
• _ représente un seul caractère quelconque.
Exemple: Pour rechercher des personnes dont le nom est
‘ABDrahime' ou ‘ABDrahmene' ou
'SCHMIT' etc. on définit par exemple le filtre suivant :
‘ABD%'
Exemple: Le filtre 'BL__' sélectionne par exemple les
valeurs 'BLEU' ou 'BLUE' mais pas 'BLANC'
Les filtres sont utilisés ensemble avec le mot réservé LIKE.
Voici la syntaxe:
. . .
WHERE <Nom du champ> LIKE <Filtre>
29. Afficher le nom et le prénom des employés dont le
prénom contient un trait d'union
(p.ex. MED-LAMINE)
SELECT fldNom, fldPrénom
FROM tblEmployés
WHERE fldPrénom LIKE '%-%';
2. Afficher le nom, le prénom et l'âge des employés
dont le nom commence par 'W', est
composé de 5 lettres et se termine par 'R'
SELECT fldNom, fldPrénom, fldAge
FROM tblEmployés
WHERE fldNom LIKE 'W___R';
30. Les opérateurs logiques
Il existe 3 opérateurs logiques:
1. NOT (Négation logique)
2. AND (Et logique)
3. OR (Ou logique)
31. Afficher le prénom et le nom de tous les employés qui ne
travaillent pas dans le service
"Marketing"
SELECT fldPrénom, fldNom
FROM tblEmployés
WHERE NOT fldService='Marketing';
Formulez une requête qui affiche exactement le même
résultat, sans utiliser
l'opérateur NOT.
SELECT fldPrénom, fldNom
FROM tblEmployés
WHERE fldService<>'Marketing';