Sie sind auf Seite 1von 10

L3-Informatique Paris 8

Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

Langage SQL : crer et interroger une base


Dans ce chapitre, nous revenons sur les principales requtes de cration de table et
daccs aux donnes. Nous verrons aussi quelques fonctions dagrgation (MAX, SUM,
COUNT, ..). Nous revenons pour finir sur les oprations de lalgbre relationnelle et les
traduisons en requtes SQL.
Avant daborder la cration et dinterrogation des tables avec la commande SELECT,
nous prsentons quelques rgles dcritures en SQL.
Nommage des objets en SQL
Un nom dobjet (table, base, colonne contrainte, vue, etc) doit avoir les
caractristiques suivantes :
- Ne pas dpasser 128 caractres
- Commencer par une lettre
- Etre compos de lettre, de chiffre, du caractre _
- Ne pas tre un mot rserv en SQL { moins dtre mis entre guillemets
- Pas de caractres accentus
Il faut noter que les noms dobjets sont insensibles { la casse. Voici quelques
exemples de noms bien et mal forms :
valable
T_CLIENT
Xyz
IBM_COM
SELECT
CLI_NUM
MS_sql_Server

Interdit
T CLIENT
_XyZ_
Ibm.com
SELECT
CLI#
Microsoft/SQLserver

Remarque : une bonne habitude consiste donner un nom pertinent aux objets des
bases de donnes.
Commentaires
Les commentaires en mysql secrivent { la manire C :
/* mon commentaire
sur
plusieurs lignes */
Mais un commentaire sur une seule lignes est introduit par : ou #. Mais pour
viter toute confusion du caractre avec des oprations mathmatiques avec
le -, prfrez le # pour vos commentaires sur une seule ligne.

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

1. CREATE TABLE
La syntaxe de cration 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 dintgrit sur les colonnes de tables

Les contraintes dintgrits permettent aux SGBD-R de garantir la cohrence des


donnes lorsque ces dernires sont mises jour. Ces contraintes correspondent des
contraintes du monde rel que la base de donnes cherche reprsenter. Comme par
exemple, le nom dun mois doit tre une chaine de caractres, ou lge un nombreIl y
aussi les cls primaires et cls trangres, mais aussi bien dautres contraintes que les
bases de donnes peuvent exprimer. Ainsi si une mise jour viole une de ces
contraintes, elle sera alors tout simplement rejete.

Contraintes de domaine

On entend par domaine le type des attributs dune table.


Il ne peut y avoir de comparaison entre deux valeurs dattributs si ces derniers ne sont
pas dfinit sur le mme domaine. Le SGBD-R se charge de vrifier la validit des valeurs
dattributs.
Un enregistrement ne peut tre insr dans une table que si chaque champ de
lenregistrement vrifie la contrainte dintgrit 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 crer cette table est :
CREATE TABLE cours (
Intitule VARCHAR,
NbEtudiants INTEGER) ;

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

Contrainte de non nullit (NOT NULL)

La contrainte de non nullit impose que la valeur dun attribut soit renseigne (la valeur
du champ ne peut tre NULL). Prenons pour exemple, la colonne intitule de la table
cours. Il est cohrent dimposer que lintitul soit toujours renseign.
Ainsi la commande de cration de la table devient :
CREATE TABLE cours (
Intitule VARCHAR NOT NULL,
NbEtudiants INTEGER) ;

Contrainte de vrification (CHECK)

La contrainte de vrification est une contrainte qui permet de spcifier que la valeur
dune colonne particulire doit satisfaire une expression boolenne.
Attention : si lexpression boolenne compare deux valeurs de colonnes, et que ces
dernires contiennent la valeur NULL, elles ne seront pas considres comme gales.
Par exemple le nombre dtudiants ne peut tre que suprieur { zro. La commande de
cration 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 dunicit permet de prciser les attributs cls dune table. Elle permet de
garantir que deux lignes de cette table ne peuvent en aucun cas recevoir les mmes
valeurs pour ces attributs.
Aussi, comme deux valeurs NULL ne sont pas considres 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 ncessaire daccompagner la
contrainte UNIQUE par la contrainte de non nullit lorsquil sagit de cls primaires :
UNIQUE NOT NULL.
La contrainte de cl primaire PRIMARY KEY permet justement dexprimer ces deux
contraintes (UNIQUE NOT NULL).

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

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 cration 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 dintgrit de rfrence (REFERENCES)

La contrainte dintgrit de rfrence est la contrainte de cl trangre. Elle permet de


prciser quune colonne ou groupe de colonnes correspondent aux valeurs qui
apparaissent dans les lignes dune autre table. Ce type de contrainte permet de
maintenir une intgrit entre deux tables.
Par exemple, dans lexemple de la table cours, pour prciser lenseignant qui dispense le
cours, il faut introduire une colonne id_enseignant qui fait rfrence la colonne
id_personne de la table personne.
Quand on supprime une ligne de la table personne, le SGBD doit vrifier quaucune ligne
de la table cours, par lintermdiaire de lattribut id_enseignant, na la ligne qui doit tre
supprime. Sinon (i.e. la ligne supprimer se trouve dans la table cours), trois situations
sont possibles :

la suppression est interdite dans la table matre (personne) et dans la table courante
(ici cours) o la contrainte dintgrit est dfinie 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 donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

la suppression se fait dans la table maitre (ici personne) ainsi que dans la table
courante (cours) dans laquelle la contrainte dintgrit 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 affecte dans la colonne id_enseignant pour toutes les
lignes qui vrifient lidentifiant 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 dclencheurs (TRIGGERS)

Lutilisation de dclencheurs permet de matrialiser dautres contraintes dintgrit


sous forme dune action dclenche { la survenue dun vnement. L'vnement est
gnralement une action de mise jour de la base.
Nous reviendrons sur cette notion dans le dernier chapitre du cours.

2.2.

Les contraintes dintgrit 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>)
}

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

CONSTRAINT
Cette partie optionnelle permet de donner un nom une contrainte de table. Si la
contrainte est viole, le nom de la contraint est prsent dans les messages
derreur.

PRIMARY KEY
Cette contrainte permet de spcifier une cl primaire compose de plusieurs
attributs.

FOREIGN KEY ( <nom_col> [, ])


REFRENCES <table-maitre> [ ( <nom_col_maitre> [, ]) ]
[ ON DELETE {CASCADE | SET NULL | RESTRICT} ]
Cette contrainte permet de dfinit un ensemble dattributs comme cls
trangres. Les cls de la table maitres doivent tre dfinies comme PRIMARY
KEY ou UNIQUE.

CHECK (<condition>)
Cette contrainte permet dexprimer une condition qui doit exister entre plusieurs
attributs de la ligne.

2. SELECT

2.1.

La syntaxe

Nous voyons plus en dtail la syntaxe de la commande SELECT dans cette section :
SELECT [ALL | DISTINCT] { * | <expression>[, ] }
FROM <liste des tables>
[WHERE <condition>]
[ORDER BY <expression> [ASC|DESC] [,]]
-

ALL: Permet de rcuprer toutes les lignes vrifiant la condition du WHERE,


mme si les lignes comportent des doublons. Cest le comportement du
SELECT par dfaut.

DISTINCT: Permet de rcuprer les lignes vrifiant la condition sans les


doublons.
6

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

* : Permet de rcuprer tous les champs des colonnes vrifiant la condition.

<expression> : Lexpression peut tre :


o un nom de colonne
o le rsultat dune sous-requte ne retournant quune seule ligne est une
seule colonne
Ex : SELECT * FROM (SELECT DISTINCT id_etudiant,
nom, prenom FROM personne, suivre WHERE
personne.id_personne=suivre.id_etudiant) AS
etudiant, cours WHERE
etudiant.id_etudiant=cours.id_enseignant ;
AS permet de renommer une table cre pour pouvoir ensuite u faire
rfrence. Comme ici la table etudiant a t cre partir de la sousrequte. Elle contient les colonnes id_etudiant, nom, prenom.
o le rsultat dune fonction, dune opration sur des expressions
Ex : SELECT id_etudiant, id_cours, note/2 FROM
suivre ;

<Liste des tables> : Indique lensemble des tables (spares par des ,) sur
lesquelles opre la requte.

<condition>: La condition peut contenir AND, OR, NOT


La comparaison peut se faire :
o Une valeur :
Condition = {expr1 op expr2 | expr IS NULL | expr IS NOT NULL}
O les expressions peuvent contenir : attributs, +, -, *, /
Et op peut tre : = , !=, <, >, <=, >=
o Une plage de valeurs :
Condition = {expr[NOT] BETWEEN val1 AND val2}
Ex: SELECT nom, prenom, age FROM passagers WHERE
age BETWEEN 18 AND 30;
o Une liste de valeurs :
Condition = {expr [NOT] IN (liste de valeurs)}
Ex : SELECT * FROM vols WHERE arrive IN (Londres,
Rome, Amsterdam);
o Une expression rgulire (ou filtre) :
Condition = {[colonne] [NOT]LIKE <modle de chane>}
7

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

_ remplace un caractre
% remplace une squence de longueur quelconque

Ex :
SELECT * FROM companies_aeriennes WHERE pays LIKE
F%;
SELECT * FROM passagers WHERE nom LIKE A%d% AND
prenom LIKE J__% AND adresse LIKE __Rue M%;
ORDER BY <expression>: cette clause permet de trier les lignes du
rsultat.
Ex :
SELECT id_personne, nom, prenom FROM personne ORDER
BY nom DESC, prenom DESC;
Les personnes sont affiches par ordre dcroissant de leur nom et de leur
prnom.

2.2.
Traduction des oprateurs de projection, slection, produit
cartsien et qui-jointure de lalgbre relationnelle

La projection : (A1, A2, ..,An) (relation)


SELECT DISTINCT A1, A2, An FROM relation;
Exemple :

(modele, serie) (Voiture)


SELECT DISTINCT modele, serie FROM Voiture;

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

Slection : (prdicat)(relation)
SELECT * FROM relation WHERE condition;
(compteur <100000) (Voiture)
SELECT * FROM Voiture WHERE (compteur <100000);

Ou bien on slectionne les voitures dont la marque a un e en deuxime position :


SELECT * FROM Occaz WHERE Marque LIKE _e%

Ou bien encore, on slectionne les voitures dont la marque est Peugeot ou


Ford :
SELECT * FROM Occaz WHERE Marque IN (Peugeot, Ford)

Produit cartsien : relation1 relation2


9

L3-Informatique Paris 8
Base de donnes
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Sance 7 -

SELECT * FROM relation1, relation2

Equi-jointure : relation1 (A1= A2) relation2


SELECT * FROM relation1, relation2 WHERE relation1.A1 =
relation2.A2;
SELECT * FROM relation1 JOIN relation2 ON relation1.A1 =
relation2.A2;
SELECT * FROM relation1 INNER JOIN relation2 ON
relation1.A1 = relation2.A2;
Toutes ces requtes sont quivalentes.

Jointure naturelle : relation1 (A1, A2) relation2


SELECT * FROM relation1 NATURAL JOIN relation2;
SELECT * FROM relation1 NATURAL INNER JOIN relation2;
SELECT * FROM relation1 JOIN relation2 USING (A1, A2);
SELECT * FROM relation1 INNER JOIN relation2 USING (A1,
A2);
Toutes ces requtes sont quivalentes.

Jointure : relation1 (A1=val1, A2) relation2


SELECT * FROM passagers p, reservations r, vols v WHERE
p.idP=r.idR AND r.idV = v.idV AND p.ville = Paris AND
v.arrivee = Londres;

Union : relation1 relation2


SELECT * FROM relation1 UNION SELECT * FROM relation2;

Intersection : relation1 relation2


SELECT * FROM relation1 INTERSECT SELECT * FROM
relation2;

Diffrence : relation1 - relation2


SELECT * FROM relation1 EXCEPT SELECT * FROM relation2;

10

Das könnte Ihnen auch gefallen