Académique Documents
Professionnel Documents
Culture Documents
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 :
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 :
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 :
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)
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
) ;
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 :
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 :
Exemple
Pour ajouter une colonne qui correspond à une rue sur une table utilisateur, il est possible d’utiliser la requête suivante :
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 :
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.
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,
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.
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),
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);
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))
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
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';
2. Médicament :
11
1INSERT INTO Medicament (nom,description,description_longue,conditionnement)
3 VALUES ('Chourix','Médicament contre la chute des choux','Vivamus...',13);
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 );
12
15 );
13