Vous êtes sur la page 1sur 13

UNIVERSITÉ DES SCIENCES DES TECHNIQUES ET DES TECHNOLOGIES DE BAMAKO

INSTITUT DES SCIENCES APPLIQUÉES


BP: E 3206 TEL: 20 22 44 21
DER : GEII

Création et alimentation de bases de


données SQL
Le langage SQL

SQL* est un langage standardisé, implémenté par tous les SGBDR*, qui permet, indépendamment de la
plate- forme technologique et de façon déclarative, de définir le modèle de données, de le contrôler et enfin
de le manipuler.

1. Le langage SQL
Définition : SQL
SQL* (pour langage de requêtes structuré) est un langage déclaratif destiné à la manipulation de bases de
données au sein des SGBD* et plus particulièrement des SGBDR*. SQL : LDD, LCD, LMD, LCT

SQL est un langage déclaratif, il n'est donc pas a proprement parlé un langage de programmation, mais plutôt
une interface standard pour accéder aux bases de données.
Il est composé de quatre sous-ensembles :
-
Le Langage de Définition de Données (LDD*, ou en anglais DDL, Data Definition Language) pour créer et
supprimer des objets dans la base de données (tables, contraintes d'intégrité, vues, etc.).
Exemple de commandes : CREATE DROP ALTER
-
Le Langage de Contrôle de Données (LCD*, ou en anglais DCL, Data Control Language) pour gérer les
droits sur les objets de la base (création des utilisateurs et affectation de leurs droits).
Exemple de commandes : GRANT REVOKE
-
Le Langage de Manipulation de Données (LMD*, ou en anglais DML, Data Manipulation Language) pou la
recherche, l'insertion, la mise à jour et la suppression de données. Le LMD est basé sur les opérateurs
relationnels, auxquels sont ajoutés des fonctions de calcul d'agrégats et des instructions pour réaliser les
opérations d'insertion, mise à jour et suppression.
Exemple de commandes : INSERT UPDATE DELETE SELECT
-
Le Langage de Contrôle de Transaction (LCT, ou en anglais TCL, Transaction Control Language) pour la gestion
des transactions (validation ou annulation de modifications de données dans la BD)
Exemple de commandes : COMMIT ROLLBACK

2. CREATE DATABASE
La création d’une base de données en SQL est possible en ligne de commande. Même si les systèmes de gestion de base de
données (SGBD) sont souvent utilisés pour créer une base, il convient de connaître la commande à utiliser, qui est très
simple.
Pour créer une base de données qui sera appelé « ma_base » il suffit d’utiliser la requête suivante qui est très simple :

CREATE DATABASE ma_base

Si une base de données porte déjà un nom que l’on veut creer, la requête retournera une erreur. Pour éviter d’avoir cette
erreur, il convient d’utiliser la requête suivante pour MySQL :

CREATE DATABASE IF NOT EXISTS ma_base

L’option IF NOT EXISTS permet juste de ne pas retourner d’erreur si une base du même nom existe déjà. La base de
données ne sera pas écrasée.
3. DROP DATABASE
En SQL, la commande DROP DATABASE permet de supprimer totalement une base de données et tout ce qu’elle contient.
Cette commande est à utiliser avec beaucoup d’attention car elle permet de supprimer tout ce qui est inclus dans une base: les
tables, les données, les index …
Pour supprimer la base de données « ma_base », la requête est la suivante :

DROP DATABASE ma_base

4. Exercices d’Application :
Créer des bases de données : Scolarité, gestion et employer et les supprimer.
5. Créer des tables en SQL (Langage de Définition de Données)
Maîtriser les bases du SQL pour créer et modifier des tables et des vues.
Le LDD* est la partie du langage SQL qui permet de créer de façon déclarative les objets composant
une BD*. Il permet notamment la définition des schémas, des relations, des contraintes d'intégrité,
des vues.
5.1. Domaines de données
Un attribut d'une relation est défini pour un certain domaine ou type. Les types de données
disponibles en SQL varient d'un SGBD* à l'autre, on peut néanmoins citer un certain nombre de
types standards que l'on retrouve dans tous les SGBD.
Fondamental : Les types standard
- INTEGER ou INT, SMALLINT
- NUMERIC(X)
- DECIMAL(X,Y) ou NUMERIC(X,Y)
- FLOAT(X), REAL
- CHAR(X)
- VARCHAR(X)
- DATE (AAAA-MM-JJ)
- DATETIME (AAAA-MM-JJ HH:MM:SS)

Les types numériques standard :


- Les nombres entiers
INTEGER (ou INT) et SMALLINT, permettent de coder des entiers sur 4 octets (-2 147 483 648 à
2 147 483 647) ou 2 octets (-32 768 à 32 767).
- Les nombres entiers
NUMERIC(X) désigne un entier de X chiffres au maximum.
- Les nombres décimaux
DECIMAL(X,Y), où X et Y sont optionnels et désignent respectivement le nombre de chiffres
maximum pouvant composer le nombre, et le nombre de chiffres après la virgule.
NUMERIC(X,Y) est un synonyme standard.
- Les nombres à virgule flottante
FLOAT(X), avec X définissant la précision (nombre de bits de codage de la mantisse).
REAL est un synonyme standard de FLOAT (24).
NB : FLOAT versus DECIMAL
Il est conseillé d'utiliser DECIMAL qui est un nombre exact, plutôt que FLOAT qui est un nombre
approximatif, si la précision requise est suffisante. FLOAT sera réservé typiquement à des calculs
scientifiques nécessitant un degré de précision supérieur.
a) Les types chaîne de caractères standard
On distingue principalement les types CHAR(X) et VARCHAR(X), où X est obligatoire et désigne la
3
longueur de la chaîne.
CHAR définit des chaînes de longueur fixe (complétée à droites par des espaces, si la longueur est inférieure
à X) ;
et VARCHAR des chaînes de longueurs variables. CHAR et VARCHAR sont généralement limités à 255
caractères.
La plupart des SGBD proposent des types, tels que TEXT ou CLOB (Character Long Object), pour représenter
des chaînes de caractères longues, jusqu'à 65000 caractères par exemple.
b) Les types date standard
Les types date dont introduits avec la norme SQL2. On distingue :
- DATE qui représente une date selon un format de type "AAAA-MM-JJ" ;
- DATETIME qui représente une date plus une heure, dans un format tel que "AAAA-MM-JJ HH:MM:
SS".
- MONEY pour représenter des décimaux associés à une monnaie,
- BOOLEAN pour représenter des booléens,
- BLOB (pour Binary Long Object) pour représenter des données binaires tels que des documents multimédia
(images bitmap, vidéo, etc.).
5.2. Création de tables
La création de table est le fondement de la création d'une base de données en SQL. La commande CREATE
TABLE permet de créer une table en SQL. Un tableau est une entité qui est contenu dans une base de données
pour stocker des données ordonnées dans des colonnes. La création d’une table sert à définir les colonnes et le
type de données qui seront contenus dans chacun des colonne (entier, chaîne de caractères, date, valeur binaire
…).
Syntaxe
La syntaxe générale pour créer une table est la suivante :

CREATE TABLE nom_de_la_table (


colonne1 type_donnees, colonne2 type_donnees, colonne3 type_donnees, colonne4 type_donnees
) ;

Exemple
Imaginons que l’on souhaite créer une table utilisateur, dans laquelle chaque ligne correspond à un
utilisateur inscrit sur un site web. La requête pour créer cette table peut ressembler à ceci :
CREATE TABLE utilisateur (
id INT PRIMARY KEY NOT NULL,
nom VARCHAR(100),
prenom VARCHAR(100), email VARCHAR(255),
date_naissance DATE,
pays VARCHAR(255),
ville VARCHAR(255),
code_postal VARCHAR(5), nombre_achat INT
) ;

Voici des explications sur les colonnes créées :

4
• id : identifiant unique qui est utilisé comme clé primaire et qui n’est pas nulle
• nom : nom de l’utilisateur dans une colonne de type VARCHAR avec un maximum de 100
caractères au maximum
• prenom : idem mais pour le prénom
• email : adresse email enregistré sous 255 caractères au maximum
• date_naissance : date de naissance enregistré au format AAAA-MM-JJ (exemple : 1973- 11-17)
• pays : nom du pays de l’utilisateur sous 255 caractères au maximum
• ville : idem pour la ville
• code_postal : 5 caractères du code postal
• nombre_achat : nombre d’achat de cet utilisateur sur le site

ALTER TABLE
La commande ALTER TABLE en SQL permet de modifier une table existante. Il est ainsi possible d’ajouter une colonne, d’en
supprimer une ou de modifier une colonne existante, par exemple pour changer le type.

Syntaxe de base
D’une manière générale, la commande s’utilise de la manière suivante :

ALTER TABLE nom_table instruction

Le mot-clé « instruction » ici sert à désigner une commande supplémentaire, qui sera détaillée ci- dessous
selon l’action que l’on souhaite effectuer : ajouter, supprimer ou modifier une colonne.
Ajouter une colonne
Syntaxe
L’ajout d’une colonne dans une table est relativement simple et peut s’effectuer à l’aide d’une requête ressemblant à ceci :

ALTER TABLE nom_table


ADD nom_colonne type_donnees

Exemple
Pour ajouter une colonne qui correspond à une rue sur une table utilisateur, il est possible d’utiliser la requête suivante :

ALTER TABLE utilisateur


ADD adresse_rue VARCHAR(255)

Supprimer une colonne


Une syntaxe permet également de supprimer une colonne pour une table. Il y a 2 manières totalement
équivalente pour supprimer une colonne :

ALTER TABLE nom_table


DROP nom_colonne

Ou (le résultat sera le même)

ALTER TABLE nom_table DROP COLUMN nom_colonne

Modifier une colonne


Pour modifier une colonne, comme par exemple changer le type d’une colonne, il y a différentes syntaxes selon le
SGBD.

ALTER TABLE nom_table


MODIFY nom_colonne type_donnees
5
Renommer une colonne
Pour renommer une colonne, il convient d’indiquer l’ancien nom de la colonne et le nouveau nom de celle-ci.
Pour MySQL, il faut également indiquer le type de la colonne.

ALTER TABLE nom_table


CHANGE colonne_ancien_nom colonne_nouveau_nom type_donnees

DROP TABLE
La commande DROP TABLE en SQL permet de supprimer définitivement une table d’une base de données. Cela supprime en
même temps les éventuels index, trigger, contraintes et permissions associées à cette table.
Attention : il faut utiliser cette commande avec attention car une fois supprimée, les données sont perdues. Avant de l’utiliser sur
une base importante il peut être judicieux d’effectuer un backup (une sauvegarde) pour éviter les mauvaises surprises.

Syntaxe
Pour supprimer une table « nom_table » il suffit simplement d’utiliser la syntaxe suivante :

DROP TABLE nom_table

A savoir : s’il y a une dépence avec une autre table, il est recommandé de les supprimer avant de supprimer la table. C’est le
cas par exemple s’il y a des clés étrangères.

5.3. Exercices d’Application :


Créer une table utilisateur, dans laquelle chaque ligne correspond à un utilisateur inscrit sur un site web.
Voici des explications sur les attributs crées :
• id : identifiant unique qui est utilisé comme clé primaire et qui n’est pas nulle
• nom : nom de l’utilisateur dans une colonne de type VARCHAR avec un maximum de 100 caractères
• prenom : idem mais pour le prénom
• email : adresse email enregistré sous 255 caractères au maximum
• date_naissance : date de naissance enregistré au format AAAA-MM-JJ (exemple : 1973- 11-17)
• pays : nom du pays de l’utilisateur sous 255 caractères au maximum
• ville : idem pour la ville
• code_postal : 5 caractères du code postal
• nombre_achat : nombre d’achat de cet utilisateur sur le site
La requête pour créer cette table peut ressembler à ceci :
• CREATE TABLE utilisateur (
• id INT PRIMARY KEY NOT NULL,
• nom VARCHAR(100),
• prenom VARCHAR(100),
• email VARCHAR(255),
• date_naissance DATE,
• pays VARCHAR(255),
• ville VARCHAR(255),
• code_postal VARCHAR(5),
• nombre_achat INT
• ) ;
5.4. La valeur NULL / NOT NULL
L'absence de valeur, représentée par la valeur NULL, est une information fondamentale en SQL,
qu'il ne faut pas confondre avec la chaîne de caractère espace ou bien la valeur 0. Il ne s'agit pas
d'un type, ni d'une contrainte, mais d'une valeur possible dans tous les types.
5.5. Contraintes d'intégrité
- PRIMARY KEY (<liste d'attibuts>)
- UNIQUE (<liste d'attibuts>)
- FOREIGN KEY (<liste d'attibuts>) REFERENCES <nom table>(<nom colonnes>)
6
- CHECK (<condition>)
Les contraintes d'intégrité sur une colonne sont :

- PRIMARY KEY : définit l'attribut comme la clé primaire


- UNIQUE : interdit que deux tuples de la relation aient la même valeur pour l'attribut.
- REFERENCES <nom table> (<nom colonnes>) : contrôle l'intégrité référentielle entre l'attribut et la tabl et
ses colonnes spécifiées
- CHECK (<condition>) : contrôle la validité de la valeur de l'attribut spécifié dans la condition dans le
cadre d'une restriction de domaine
Définition : Contraintes d'intégrité sur une table
Les contraintes d'intégrité sur une table sont :
- PRIMARY KEY (<liste d'attibuts>) : définit les attributs de la liste comme la clé primaire
- UNIQUE (<liste d'attibuts>) : interdit que deux tuples de la relation aient les mêmes valeurs pour l'ensemble
des attributs de la liste.
- FOREIGN KEY (<liste d'attibuts>) REFERENCES <nom table>(<nom colonnes>) : contrôle l'intégrité
référentielle entre les attributs de la liste et la table et ses colonnes spécifiées
- CHECK (<condition>) : contrôle la validité de la valeur des attributs spécifiés dans la condition dans le cadre
d'une restriction de domaine

Syntaxe :
Exemple :
1 CREATE TABLE nom de table (
5.6.2 CREATE
Exemple denom_table
TABLE contraintes( d'intégrité
Dans la31 définition de schéma
nom_colonne1 domaine1précédente
CREATE TABLE Personne (
on acolonne1>,
<contraintes posé les contraintes suivantes :
- La clé primaire
4 nom_colonne2 de Personne
domaine2 est
2 N°SS CHAR(13) PRIMARY KEY, N°SS et
<contraintes la clé primaire de Adresse est (CP, Pays).
colonne2>,
5 ...
- Nom, 6 Prénom ne peuvent
3 Nom VARCHAR(25)
nom_colonneN
NOT pas
domaineN être null et (Nom,
NULL,
<contraintes Prénom) est une clé.
colonneN>,
4 Prenom VARCHAR(25) NOT NULL,
- Age 75doit être compris
<contraintes de entre
table>18 et 65 et Initiale doit être la première lettre de Pays (avec la fonction
Age INTEGER(3) CHECK (Age BETWEEN 18 AND 65),
8 );
LEFT6 qui renvoie
Mariage la sous
CHAR(13) chaîne à gauche
REFERENCES de la chaîne passée en premier argument, sur le nombre
Personne(N°SS),
7 Codepostal INTEGER(5),
de caractères passés en second argument)
8 Pays VARCHAR(50),
- Mariage est clé(Nom,
9 UNIQUE étrangère vers Personne et (Codepostal, Pays) est une clé étrangère vers Adresse.
Prenom),
10 FOREIGN KEY (Codepostal, Pays) REFERENCES Adresse (CP, Pays)
Exemple : Réécriture avec uniquement des contraintes de table
11 );
1 CREATE
12 TABLE Personne (
2 N°SS CHAR(13) ,
13 CREATE TABLE Adresse (
3 Nom VARCHAR(25) NOT NULL,
14 CP INTEGER(5) NOT NULL,
4 Prenom VARCHAR(25) NOT NULL,
15 Pays VARCHAR(50) NOT NULL,
5 Age INTEGER(3) ,
16 Initiale CHAR(1) CHECK (Initiale = LEFT(Pays, 1)),
6 Mariage CHAR(13),
17 PRIMARY KEY (CP, Pays)
7 Codepostal INTEGER(5),
8 18Pays
); VARCHAR(50),
9 PRIMARY KEY (N°SS),
10 UNIQUE (Nom, Prenom),
11 CHECK (Age BETWEEN 18 AND 65),
12 FOREIGN KEY (Mariage) REFERENCES Personne(N°SS),
13 FOREIGN KEY (Codepostal, Pays) REFERENCES Adresse (CP, Pays)
14 );
15
16 CREATE TABLE Adresse (
17 CP INTEGER(5) NOT NULL,

18 Pays VARCHAR(50) NOT NULL,


19 Initiale CHAR(1),
20 PRIMARY KEY (CP, Pays),
21 CHECK (Initiale = LEFT(Pays, 1))
22 );
Ce schéma est strictement le même que le précédent, simplement les contraintes ont toutes été réécrites comme
des contraintes de table

7
6. Insérer, modifier et supprimer des données en SQL (Langage de Manipulation de Données) :
Maîtriser les bases du SQL pour entrer, modifier et effacer des données dans les tables.
L’insertion de données dans une table s’effectue à l’aide de la commande INSERT INTO. Cette
commande permet au choix d’inclure une seule ligne à la base existante ou plusieurs lignes d’un coup.

Insertion d’une ligne à la fois

Pour insérer des données dans une base, il y a 2 syntaxes principales :


• Insérer une ligne en indiquant les informations pour chaque colonne existante (en respectant
l’ordre)
• Insérer une ligne en spécifiant les colonnes que vous souhaitez compléter. Il est possible
d’insérer une ligne en renseigner seulement une partie des colonnes
Insérer une ligne en spécifiant toutes les colonnes
La syntaxe pour remplir une ligne avec cette méthode est la suivante :
INSERT INTO table
VALUES ('valeur 1', 'valeur 2', ...)

Cette syntaxe possède les avantages et inconvénients suivants :


• Obliger de remplir toutes les données, tout en respectant l’ordre des colonnes
• Il n’y a pas le nom de colonne, donc les fautes de frappe sont limitées. Par ailleurs, les
colonnes peuvent être renommées sans avoir à changer la requête
• L’ordre des colonnes doit resté identique sinon certaines valeurs prennent le risque d’être
complétée dans la mauvaise colonne
Insérer une ligne en spécifiant seulement les colonnes souhaitées
Cette deuxième solution est très similaire, excepté qu’il faut indiquer le nom des colonnes avant
« VALUES ». La syntaxe est la suivante :
INSERT INTO table
(nom_colonne_1, nom_colonne_2, ... VALUES ('valeur 1', 'valeur 2', ...)

A noter : il est possible de ne pas renseigner toutes les colonnes. De plus, l’ordre des colonnes n’est pas
important.
Insertion de plusieurs lignes à la fois
Il est possible d’ajouter plusieurs lignes à un tableau avec une seule requête. Pour ce faire, il convient
d’utiliser la syntaxe suivante :
INSERT INTO client (prenom, nom, ville, age) VALUES
('Rébecca', 'Armand', 'Saint-Didier-des-Bois', 24),
('Aimée', 'Hebert', 'Marigny-le-Châtel', 36),
('Marielle', 'Ribeiro', 'Maillères', 27),

('Hilaire', 'Savary', 'Conie-Molitard', 58);

A noter : lorsque le champ à remplir est de type VARCHAR ou TEXT il faut indiquer le texte entre
guillemet simple. En revanche, lorsque la colonne est un numérique tel que INT ou BIGINT il n’y a pas
besoin d’utiliser de guillemet, il suffit juste d’indiquer le nombre.
Un tel exemple sur une table vide va créer le tableau suivant :
Etudiant :
8
id prenom nom ville age
1 Rébecca Armand Saint•Didier•des•Bois 24
2 Aimée Hebert Marigny•le•Châtel 36
3 Marielle Ribeiro Maillères 27
4 Hilaire Savary Conie•Molitard 58
Exemple : Quelle valeur renvoie la dernière instruction SQL de la liste ci-dessous
1 CREATE TABLE t (
2 a integer,
3 b integer,
4 c integer);
5
6 INSERT INTO t VALUES (0, 0, 0);
7
8 INSERT INTO t VALUES (1, 0, 0);

Insertion de données par entrée explicite des valeurs


Le langage SQL fournit des instructions pour ajouter des nouveaux tuples à une relation. Il offre ainsi une
interface standard pour ajouter des informations dans une base de données.
Il existe deux moyens d'ajouter des données, soit par fourniture directe des valeurs des propriétés du tuple à
ajouter, soit par sélection des tuples à ajouter depuis une autre relation.
Syntaxe : Insertion directe de valeurs
1 INSERT INTO <Nom de la relation> (<Liste ordonnée des propriétés à valoriser>)
2 VALUES (<Liste ordonnée des valeurs à affecter aux propriétés spécifiées ci- dessus>)
Exemple
1 INSERT INTO Virement (Date, Montant, Objet)
2 VALUES (14-07-1975, 1000, 'Prime de naissance');

Attention : Chaînes de caractères


- Les chaînes de caractère doivent être protégées par des apostrophes : '
- Pour insérer une apostrophe, doubler le caractère : ''

Exemple
1 INSERT INTO livre (titre) VALUES ('L''Attrape-cœurs')

Attention : Dates
La saisie des dates peut se faire de plusieurs façons dépendante du SGBD, la méthode la plus systématique consiste à utiliser la fonction
TO_DATE(chaîne,format) où la chaîne de caractère respecte le format.
Par exemple TO_DATE('20170330','YYYYMMDD') ou TO_DATE('30-03-2017','DD-MM-
YYYY') désignent tous les deux le 30 mars 2017.

Exemple
1 INSERT INTO livre (pubdate) VALUES (TO_DATE('20170330','YYYYMMDD'))

Exercices //Solutions
1. Du producteur au consommateur
Producteur_consommateur :
Soit le modèle relationnel suivant :

9
1 Producteur(#raison_sociale:chaîne(25), ville:chaîne(255))

2 Consommateur(#login:chaîne(10), #email:chaîne(50), nom:chaîne(50),prenom:chaîne (50), ville:chaîne(255))

3 Produit(#id:entier, description:chaîne(100), produit-par=>Producteur, consomme-


par-login=>Consommateur, consomme-par-email=>Consommateur)

On ajoute que :
1 (nom,prenom,ville) est une clé candidate de Consommateur
2 Tous les produits sont produits
3 Tous les produits ne sont pas consommés
Question :
Insérez les données dans votre base de données correspondant aux assertions suivantes :
- L'entreprise de Compiègne "Pommes Picardes SARL" a produit 4 lots de pommes, et 2 lots de cidre.
- Il existe trois utilisateurs consommateurs dans la base, donc les adresses mails sont
: Al.Un@compiegne.fr - Bob.Deux@compiegne.fr - Charlie.Trois@compiegne.fr
Ce sont des employés de la ville de Compiègne qui habitent cette ville. Leur mail est construit sur le
modèle Prenom.Nom@compiegne.fr. Leur login est leur prénom.

Modifiez les données de votre base de données pour intégrer les assertions suivantes :
- 1 lots de pommes a été consommés par Al Un.
- 2 lots de pomme ont été consommé par Bob Deux.
- Tous les lots de cidre ont été consommés par Al Un.

Solution
1 CREATE TABLE Producteur (
2 raison_sociale VARCHAR (25),
3 ville VARCHAR(255),
4 PRIMARY KEY (raison_sociale)
5 );
6
7 CREATE TABLE Consommateur (
8 login VARCHAR(10),
9 email VARCHAR(50),
10 nom VARCHAR(50) NOT NULL,
11 prenom VARCHAR(50) NOT NULL,
12 ville VARCHAR(255) NOT NULL,
13 PRIMARY KEY (login,email),
14 UNIQUE (nom,prenom,ville)
15 );
16
17 CREATE TABLE Produit (
18 id INTEGER,
19 description VARCHAR(100),
20 produit_par VARCHAR(25) NOT NULL,
21 consomme_par_login VARCHAR(10),
22 consomme_par_email VARCHAR(50),
23 PRIMARY KEY (id),
24 FOREIGN KEY (produit_par) REFERENCES Producteur(raison_sociale),
25 FOREIGN KEY (consomme_par_login,consomme_par_email) REFERENCES Consommateur(login, email)
26 );
Insertion du Producteur :
INSERT INTO Producteur (raison_sociale, ville)

10
VALUES ('Pommes Picardes SARL', 'Compiègne'); 5

Insertion des produits


INSERT INTO Produit (id, description, produit_par)
VALUES (1, 'Lot de pommes', 'Pommes Picardes SARL');
INSERT INTO Produit (id, description, produit_par)
VALUES (2, 'Lot de pommes', 'Pommes Picardes SARL');
INSERT INTO Produit (id, description, produit_par)
VALUES (3, 'Lot de pommes', 'Pommes Picardes SARL');
INSERT INTO Produit (id, description, produit_par) VALUES (4, 'Lot de pommes', 'Pommes Picardes SARL');
INSERT INTO Produit (id, description, produit_par) VALUES (5, 'Lot de cidre', 'Pommes Picardes SARL');
INSERT INTO Produit (id, description, produit_par) VALUES (6, 'Lot de cidre', 'Pommes Picardes SARL');
Insertion des consommateurs
INSERT INTO Consommateur (login, email, nom, prenom, ville)
VALUES ('Al', 'Al.Un@compiegne.fr', 'Un', 'Al', 'Compiègne');
INSERT INTO Consommateur (login, email, nom, prenom, ville)
VALUES ('Bob', 'Bob.Deux@compiegne.fr', 'Deux', 'Bob', 'Compiègne');
INSERT INTO Consommateur (login, email, nom, prenom, ville)
VALUES ('Charlie', 'Charlie.Trois@compiegne.fr', 'Trois', 'Charlie', 'Compiègne');

1 UPDATE produit
2 SET consomme_par_login='Al', consomme_par_email='Al.Un@compiegne.fr'
3 WHERE id=1;
4
5 UPDATE produit
6 SET consomme_par_login='Bob', consomme_par_email='Bob.Deux@compiegne.fr'
7 WHERE id=2 OR id=3;
8
9 UPDATE produit
10 SET consomme_par_login='Al', consomme_par_email='Al.Un@compiegne.fr'
11 WHERE description='Lot de cidre';

1 DELETE FROM consommateur


WHERE login='Charlie' AND email='Charlie.Trois@compiegne.fr';

2. Médicament :

1 Medicament (#nom:varchar, description:varchar, description_longue:varchar, conditionnement:number)


2 Contre_indication(#code:varchar, description:varchar, medicament=>Medicament)

1 CREATE TABLE Medicament (


2 nom varchar,
3 description varchar,
4 description_longue varchar,
5 conditionnement integer,
6 PRIMARY KEY (nom)
7 );
8
9 CREATE TABLE Contre_indication (
10 code varchar,
11 description varchar,
12 medicament varchar,
13 PRIMARY KEY (code),
14 FOREIGN KEY (medicament) REFERENCES Medicament (nom)
15 );

11
1INSERT INTO Medicament (nom,description,description_longue,conditionnement)
3 VALUES ('Chourix','Médicament contre la chute des choux','Vivamus...',13);

3 INSERT INTO Contre_indication (code,description,medicament)


4 VALUES ('CI1','Ne jamais prendre après minuit','Chourix');

5 INSERT INTO Contre_indication (code,description,medicament)


8 VALUES ('CI2','Ne jamais mettre en contact avec de l''eau','Chourix');

9 INSERT INTO Medicament (nom,description,description_longue,conditionnement)


10 VALUES ('Tropas','Médicament contre les dysfonctionnements intellectuels', 'Suspendisse...',42);

11 INSERT INTO Contre_indication (code,description,medicament)


12 VALUES ('CI3','Garder à l''abri de la lumière du soleil','Tropas');

3. Spectacle :

- sur SPECTACLES :
- le nom d'un spectacle est non nul,
- la durée d'un spectacle est comprise entre 60 minutes et 240 minutes,
- sur SALLES :
- la capacité d'une salle est comprise entre 100 et 500 places.
- sur REPRESENTATION :
- le prix d'une représentation est compris entre (5 000 et 10 000 FCFA,
- certaines dates peuvent être interdites (le premier mai par exemple).

Solution :
1 CREATE TABLE SPECTACLE (
2 nospectacle integer,
3 nom varchar(30) NOT NULL,
4 duree integer,
5 type char(7),
6 PRIMARY KEY (nospectacle),
7 CHECK (duree>60 and duree<240),
8 CHECK (type in ('théâtre', 'danse', 'concert'))
9 );

1 CREATE TABLE SALLE (


2 nosalle integer,
3 nbplaces integer,
4 PRIMARY KEY (nosalle),
5 CHECK (nbplaces>100 and nbplaces<500)
6 );
7 CREATE TABLE REPRESENTATION (
8 nospectacle integer,
9 nosalle integer,
10 date date,
11 prix decimal(3,2),
12 PRIMARY KEY (nosalle, date, nospectacle),
13 FOREIGN KEY (nospectacle) REFERENCES SPECTACLE(nospectacle),
14 FOREIGN KEY (nosalle) REFERENCES SALLE(nosalle),
CHECK (prix>5000 and prix<10000)

12
15 );

TAF : Créer des tables et insérer des données !

13

Vous aimerez peut-être aussi