L3-Informatique Paris 8
Base de données
Rim Chaabane rchaab[email protected]paris8.fr - Séance 7 -
1
Langage SQL : créer et interroger une base
Dans ce chapitre, nous revenons sur les principales requêtes de création de table et
d’accès aux données. Nous verrons aussi quelques fonctions d’agrégation (MAX, SUM,
COUNT, ..). Nous revenons pour finir sur les opérations de l’algèbre relationnelle et les
traduisons en requêtes SQL.
Avant d’aborder la création et d’interrogation des tables avec la commande SELECT,
nous présentons quelques règles d’écritures en SQL.
Nommage des objets en SQL
Un nom d’objet (table, base, colonne contrainte, vue, etc…) doit avoir les
caractéristiques suivantes :
- Ne pas dépasser 128 caractères
- Commencer par une lettre
- Etre composé de lettre, de chiffre, du caractère ‘_’
- Ne pas être un mot réservé en SQL { moins d’être mis entre guillemets
- Pas de caractères accentués
Il faut noter que les noms d’objets sont insensibles { la casse. Voici quelques
exemples de noms bien et mal formés :
valable
Interdit
T_CLIENT
T CLIENT
Xyz
_XyZ_
IBM_COM
Ibm.com
″SELECT″
SELECT
CLI_NUM
CLI#
MS_sql_Server
Microsoft/SQLserver
Remarque : une bonne habitude consiste à donner un nom pertinent aux objets des
bases de données.
Commentaires
Les commentaires en mysql s’ecrivent { la manière C :
/* mon commentaire
sur
plusieurs lignes */
Mais un commentaire sur une seule lignes est introduit par : ‘—‘ ou ‘#’. Mais pour
éviter toute confusion du caractère ‘—‘ avec des opérations mathématiques avec
le ‘-‘, préférez le ‘#’ pour vos commentaires sur une seule ligne.
L3-Informatique Paris 8
Base de données
Rim Chaabane rchaab[email protected]paris8.fr - Séance 7 -
2
1. CREATE TABLE
La syntaxe de création de table est la suivante :
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] {tbl_name |
db.name.tbl_name }
<col_name> <type> [NOT NULL | NULL] [DEFAULT <value>] [<contrainte
de colonne>]
[, {<col_name> <type> [DEFAULT <value>] [<contrainte de colonne>] |
<contrainte_de_table>}
[, ...]]
)
[SELECT…] ;
2.1. Les contraintes d’intégrité sur les colonnes de tables
Les contraintes d’intégrités permettent aux SGBD-R de garantir la cohérence des
données lorsque ces dernières sont mises à jour. Ces contraintes correspondent à des
contraintes du monde réel que la base de données cherche à représenter. Comme par
exemple, le nom d’un mois doit être une chaine de caractères, ou l’âge un nombre…Il y
aussi les clés primaires et clés étrangères, mais aussi bien d’autres contraintes que les
bases de données peuvent exprimer. Ainsi si une mise à jour viole une de ces
contraintes, elle sera alors tout simplement rejetée.
Contraintes de domaine
On entend par domaine le type des attributs d’une table.
Il ne peut y avoir de comparaison entre deux valeurs d’attributs si ces derniers ne sont
pas définit sur le même domaine. Le SGBD-R se charge de vérifier la validité des valeurs
d’attributs.
Un enregistrement ne peut être inséré dans une table que si chaque champ de
l’enregistrement vérifie la contrainte d’intégrité de domaine de la colonne pour laquelle
il est destiné.
Pour exemple prenons une table cours qui contient deux colonnes intitule et
nbEtudiants. Dans ce cas la commande pour créer cette table est :
CREATE TABLE cours (
Intitule VARCHAR,
NbEtudiants INTEGER) ;
L3-Informatique Paris 8
Base de données
Rim Chaabane rchaab[email protected]paris8.fr - Séance 7 -
3
Contrainte de non nullité (NOT NULL)
La contrainte de non nullité impose que la valeur d’un attribut soit renseignée (la valeur
du champ ne peut être à NULL). Prenons pour exemple, la colonne intitule de la table
cours. Il est cohérent d’imposer que l’intitulé soit toujours renseigné.
Ainsi la commande de création de la table devient :
CREATE TABLE cours (
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER) ;
Contrainte de vérification (CHECK)
La contrainte de vérification est une contrainte qui permet de spécifier que la valeur
d’une colonne particulière doit satisfaire une expression booléenne.
Attention : si l’expression booléenne compare deux valeurs de colonnes, et que ces
dernières contiennent la valeur NULL, elles ne seront pas considérées comme égales.
Par exemple le nombre d’étudiants ne peut être que supérieur { zéro. La commande de
création de table devient donc :
CREATE TABLE cours (
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS
NULL) ;
Contrainte de clé unique (UNIQUE) et clé primaire (PRIMARY KEY)
La contrainte d’unicité permet de préciser les attributs clés d’une table. Elle permet de
garantir que deux lignes de cette table ne peuvent en aucun cas recevoir les mêmes
valeurs pour ces attributs.
Aussi, comme deux valeurs NULL ne sont pas considérées par le SGBD-R comme égales,
nous pouvons avoir (aves la seule contrainte UNIQUE) deux valeurs de clé à NULL. Or,
une clé primaire ne peut être nulle. De ce fait, il est nécessaire d’accompagner la
contrainte UNIQUE par la contrainte de non nullité lorsqu’il s’agit de clés primaires :
UNIQUE NOT NULL.
La contrainte de clé primaire PRIMARY KEY permet justement d’exprimer ces deux
contraintes (UNIQUE NOT NULL).
L3-Informatique Paris 8
Base de données
Rim Chaabane rchaab[email protected]paris8.fr - Séance 7 -
4
Introduisons par exemple un attribut sigle (ex : INF1010, INF2705, LOG2410, MTH1006,
PHS1101, ) et qui est une clé pour la table cours. On aurait alors comme commande
de création de table :
CREATE TABLE cours (
sigle CHAR(7) UNIQUE NOT NULL,
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS
NULL) ;
Qui est identique à celle-ci :
CREATE TABLE cours (
sigle CHAR(7) PRIMARY KEY,
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS
NULL) ;
Contrainte d’intégrité de référence (REFERENCES)
La contrainte d’intégrité de référence est la contrainte de clé étrangère. Elle permet de
préciser qu’une colonne ou groupe de colonnes correspondent aux valeurs qui
apparaissent dans les lignes d’une autre table. Ce type de contrainte permet de
maintenir une intégrité entre deux tables.
Par exemple, dans l’exemple de la table cours, pour préciser l’enseignant qui dispense le
cours, il faut introduire une colonne id_enseignant qui fait référence à la colonne
id_personne de la table personne.
Quand on supprime une ligne de la table personne, le SGBD doit vérifier qu’aucune ligne
de la table cours, par l’intermédiaire de l’attribut id_enseignant, n’a la ligne qui doit être
supprimée. Sinon (i.e. la ligne à supprimer se trouve dans la table cours), trois situations
sont possibles :
la suppression est interdite dans la table maître (personne) et dans la table courante
(ici cours) où la contrainte d’intégrité est définie comme suit :
CREATE TABLE cours (
Id_enseignant INTEGER
REFERENCES personne (id_personne) RESTRICT,
sigle CHAR(7) PRIMARY KEY,
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants
IS NULL) ;
L3-Informatique Paris 8
Base de données
Rim Chaabane rchaab[email protected]paris8.fr - Séance 7 -
5
la suppression se fait dans la table maitre (ici personne) ainsi que dans la table
courante (cours) dans laquelle la contrainte d’intégrité est comme suit :
CREATE TABLE cours (
Id_enseignant INTEGER
REFERENCES personne (id_personne) ON DELETE CASCADE,
sigle CHAR(7) PRIMARY KEY,
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants
IS NULL) ;
La suppression se fait dans la table maitre (personne) mais dans la table courante
(cours), la valeur NULL est affectée dans la colonne id_enseignant pour toutes les
lignes qui vérifient l’identifiant supprimé dans la table maitre.
CREATE TABLE cours (
Id_enseignant INTEGER
REFERENCES personne(id_personne) ON DELETE SET NULL,
sigle CHAR(7) PRIMARY KEY,
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants
IS NULL) ;
Les déclencheurs (TRIGGERS)
L’utilisation de déclencheurs permet de matérialiser d’autres contraintes d’intégrité
sous forme d’une action déclenchée { la survenue d’un événement. L'événement est
généralement une action de mise à jour de la base.
Nous reviendrons sur cette notion dans le dernier chapitre du cours.
2.2. Les contraintes d’intégrité sur la table
Les contraintes de tables portent sur plusieurs colonnes de la table. Ces contraintes ont
la syntaxe suivante :
[ CONSTRAINT <nom_contrainte>
{ PRIMARY KEY (<nom_col>[, <nom_col>…]) |
FOREIGN KEY <nom_col>[, <nom_col>…])
REFERENCES <nom_tablel> [ (<nom_col>…) ]
[ ON DELETE {CASCADE |SET NULL} ]
CHECK (<condition>)
}
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !