Cours BD - SQL - Important - Copie
Cours BD - SQL - Important - Copie
Cours de bases de
données
Introduction
Auparavant, les données sont stockées sous forme de fichiers et ils sont gérées par un système
de gestion de fichiers, il y avait deux types de fichiers :
1. Fichier des données : représentent des séquences d’enregistrements dont l’accès est
séquentiel ou indexé.
2. Fichier de traitement : représentent un ensemble d’instructions servant à manipuler les
données des fichiers (assembleur, Cobol).
Mais cette approche a souffert des problèmes suivants :
3. Redondance d’information (Mise A Jours (MAJ) difficiles).
4. Problème d’incohérence, de fiabilité et de sécurité.
5. Manque de structuration des données.
6. Si un changement est effectué sur la structure d’un fichier de données tous les
programmes qui l’utilisent doivent être modifiés et on va perdre du temps pour la
maintenance.
Solution : regrouper les fichiers de données en une seule entité= BD, dont les données et les
traitements sont indépendants.
Définir la structure d’une BD (de décrire les données et les liens entre elles d’une
façon logique sans se soucier du comment cela va se faire physiquement dans les
fichiers) par un Langage de Description de Données (LDD).
Rechercher des données dans une BD (Langage de Manipulation des Données :
LMD).
Insérer, modifier, supprimer des données dans une BD (LMD).
Assurer la cohérence et la confidentialité des données (LMD) et la non-redondance
des données.
Assurer la sécurité.
Assurer la cohérence : les données sont soumises à certains nombre de contraintes
d’intégrité qui définissent un état cohérent de la base. Ces contraintes sont décrites
dans le langage de description de données (LDD). Ex : l’âge des employés ne peut pas
être supérieur à 55. Si un utilisateur ajoute une entité employé, le SGBD doit vérifier
l’attribut âge, s’il ne respecte pas cette contrainte, il est rejeté. Une contrainte
d’intégrité est une propriété que les objets décrits par le schéma (entité, association,
attribut) doivent respecter de manière à représenter le problème.
Assurer la confidentialité : les données doivent pouvoir être protégées contre les accès
non-autorisés. Pour cela, il faut associer à chaque utilisateur des droits d’accès aux
données.
Assurer la sécurité après panne : on peut tomber dans des situations où certains
fichiers ne sont plus lisibles ou une panne au milieu d’une MAJ. Le SGBD doit
assurer la reprise après panne. Il existe plusieurs méthodes : récupérer les données
avant la modification, terminer l’opération interrompue, ou utiliser la journalisation
qui consiste à mémoriser les états successifs de la BD.
Permettre le partage des données : permettre à plusieurs utilisateurs d’accéder aux
mêmes données au même moment de manière transparente, en contrôlant les accès
concurrents. Ou on parle des transactions. Une transaction est une opération unitaire
qui transforme le contenu de la BD d’un état A vers un état B.
Assurer une efficacité d’accès : en terme du temps de réponse et de débit global ainsi
que des modes d’accès simples (hachage, arbre blanchi). Le temps de réponse est le
temps d’attente moyen pour une requête. Le débit global représente le nombre de
transactions exécutées par second.
La plupart des SGBDs fonctionnent selon un mode client/serveur, le serveur (la machine
stockant les données) reçoit des requêtes de plusieurs clients et ceci de manière concurrente.
Le serveur analyse la requête, le traite et retourne le résultat au client.
Remarques
Un blog est un type de site web (ou une partie d'un site web) utilisé pour
la publication périodique et régulière de nouveaux articles, généralement succincts, et
rendant compte d'une actualité autour d'un sujet donné ou d'une profession.
Un wiki est un site web dont les pages sont modifiables par les visiteurs afin de
permettre l'écriture et l'illustration collaboratives des documents numériques qu'il
contient. Il utilise un langage de balisage et son contenu est modifiable au moyen
d’un navigateur web.
Remarques
1. Donnée exhaustive : la base contient toutes les informations requises pour le service
que l’on en attend, il n’ya pas de données manquantes.
2. Donnée persistent : elle doit survivre à la fin d’une application particulière sur la BD
pour qu’elle puisse être réutilisée plus tard.
3. Interopérabilité : BD accessibles par différents systèmes.
4. Hétérogénéité : BD fondée sur des modèles distincts.
5. Le catalogue système ou dictionnaire de données : il contient toutes les méta-données
utiles au système. Les méta-données sont les représentations permettant la
description :
Des données (type, taille, valeur autorisée, etc.).
Des autorisations d’accès.
Des vues et autres éléments système.
Le catalogue renferme encor la description des différents schémas des trois niveaux
ainsi que les règles de passage d’un schéma vers l’autre ;
Monde réel
MERISE
Modèle conceptuel
E/A
Hiérarchique
Modèle logique
Relationnel
Réseau
Client
Article
Numcli
1,n Commander Numarti
0,n
Nom
Désignation
IDcom+IDadr
Date, Qte Prix
A partir de la figure 1.5, chaque client réel est une occurrence de l’entité client.
Le client nommé Omar est une instance ou occurrence de l’entité Client.
Plusieurs composantes apparaissent dans ce modèle. Dans le paragraphe suivant, on va
expliquer le principe de chacune d’elles.
Entité : représentation d’un objet matériel ou immatériel. La figure 1.6 montre la
représentation schématique d’une entité.
Par exemple un employé, un projet, un bulletin de paie, etc.
Propriétés : données élémentaires relatives à une entité.
Par exemple, un numéro d’employé, une date de début de projet, etc.
Identifiant : propriété ou groupe de propriétés qui sert à identifier une entité. L’identifiant
d’une entité est choisi par l’analyste de façon à ce que deux occurrences de cette entité ne
puissent pas avoir le même identifiant.
Par exemple, le numéro de client sera l’identifiant de l’entité Client.
Associations : représentation d’un lien entre deux entités ou plus, une association peut avoir
des propriétés particulières (date d’empreint dans la figure 1.7). Schématiquement,
l’association prend la forme d’une ellipse.
Une relation est binaire, si elle relie deux entités. Elle est ternaire si elle relie trois entités, n-
aire, si elle relie un nombre d’entités supérieur à 2.
Association cyclique (récursive) : elle lie une entité à elle même (cycle). On doit donc
spécifier les rôles de l’association. Un rôle représente le rôle d’une entité dans une
association. Un exemple est indiqué dans la figure 1.8.
Cardinalités : la cardinalité d’une association pour une entité constituante est composée
d’une borne minimale et d’une borne maximale :
Minimale : nombre minimum de fois qu’une occurrence de l’entité participe aux
occurrences de l’association, généralement 0 ou 1.
Maximale : nombre maximum de fois qu’une occurrence de l’entité participe aux
occurrences de l’association, généralement 1 ou n.
Dans la figure 1.9, la cardinalité 0,3 indique qu’un adhérent peut être associé à 0, 1, 2 ou 3
livres, c’est-à-dire qu’il peut emprunter au maximum 3 livres.
A l’inverse un livre peut être emprunté par un seul adhérent, ou peut ne pas être emprunté.
Remarques
Les cardinalités maximum sont nécessaires pour concevoir le schéma de la base de
données.
Les cardinalités minimums sont nécessaires pour exprimer les contraintes d’intégrité.
A B
1 n
Employé Départ
1 Travaille n
A B
n 1
Départ Employé
n Emploie 1
A B
n m
Employé Projet
n Participe m
Introduction
Le modèle relationnel de données été défini en 1970 par le Edgar Frank Codd chercheur
britannique pour surpasser les inconvénients des modèles hiérarchiques et réseaux (incapacité
de gérer des BDs volumineuses, incapacité de traiter les redondances de données, la non-
garantie de l’intégrité de données, etc.). Les premiers SGBDR commerciaux font leur
apparition dans les années 80, avec des outils comme ORACLE principalement.
Le modèle relationnel est simple, facile à comprendre même pour les non-spécialistes et
repose sur des solides bases théoriques notamment la théorie des ensembles et la logique des
prédicats du premier ordre qui permettent notamment de conduire à une amélioration des
performances des outils.
Les objectifs du modèle relationnel sont :
- Proposer des schémas de données faciles à utiliser.
- Améliorer l’indépendance logique et physique.
- Mettre à la disposition des utilisateurs des langages de haut niveau.
- Optimiser les accès à la base de données.
- Améliorer l’intégrité et la confidentialité.
- Fournir une approche méthodologique dans la construction des schémas.
Cet exemple représente une relation décrivant les étudiants. Le nom de la relation est
ETUDIANT. Les entités dans les colonnes représentent les attributs qui sont : (N°Etud, Nom,
Prénom, Age).
Chaque ligne de la table correspond à une occurrence ou un tuple, par exemple : <100, Naser,
Fateh, 19>.
Exemple 2 : la table OUVRAGES décrit un ouvrage.
Une table est composée d’un ensemble d’attributs et d’un ensemble de tuples.
Un attribut est le nom donné à une colonne d’un tableau représentant une relation.
2.1.2. Domaine
Un domaine est un ensemble de valeurs finies ou infinies que peut prendre un attribut. Ex :
entier, chaine de caractères, réels, etc.
Exemples :
Le domaine des booléen : Db={0,1}.
Le domaine des couleurs primaires : Dc= {jaune, rouge, bleu}
Le domaine des prénoms : chaine de caractères.
Le domaine des âges : entier entre 17 et 30.
2.1.3. Relation
Une relation est un ensemble de tuples, déterminée par un nom. Une relation peut être
exprimée en deux formats :
1. Relation en intension (schéma de relation) : ici, on représente la relation par son
nom suivi de l’ensemble de ses attributs et de leurs domaines d’application. Parmi ces
attributs, un sous-ensemble (un ou plusieurs attributs) constitue la clé de la relation et
sera soulignée dans le schéma.
Exemple 1 : ETUDIANT (N°Etud : entier, Nom : CC, Prénom : CC, Age : entier).
Exemple 2 : OUVRAGES (Côte : texte, Titre: Texte, Editeur: Texte, NbExemplaire:
Numérique, Année:Date, Thème:Texte).
Pour alléger l’écriture, le schéma de relation se limite souvent au nom de la relation
suivi de ses attributs.
Exemple 1 : ETUDIANT (N°Etud, Nom, Prénom, Age).
2. Relation en extension : quand la relation est exprimée en intension, ses tuples ne sont
pas visibles. Par contre, la présentation de la relation en extension permet de les lister.
La relation en extension est représentée sous forme de tableau. Les lignes de la table
sont les tuples.
1. La première ligne : non, elle viole la propriété d’unicité de la clé car le département
N° 10 existe déjà.
2. La 2ème ligne : non, la clé ne peut pas être nulle.
3. 3ème ligne : oui.
Remarques
Du fait que la clé primaire identifie de manière unique les tuples d’une relation,
aucune de ses attributs ne doit être nulle.
Dans une relation, une valeur nulle représente des informations manquantes,
inconnues ou des données inapplicables. Donc, la valeur NULL n’est pas une valeur
zéro et elle ne représente pas une valeur particulière pour l’ordinateur.
D’une manière formelle, soit un schéma de relation R(A1, A2, …,An) avec ∀ ( ),
Ai étant un attribut dont les valeurs appartiennent à un domaine Di. La projection R’ de R sur
A1, A2 s’écrira : R’= proj(R,A1,A2)=∏ 1, 2 ( ).
La modélisation graphique est :
R’
A1, A2
Nom, Prenom
CLIENT
La deuxième étape consiste à supprimer les doublons, pour cette relation on n’a pas.
Exemple 2 : considérant la relation CLIENT (N°CLI, Nom, Prenom, Datnais).
On représente la relation en extension :
CLIENT N°CLI Nom Prenom Datnais
101 Taleb Omar 14/03/1959
102 Mansouri Nabil 13/03/1946
230 Mansouri Nabil 14/05/1978
104 Salem Rida 11/12/1985
214 Ayad Fateh 11/11/1975
311 Ferah Nabil 15/04/1968
Sélection (restriction) : elle consiste à créer une relation à partir d’une autre, en ne gardant
que les tuples pour lesquels un attribut vérifie une certaine propriété.
La sélection est l’opération qui consiste, à partir d’une relation R (A1, A2,…, An), à créer une
nouvelle relation R’(A1, A2,…,An) dont tous les tuples vérifient une propriété d’un attribut
Ai.
On notera : R’= < é >< > ( ) ∀ ∈ .
Ou R’=Restrict (R,Ai<opérateur><valeur>).
Ou R’=R[Ai<opérateur><valeur>].
L’opérateur appartient à l’ensemble {=,<, >,≤, ≥, ≠}.
La valeur appartient au domaine de l’attribut Ai. La modélisation graphique est :
R’
Ai <opérateur> <val>
La représentation graphique :
SCLIENT1
Datnais≤’01/01/1973’
CLIENT
Requête 2 : à partir de la table CLIENT, quels sont les clients ayant un prénom : Ahmed.
SCLIENT2= = ′Ahmed′( )
= CLIENT [Prenom=’Ahmed’]=
=Restrict(CLIENT, Prenom=’Ahmed’)=Ф.
Union : l’union de deux relations R1 et R2 est une nouvelle relation R dont les tuples
appartiennent à R1 ou à R2 ou appartiennent à R1 et R2. Les trois relations ; R1, R2 et R3 ont
le même schéma. On notera : = 1 ∪ 2.
La modélisation graphique de l’union est :
Remarque
La relation résultante n’a pas de clé primaire définie.
Considérant LIVREB1 et LIVREB2 en extension :
LIVREB1 NLIV TITRE NOMAUT
101 Les fourmis Bertrand
102 Le soir des fourmis Bertrand
210 La révolte des fourmis Bertrand
104 Les 10 mousquetaires Artagnan
Différence : la différence R1-R2 de deux relations R1 et R2 est une nouvelle relation R dont
les tuples appartiennent à R1 ET n’appartiennent pas à R2. Les trois relations R1, R2 et R3
ont le même schéma. On notera : R=R1-R2. Aucun exemplaire commun n’est conservé.
La modélisation graphique de la différence est la suivant :
Exemple : supposant qu’une grande librairie B1 achète une petite librairie B2 et décide de ne
conserver en vente que les livres de B1 ; mais de plus, s’il y a un livre de B1 qui est référencé
chez B2, il est retiré de la vente. Les relations en intension sont :
LIVREB1 (NLIV, TITRE, NOMAUT).
LIVREB2 (NLIV, TITRE, NOMAUT).
La relation résultante DIFLIVRE aura pour schéma : (NLIV, TITRE, NOMAUT) et
regroupera tous les tuples appartenant à LIVREB1 et n’appartenant pas à LIVREB2.
DIFLIVRE= LIVREB1- LIVREB2.
Considérant LIVREB1 et LIVREB2 en extension :
3. Puis, il faut ensuite éliminer de cet ensemble, les tuples qui appartiendraient aussi à
LIVREB2. C'est-à-dire le tuple < 102, Le soir des fourmis, Bertrand >. Nous
obtenons :
Remarque
2 − 1 ≠ 1 − 2.
Produit cartésien : le produit cartésien de deux relations R1 et R2 est la relation R, dont :
Le schéma relationnel est constitué de la concaténation des attributs du schéma de R1
et du schéma de R2.
Les tuples sont issus de toutes les combinaisons des tuples de R1 avec les tuples de
R2.
Les deux tables participant au produit cartésien n’ont pas forcément le même schéma.
On notera : R=R1xR2= R1*R2. Graphiquement on aura : R
LIVRE ANNEXE
En appliquant le produit cartésien, on aura une nouvelle relation contenant un tuple par ville
possible et par livre possible. R1= LIVRE*ANNEXE.
Remarque
La relation représentant la réalité sera généralement un sous-ensemble du produit cartésien.
Jointure : la jointure est dérivée du produit cartésien avec, en plus, une condition permettant
de comparer la valeur d’attributs. Il y aura une étape de concaténation d’attributs provenant
des deux relations puis élimination des tuples ne vérifiant pas la condition de rapprochement.
Ici encor, les deux tables n’ont pas forcément le même schéma.
On trouve différents types ; les jointures internes (la -jointure, l’équi-jointure et la jointure
naturelle), et les jointures externes (la jointure externe entière, la jointure externe gauche et la
jointure externe droite).
La jointure naturelle consiste donc à combiner deux tables ligne à ligne en vérifiant la
concordance entre certaines colonnes des deux tables. Autrement dit, cela permet de relier
deux tables ayant un champ commun et de faire correspondre les lignes qui ont une même
valeur. R= R1 ⋈[ é é] R2.
Elle porte sur des attributs de même nom, même domaine mais appartenant à des relations
distinctes. Aussi, en pratique, nous ferons le plus souvent des jointures naturelles qui
porteront sur une clé primaire et une clé étrangère. La modélisation graphique de la jointure
est : R
R1 R2
Exemple 1 :
LIVRE (NUML,TITRE, NomAUT, NUAN).
ANNEXE (NUMA, VIL).
Requête : on voudrait conservant que les livres dont le numéro d’annexe existe dans la
relation annexe.
LIVRE
NUML TITRE NomAUT NUAN
101 Les fourmis Bertrand 375
102 Le soir des fourmis Bertrand 375
210 La révolte des fourmis Bertrand 600
Division : c’est un opérateur binaire qui s’applique entre deux relations R1 et R2 pour donner
une relation R= ÷ . Le schéma de la relation R2 doit être une partie du schéma de R1. La
relation R obtenue aura le schéma de R1 moins les attributs de R2. Tout tuple de R sera tel
que : quelque soit le tuple de R2 qui lui sera concaténé, il donnera un tuple de la relation
initiale R1.
Intérêt :
1. Elle permet de rechercher dans une table les sous-tables qui sont complétées par tous
ceux d’une autre table.
2. Elle permet ainsi, de répondre à des requêtes de la forme : quelque soit X trouver Y.
Titre
LIVRE ANNEXE
LIVRE ANNEXE
Exemple 2 :
LIVREB1 (NLIV, TITRE, NOMAUT).
LIVREB2 (NLIV, TITRE, NOMAUT).
Requête : on cherche les numéros et les titres des livres en commun des deux relations, dont le
numéro de livre est inférieur à 200. Donc, on va faire une intersection suivie d’une projection
suivie d’une sélection.
R4= [ ] [ , ]( 1∩ 2).
Donner l’arbre algébrique.
Requête : on veut connaître les numéros des clients à qui il suffirait de faire un achat de
100DA pour égaliser ou dépasser un total d’achats de 1000DA.
Il faut extraire les tuples dont le total d’achats effectués+100DA est supérieur à 1000DA.
Arithmétiquement, cela s’écrira ACHATTOTAL+100 ≥1000. Ensuite, on fera la projection.
Fonctions d’agrégat : elles vont permettre de calculer une valeur simple à partir d’un
ensemble de valeurs provenant d’un même attribut mais plusieurs tuples d’une relation.
Ces fonctions pourront s’appliquer à tous les tuples ou à une sélection de tuples d’une
relation. Les fonctions courantes, que l’on retrouvera en SQL, sont les suivantes :
COMPTE : compter les valeurs d’un attribut d’une relation.
SOMME : additionner les valeurs d’un attribut d’une relation.
MOYENNE : effectuer la moyenne des valeurs d’un attribut d’une relation.
MAXIMUM : chercher la valeur maximale d’un attribut d’une relation.
MINIMUM : chercher la valeur minimale d’un attribut d’une relation.
Exemple : considérant la relation CLIENT (NUMC, NOM, PRENOM, ACHATTOTAL).
En extension : CLIENT
NUMC NOM PRENOM ACHATTOTAL
101 Khaldi Nabil 802
102 Badaoui Fateh 50
210 Maarouf Samir 354
104 Seradj Omar 1098
214 Fareh Sami 950
310 Taleb Salim 900
Requête : on veut connaître le total des achats effectués par tous les clients.
Somme (ACHATTOTAL)
CLIENT
Introduction
Il existe une différence entre l’algèbre relationnel et le calcul relationnel :
Algèbre relationnelle : langage procédural permettant d'expliciter une séquence
d'opérations qui conduiront à un résultat désiré. Il est opérationnel. L’algèbre relationnelle
permet de spécifier quelles sont les opérations à exécuter pour calculer le résultat de la
requête.
Calcul relationnel : langage non-procédural (déclaratif) permettant d'expliciter le résultat
que l'on désire sans spécifier la séquence des opérations à effectuer. Il n’est pas
opérationnel.
C’est un langage prédicatif qui permet de ne spécifier que le résultat cherché (pas comment
le calculer). Il s’agit de spécifier des prédicats qui doivent être vérifiés par les données
pour former le résultat. On le qualifie de langage prédicatif car il est basé sur le calcul de
prédicats (logique du 1er ordre).
3.1.1. Syntaxe
L’alphabet du langage est composé des éléments suivants :
Un ensemble de variables notées x, y, z, etc.
Un ensemble de fonctions notées f, g, h ayant chacune une arité (nombre
d’arguments).
Un ensemble de symboles de prédicats notés P, Q, R, etc. ayant chacun une arité.
Des parenthèses : ( ).
3.1.2. Notification
Terme :
Chaque variable est un terme.
Si t1, t2,…,tn sont des termes et f est un symbole de fonction alors f(t1, t2,…,tn) est
un terme.
Un terme est clos (fermé) s’il ne contient aucune variable.
Atome : il est de la forme P(t1, t2,…,tn) où P est un symbole de prédicat d’arité n et t1, t2,…,tn
sont des termes.
Formule :
Chaque atome est une formule.
Si A est une formule alors A est une formule.
Variable libre et variable liée : une variable est dite libre dans une formule A, si elle n’est pas
quantifiée (elle n’apparaît pas après les quantificateurs ou ).
Formalisation du langage naturel : le langage naturel peut être formalisé en utilisant le calcul
de prédicat.
Exemples :
Tous les étudiants sont intelligents : x (Etudiant(x)Intelligent(x)).
Seulement les étudiants sont intelligents : x (Intelligent (x) Etudiant (x)).
Il existe un étudiant intelligent : x (Etudiant(x) ∧ Intelligent(x)).
Il n’existe pas un étudiant intelligent : x (Etudiant(x) ∧ Intelligent(x)).
Il existe des étudiants qui réussissent dans tous les modules :
x (Etudiant(x) ∧y(Module(y) Reussi(x,y)).
3.1.3. Sémantique
Une formule prend les valeurs vrai ou faux.
Si A est vrai alors A est faux.
A∧B est vrai si et seulement si A est vrai et B est vrai.
A∨B est vrai si et seulement si A est vrai ou B est vrai ou les deux en même temps.
Module (x) : signifie que x est une variable tuple de la relation Module et peut prendre l’une
des valeurs suivantes :
x=(‘ ALGO’, ‘Algorithmique’, 4) : x.Codem=‘ ALGO’, x.Libellé=‘Algorithmique’,
x.créd=4.
x=(‘ SEXP’, ‘Système d’exploitation’, 5).
x=(‘ BD’, ‘Base de Données’, 3).
Remarque
Une variable tuple qui apparaît dans le résultat de la requête ne doit pas être liée dans le
prédicat à vérifier, toutes les autres variables sont liées.
Exemple :
{x.Codem/x (Module (x)et x.créd=5)}est faux.
Car x doit être libre dans le prédicat spécifié (elle ne doit pas être quantifiée).
Exemple : soit la relation : Etudiant (Num, nom, prénom, datnais, adr).
Requête 1 : quels sont les noms des étudiants qui sont nés après 1982.
Réponse : {x.nom/Etudiant(x) ∧ x.datnais>=01/01/1982}.
Remarque
Si plusieurs attributs sont dans le résultat, ils seront séparés par des virgules.
Requête 2 : quels sont les noms et les prénoms des étudiants qui résident à Alger.
{x.nom, x.prénom/Etudiant(x) ∧ x.adr= « Alger »}.
Requête multi-relation : elles opèrent sur des relations différentes, et donc il faut manipuler
des variables tuples différentes.
Exemple : soit les relations suivantes :
Module (Codem, Libellé, créd, annétude).
Enseignant (Num, nom, prénom, datnais, adr, grad, nbheur).
Modens (Num, Codem).
Requête 1 : quels sont les noms des enseignants qui interviennent dans les modules de 2ème
année.
Réponse : {x.nom/Enseignant(x) ∧y, z (Module(y) ∧ Modens(z) ∧ y.annétude=2 ∧
y.Codem=z.Codem ∧ x.Num=z.Num)}.
Requête 2 : quels sont les noms et les adresses des enseignants qui assurent tous les modules
de 2ème année.
Réponse : {x.nom, x.adr /Enseignant(x) ∧y, z (Module(y) ∧ y.annétude=2z (Modens(z)
∧ y.Codem=z.Codem ∧ x.Num=z.Num)}.
Remarques
L’ordre des attributs devient important.
Les requêtes sont spécifiées ainsi : {x1, x2, ………, xn / f(x1, x2, ………, xn)}.
La différence essentielle entre le calcul relationnel des tuples et le calcul relationnel des
domaines est l’ensemble dans lequel les variables prennent leurs valeurs :
Tuples : chaque variable prend ses valeurs dans l’ensemble des tuples d’une relation
particulière.
Domaines : chaque variable prend ses valeurs dans un domaine particulier des attributs
de la base.
Remarque
Le calcul relationnel et l’algèbre relationnelle ont une puissance d’expression équivalente
(complétude relationnelle), donc, on peut traduire tout opérateur de l’algèbre relationnelle en
calcul relationnel de tuples.
Introduction
SQL (Structured Query Langage ou bien langage de requête structuré) est un langage
informatique standard pour la communication avec les SGBDRs. Il a été défini par l’ANSI
(American National Standard Institute) et l’ISO (International Standards Organization).
SQL peut être vu comme une boite à outils comprenant à la fois un formalisme proche, du
langage algébrique, et un autre proche du langage prédicatif. Il existe alors souvent, plus
d’une façon d’exprimer une même requête.
Le succès du langage SQL est dû essentiellement à sa simplicité et au fait qu’il s’appuie sur le
schéma conceptuel pour énoncer des requêtes en laissant le SGBD responsable de la stratégie
d’exécution.
Le langage SQL est un langage déclaratif qui permet d'interroger une base de données sans se
soucier de la représentation interne (physique) des données, de leur localisation, des chemins
d'accès, ou des algorithmes nécessaires.
Néanmoins, le langage SQL ne possède pas la puissance d’un langage de programmation :
entrées/sorties, instructions conditionnelles, boucles et affectations. Pour certains traitements
il est donc nécessaire de coupler le langage SQL avec un langage de programmation plus
complet.
De manière synthétique, on peut dire que SQL est un langage relationnel, il manipule donc
des tables (des relations, c’est-à-dire des ensembles) par l’intermédiaire de requêtes qui
produisent également des tables.
SQL peut être utilisé :
D’une manière interactive.
En association avec des interfaces graphiques.
Ou, très généralement, des langages de programmation.
Remarque
Pour afficher l'intégralité d'une table, et avoir ainsi toutes les lignes (on omet la clause
WHERE), et toutes les colonnes, on peut au choix lister tous les attributs ou utiliser le
caractère * qui a la même signification.
ORDER BY : est utilisée pour trier les résultats d'une requête. Cette clause doit être suivie de
la liste des attributs servant de critère au tri. Pour trier en ordre descendant, on ajoute le mot-
clé DESC après la liste des attributs. Et pour avoir un tri ascendant, on ajoute le mot-clé ASC.
Par défaut les attributs seront triés en ordre ascendant.
Remarques
1. Pour obtenir une recherche par intervalle, on peut également utiliser le mot-clé
BETWEEN.
2. Lorsque le SGBD construit la réponse d’une requête, il rapatrie toutes les lignes qui
satisfont la requête, généralement dans l’ordre ou il les trouve, même si ces dernières
sont en double (comportement ALL par défaut). C’est pourquoi il est souvent
nécessaire d’utiliser le mot clé DISTINCT qui permet d’éliminer les doublons dans la
réponse.
3. Il est possible d’utiliser les opérateurs mathématiques de base (‘+’, ‘-’, ‘*’ et ‘/’) pour
générer de nouvelles colonnes à partir, en générale, d’une ou plusieurs colonnes
existantes.
4. Le mot clé AS permet de renommer une colonne, ou de nommer une colonne créée
dans la requête.
5. L’opérateur || (double barre verticale) permet de concaténer des champs de type
caractères.
6. L’opérateur IN spécifie un ensemble de valeurs possibles.
7. En pratique, il est possible d’avoir des valeurs non définies qui sont représentées par le
mot clé NULL. On peut tester si une valeur n’est pas définie grâce à la condition IS
NULL (ou son contraire IS NOT NULL).
8. Si on trouve plusieurs tables dans une requête, cela représente un produit cartésien
entre ces différentes tables.
9. Si un attribut est présent dans plusieurs tables utilisées, on doit l’écrire : nom-table.att.
10. Dans les comparaisons des chaînes de caractères, il est possible d’utiliser l’opérateur
LIKE : une chaîne commence par un ensemble de caractères, et les caractères
génériques, ‘%’ qui remplace une chaîne de caractères de taille quelconque, et ‘ ?’ qui
remplace un seul caractère.
11. En SQL, la jointure s’exprime comme une sélection sur le produit cartésien :
SELECT att1, att2
FROM nom_table1, nom_table2
WHERE nom_table1.attx = nom_table2.attx;
4.1.2. Sous-requête
C’est l’utilisation du résultat d’une requête dans une autre requête. Le but est l’augmentation
de la puissance d’expression du langage. On peut utiliser les opérateurs suivants :
1. A IN (sous-requête), elle est vrai si A apparaît dans le résultat du sous-requête.
2. A (=; <; >;<=;>=) ANY (sous-requête), elle est vrai s’il existe un b parmi les lignes
renvoyées par la sous-requête tel que A (=; <; >;<=;>=) b soit vrai.
3. A (=; <; >;<=;>=) ALL (sous-requête), elle est vrai si pour toutes les lignes b
renvoyées par la sous-requête tel que A (=; <; >;<=;>=) b soit vrai.
4. EXISTS (sous-requête) (et son contraire NOT EXISTS (sous-requête)), elle est vrai
si le résultat de la sous-requête n’est pas vide, avec au moins un tuple.
5. On peut tester l’inclusion entre les ensembles via le mot clé CONTAINS.
Remarque
SQL ne comporte pas d’opérateurs spécifiques à la division. Cependant, il est possible
d’exprimer la sémantique de cet opérateur en se basant sur les opérateurs logiques.
Introduction
SQL est un Langage de Définition de Données (LDD), c'est-à-dire qu'il permet de créer des
tables dans une base de données relationnelle, ainsi que d'en modifier ou en supprimer.
Intégrité référentielle "minimale" par la clause REFERENCES sur les colonnes qui
matérialise une dépendance entre deux colonnes de la table. Et par la clause
FOREIGN KEY sur la table qui matérialise une dépendance entre deux colonnes de
deux tables
Exemple 1 :
CREATE TABLE étudiant
( Num INTEGER PRIMARY KEY,
Nom CHAR(40) NOT NULL,
Année INTEGER CONSTRAINT CAnnée CHECK (Année BETWEEN 1997 AND 2013),
Moyenne Number(2,3) CONSTRAINT CMoyenne CHECK (Moyenne BETWEEN 00,000
AND 20,000));
Exemple 2 :
CREATE TABLE Consommateur
( ID INTEGER CONSTRAINT PK_Consommateur PRIMARY KEY,
Nom TEXT(50) NOT NULL,
Prénom TEXT(50) NOT NULL,
Tél TEXT(10),
Email TEXT(50),
Address TEXT(40));
Exemple 3 :
CREATE TABLE Véhicules (Nom TEXT(30), Année TEXT(4), Prix CURRENCY);
Types de données utilisés : voici un ensemble représentatif des types de données utilisés lors
de la création d’une table en SQL dans ACCESS :
Booléen : BIT.
Nombre entier : SHORT (entier), SMALINT (entier), LONG (entier long), INTEGER
(entier long).
Nombre réel : SINGLE (réel simple), DOUBLE (réel double), Numeric (réel double).
Monétaire : CURRENCY, MONEY.
Date/heure : DATE, TIME, DATETIME.
Texte: VARCHAR(255), CHAR(n) ou TEXT(n), où n est le nombre de caractères.
Modifier une table : en utilisant l’instruction : ALTER TABLE qui permet de modifier la
structure de la table, elle consiste donc à ajouter ou modifier des colonnes de la table.
Syntaxe : ALTER TABLE nom_table modification;
On peut avoir les situations suivantes :
ALTER TABLE nom table ADD att type NOT NULL;
Ajouter à la table nom table un attribut att contenant des données correspondant à
type.
On peut optionnellement spécifier NOT NULL lorsque l’on souhaite interdire la
valeur NULL.
Ex : ALTER TABLE Véhicules ADD COLUMN État TEXT(10);
ALTER TABLE nom table ALTER att nouveau type NOT NULL;
Changer le type de l’attribut att, en spécifiant optionnellement NOT NULL.
Ex : ALTER TABLE Véhicules ALTER État Text;
ALTER TABLE nom table RENAME COLUMN att TO nouvel att;
Changer le nom de att en nouvel att.
ALTER TABLE nom table DROP COLUMN att;
Supprimer l’attribut att de la table nom table.A
Ex : ALTER TABLE Véhicules DROP COLUMN Nom; jouter ou
ALTER TABLE nom table ADD CONSTRAINT nomc contrainte;
Ajouter la contrainte contrainte sur la table nom table.
CONSTRAINT nomc spécifie le nom optionnel de la contrainte.
ALTER TABLE nom table DROP PRIMARY KEY;
Supprimer la clé primaire.
Renommage d’une table : on peut renommer une table avec l’instruction suivante :
RENAME ancien_nom TO nouveau_nom;
Insertion de n-uplets : la commande INSERT INTO permet d’insérer une ligne dans une
table en spécifiant les valeurs à insérer.
La syntaxe est la suivante :
INSERT INTO nom_table (nom_col_1, nom_col_2, ...)
VALUES (val_1, val_2, ...)
La liste des noms de colonne est optionnelle. Si elle est omise, la liste des colonnes sera par
défaut la liste de l’ensemble des colonnes de la table dans l’ordre 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.
Il est possible d’insérer dans une table des lignes provenant d’une autre table.
La syntaxe est la suivante :
INSERT INTO nom_table (nom_col1, nom_col2, ...)
SELECT
Exemple:
INSERT INTO étudiant Values (‘123’, ‘Talebi’, ‘2010’,’12,54’);
Modification des lignes : la commande UPDATE permet de modifier les valeurs d’une ou
plusieurs colonnes, dans une ou plusieurs lignes existantes d’une table.
La syntaxe est la suivante :
UPDATE nom_table
SET nom_col_1 = {expression_1 | ( SELECT ...) },
nom_col_2 = {expression_2 | ( SELECT ...) },
...
nom_col_n = {expression_n | ( SELECT ...) }
WHERE predicat;
Les valeurs des colonnes nom_col_1, nom_col_2, ..., nom_col_n sont modifiées dans toutes
les lignes qui satisfont le prédicat.
En l’absence d’une clause WHERE, toutes les lignes sont mises à jour.
Les expressions expression_1, expression_2, ..., expression_n peuvent faire référence aux
anciennes valeurs de la ligne.
Exemple :
UPDATE TABLE étudiant
SET Moyenne=’14,56’
WHERE Nom=’Talbi’;