Introduction Les serveurs de données relationnels présententaujourd’hui une interface externe sous forme d’unlangage de recherche et mise à jour, permettant despécifier les ensembles de données à sélectionner ouà mettre à jour à partir de propriétés des valeurs, sansdire comment retrouver les données.
Plusieurs langages assertionnels permettant demanipuler 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] etconstitue le standard d’accès aux bases de donnéesrelationnelles
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
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 (encoreappelés qualifications)
SQL: construits à partir de la logique desprédicats du premier ordre. Ils comportent:
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.
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.
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>+)
CRÉATION DE TABLESUn é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>
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>]
Type de données
EXEMPLECREATE 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’)
LDDEXPRESSION DES CONTRAINTES D’INTÉGRITÉ
1)Les contraintes de colonnes permettent despécifier différentes contraintes d’intégrité
– valeur nulle impossible (syntaxe NOT NULL),
– unicité de l’attribut (syntaxe UNIQUE ouPRIMARY 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 devaleurs possibles
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).
LDDEXPRESSION DES CONTRAINTES D’INTÉGRITÉ
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))
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)
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);
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.
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 regionVARCHAR(30) NOT NULL;
ALTER TABLE Internaute ALTER region SET DEFAULT ’BLIDA’;
ALTER TABLE Internaute DROP region; //détruire
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
anciennes valeurs.
SELECTION SELECT [DISTINCT] *FROM table_1 [synonyme_1],
table_2 [synonyme_1], …[WHERE prédicat_1AND [ou OR] prédicat_2 …
INSERTION
MODIFICATION
SUPPRESSION
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"
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;
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';
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#;
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>
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';
Les opérateurs logiques Il existe 3 opérateurs logiques:
1. NOT (Négation logique)
2. AND (Et logique)
3. OR (Ou logique)
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';