0% ont trouvé ce document utile (0 vote)
118 vues15 pages

Support de Cours SQL 2

Transféré par

David TCHASSO
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
118 vues15 pages

Support de Cours SQL 2

Transféré par

David TCHASSO
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 5 : Le langage SQL (Structured Query Language)

1. Définition

Le langage SQL (Structured Query Language) s’appuie sur les opérateurs de l’algèbre
relationnelle définit en 1970 par Codd, mathématicien, chercheur chez IBM. Le langage SQL
est basé sur le concept de relation de la théorie des ensembles. Il est devenu le langage
standard des systèmes de gestion de bases de données (SGBD) relationnelles SGBDR). C'est à
la fois :
 un langage de définition des données (LDD; ordres CREATE, ALTER, DROP) ;
 un langage de manipulation des données (LMD; ordres UPDATE, INSERT,
DELETE) ;
 un langage d'interrogation de la base (ordre SELECT) ;
 un langage de contrôle de l'accès aux données (LCD; ordres GRANT, REVOKE).
 le SQL intégré.
Le langage SQL est utilisé par les principaux SGBDR : ACCESS, DB2, Oracle, Informix,
Ingres, RDB,... Chacun de ces SGBDR a cependant sa propre variante du langage. Ce support
de cours présente un noyau de commandes disponibles sur l'ensemble de ces SGBDR, et leur
implantation dans ACCESS.

2. Définir une base de données : Langage de définition de données (LDD)


Le langage de définition de données (LDD, ou Data Definition Language, soit DDL en
anglais) est un langage orienté au niveau de la structure de la base de données. Le LDD
permet de créer, modifier, supprimer des objets. Il permet également de définir le domaine
des données (nombre, chaîne de caractères, date, booléen, . . .) et d’ajouter des contraintes de
valeur sur les données. Il permet enfin d’autoriser ou d’interdire l’accès aux données et
d’activer ou de désactiver l’audit pour un utilisateur donné. Les instructions du LDD sont :
CREATE, ALTER, DROP, AUDIT, NOAUDIT, ANALYZE, RENAME, TRUNCATE.
2.1 Introduction aux contraintes d’intégrité
Soit le schéma relationnel minimaliste suivant :
– ACTEURS(Num-Act, Nom, Prénom)
– JEUX(Num-Act, Num-Film)
– FILMS(Num-Film, Titre, Année)
2.1.1 Contrainte d’intégrité de domaine
Toute comparaison d’attributs n’est acceptée que si ces attributs sont définis sur le
même domaine. Le SGBD doit donc constamment s’assurer de la validité des valeurs d’un
attribut. C’est pourquoi la commande de création de table doit préciser, en plus du nom, le
type de chaque colonne.
Par exemple, pour la table Films, on précisera que le Titre est une chaîne de caractères
et l’Année une date. Lors de l’insertion de n-uplets dans cette table, le système s’assurera que
les différents champs du n-uplet satisfont les contraintes d’intégrité de domaine des attributs
précisées lors de la création de la base. Si les contraintes ne sont pas satisfaites, le n-uplet
n’est, tout simplement, pas inséré dans la table.
2.1.2 Contrainte d’intégrité de relation (ou d’entité)

1
Lors de l’insertion de n-uplets dans une table (i.e. une relation), il arrive qu’un
attribut soit inconnu ou non défini. On introduit alors une valeur conventionnelle notée
NULL et appelée valeur nulle. Cependant, une clé primaire ne peut avoir une valeur nulle.
De la même manière, une clé primaire doit toujours être unique dans une table. Cette
contrainte forte qui porte sur la clé primaire est appelée contrainte d’intégrité de relation.
Tout SGBD relationnel doit vérifier l’unicité et le caractère défini (NOT NULL) des valeurs
de la clé primaire.
2.1.3 Contrainte d’intégrité de référence
Dans tout schéma relationnel, il existe deux types de relation :

– les relations qui représentent des entités de l’univers modélisé ; elles sont qualifiées
de statiques, ou d’indépendantes ; les relations Acteur et Film en sont des exemples ;

– les relations dont l’existence des n-uplets dépend des valeurs d’attributs situées
dans d’autres relations ; il s’agit de relations dynamiques ou dépendantes ; la relation
Jouer en est un exemple. Lors de l’insertion d’un n-uplet dans la relation Jouer, le
SGBD doit vérifier que les valeurs Num-Act et Num-Film correspondent bien,
respectivement, à une valeur de Num-Act existant dans la relation Acteurs et une
valeur Num-Film existant dans la relation Films.

Lors de la suppression d’un n-uplet dans la relation Acteurs, le SGBD doit vérifier
qu’aucun n-uplet de la relation Jeux ne fait référence, par l’intermédiaire de l’attribut Num-
Act, au n-uplet que l’on cherche à supprimer. Le cas échéant, c’est-à-dire si une, ou plusieurs,
valeur correspondante de Num Act existe dans Jeux, quatre possibilités sont envisageables :
– interdire la suppression ;
– supprimer également les n-uplets concernés dans Jouer ;
– avertir l’utilisateur d’une incohérence ;
– mettre les valeurs des attributs concernés à une valeur nulle dans la table Jouer, si
l’opération est possible (ce qui n’est pas le cas si ces valeurs interviennent dans une
clé primaire) ;

2.2 Créer une table : CREATE TABLE


Une table est un ensemble de lignes et de colonnes. La création consiste à définir (en
fonction de l’analyse) le nom de ces colonnes, leur format (type), la valeur par défaut à la
création de la ligne (DEFAULT). Les règles de gestion s’appliquant à la colonne
(CONSTRAINT). La commande de création de table la plus simple ne comportera que le
nom et le type de chaque colonne de la table. A la création, la table sera vide, mais un certain
espace lui sera alloué. La syntaxe est la suivante :
CREATE TABLE nom_table (nom_col1 TYPE1, nom_col2 TYPE2, ...)
Quand on crée une table, il faut définir les contraintes d’intégrité que devront
respecter les données que l’on mettra dans la table.
2.2.1 Les types de données
Les types de données peuvent être :
INTEGER : Ce type permet de stocker des entiers signés codés sur 4 octets.
BIGINT : Ce type permet de stocker des entiers signés codés sur 8 octets.
REAL : Ce type permet de stocker des réels comportant 6 chiffres significatifs codés sur 4
octets.

2
DOUBLE PRECISION : Ce type permet de stocker des réels comportant 15 chiffres
significatifs codés sur 8 octets.
NUMERIC [(précision, [longueur])] : Ce type de données permet de stocker des données
numériques à la fois entières et réelles avec une précision de 1000 chiffres significatifs.
longueur précise le nombre maximum de chiffres significatifs stockés et précision donne le
nombre maximum de chiffres après la virgule.
CHAR (longueur) : Ce type de données permet de stocker des chaînes de caractères de
longueur fixe. La longueur doit être inférieur à 255, sa valeur par défaut est 1.
VARCHAR (longueur) : Ce type de données permet de stocker des chaînes de caractères de
longueur variable. La longueur doit être inférieur à 2000, il n’y a pas de valeur par défaut.
DATE : Ce type de données permet de stocker des données constituées d’une date.
TIMESTAMP : Ce type de données permet de stocker des données constituées d’une date et
d’une heure.
BOOLEAN : Ce type de données permet de stocker des valeurs Booléenne.
MONEY : Ce type de données permet de stocker des valeurs monétaires.
TEXT : Ce type de données permet des stocker des chaînes de caractères de longueur
variable.

2.2.2 Création avec Insertion de données


On peut insérer des données dans une table lors de sa création par la commande
suivante : CREATE TABLE nom_table [(nom_col1, nom_col2, ...)] AS SELECT ...

On peut ainsi, en un seul ordre SQL créer une table et la remplir avec des données
provenant du résultat d’un SELECT. Si les types des colonnes ne sont pas spécifiés, ils
correspondront à ceux du SELECT. Il en va de même pour les noms des colonnes. Le
SELECT peut contenir des fonctions de groupes mais pas d’ORDER BY car les lignes d’une
table ne peuvent pas être classées.
2.2.3 Contraintes d’intégrité
A la création d’une table, les contraintes d’intégrité se déclarent de la façon suivante :
CREATE TABLE nom_table (
nom_col_1 type_1 [CONSTRAINT nom_1_1] contrainte_de_colonne_1_1
[CONSTRAINT nom_1_2] contrainte_de_colonne_1_2
... ...
[CONSTRAINT nom_1_m] contrainte_de_colonne_2_m,
nom_col_2 type_2 [CONSTRAINT nom_2_1] contrainte_de_colonne_2_1
[CONSTRAINT nom_2_2] contrainte_de_colonne_2_2
... ...
[CONSTRAINT nom_2_m] contrainte_de_colonne_2_m,
...
nom_col_n type_n [CONSTRAINT nom_n_1] contrainte_de_colonne_n_1
[CONSTRAINT nom_n_2] contrainte_de_colonne_n_2
... ...
[CONSTRAINT nom_n_m] contrainte_de_colonne_n_m,
[CONSTRAINT nom_1] contrainte_de_table_1,
[CONSTRAINT nom_2] contrainte_de_table_2,
... ...
[CONSTRAINT nom_p] contrainte_de_table_p
)

3
2.2.3.1 Contraintes de colonne
Les différentes contraintes de colonne que l’on peut déclarer sont les suivantes :
NOT NULL ou NULL : Interdit (NOT NULL) ou autorise (NULL) l’insertion de valeur
NULL pour cet attribut.

UNIQUE : Désigne l’attribut comme clé secondaire de la table. Deux n-uplets ne peuvent
recevoir des valeurs identiques pour cet attribut, mais l’insertion de valeur NULL est
toutefois autorisée. Cette contrainte peut apparaître plusieurs fois dans l’instruction.

PRIMARY KEY : Désigne l’attribut comme clé primaire de la table. La clé primaire étant
unique, cette contrainte ne peut apparaître qu’une seule fois dans l’instruction. La définition
d’une clé primaire composée se fait par l’intermédiaire d’une contrainte de table. En fait, la
contrainte PRIMARY KEY est totalement équivalente à la contrainte UNIQUE NOT NULL.

REFERENCES table [(colonne)] [ON DELETE CASCADE] : Contrainte d’intégrité


référentielle pour l’attribut de la table en cours de définition. Les valeurs prises par cet
attribut doivent exister dans l’attribut colonne qui possède une contrainte PRIMARY KEY ou
UNIQUE dans la table table. En l’absence de précision d’attribut colonne, l’attribut retenu est
celui correspondant à la clé primaire de la table table spécifiée.

CHECK (condition) : Vérifie lors de l’insertion de n-uplets que l’attribut réalise la condition
condition.

DEFAULT valeur : Permet de spécifier la valeur par défaut de l’attribut.

2.2.3.2 Contraintes de table


Les différentes contraintes de table que l’on peut déclarer sont les suivantes :
PRIMARY KEY (colonne, ...) : Désigne la concaténation des attributs cités comme clé
primaire de la table. Cette contrainte ne peut apparaître qu’une seule fois dans l’instruction.

UNIQUE (colonne, ...) : Désigne la concaténation des attributs cités comme clé secondaire de
la table. Dans ce cas, au moins une des colonnes participant à cette clé secondaire doit
permettre de distinguer le n-uplet. Cette contrainte peut apparaître plusieurs fois dans
l’instruction.

FOREIGN KEY (colonne, ...) REFERENCES table [(colonne, ...)]


[ON DELETE CASCADE | SET NULL] : Contrainte d’intégrité référentielle pour un
ensemble d’attributs de la table en cours de définition. Les valeurs prises par ces attributs
doivent exister dans l’ensemble d’attributs spécifié et posséder une contrainte PRIMARY
KEY ou UNIQUE dans la table table.

CHECK (condition) : Cette contrainte permet d’exprimer une condition qui doit exister entre
plusieurs attributs de la ligne.

Les contraintes de tables portent sur plusieurs attributs de la table sur laquelle elles
sont définies. Il n’est pas possible de définir une contrainte d’intégrité utilisant des attributs
provenant de deux ou plusieurs tables. Ce type de contrainte sera mis en œuvre par
l’intermédiaire de déclencheurs de base.

4
2.2.3.3 Complément sur les contraintes
ON DELETE CASCADE : Demande la suppression des n-uplets dépendants, dans la table en
cours de définition, quand le n-uplet contenant la clé primaire référencée est supprimé dans
la table maître.

ON DELETE SET NULL : Demande la mise à NULL des attributs constituant la clé étrangère
qui font référence au n-uplet supprimé dans la table maître.

La suppression d’un n-uplet dans la table maître pourra être impossible s’il existe des
n-uplets dans d’autres tables référençant cette valeur de clé primaire et ne spécifiant pas
l’une de ces deux options.

2.2.4 Supprimer une table : DROP TABLE


Supprimer une table revient à éliminer sa structure et toutes les données qu’elle
contient. Les index associés sont également supprimés.
La syntaxe est la suivante : DROP TABLE nom_table

2.2.5 Modifier une table : ALTER TABLE


Ajout ou modification de colonnes :

ALTER TABLE nom_table {ADD/MODIFY} ([nom_colonne type [contrainte], ...])

2.2.6 Renommer une colonne

ALTER TABLE nom_table RENAME COLUMN ancien_nom TO nouveau_nom

2.2.7 Renommer une table


ALTER TABLE nom_table RENAME TO nouveau_nom

3. Modifier une base de données – Langage de manipulation de données (LMD)


3.1 Insertion de n-uplets : INSERT INTO
La commande INSERT 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 ...
Le SELECT peut contenir n’importe quelle clause sauf un ORDER BY
3.2 Modification de n-uplets : UPDATE : 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 :

5
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 predicat. 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.

3.3 Suppression de n-uplets : DELETE


La commande DELETE permet de supprimer des lignes d’une table. La syntaxe est la
suivante :
DELETE FROM nom_table
WHERE predicat

Toutes les lignes pour lesquelles predicat est évalué à vrai sont supprimées. En
l’absence de clause WHERE, toutes les lignes de la table sont supprimées.

4 Interroger une base de données : Langage de manipulation de données (LMD) :


La commande SELECT constitue, à elle seule, le langage permettant d’interroger une
base de données. Elle permet de :
– sélectionner certaines colonnes d’une table (projection) ;
– sélectionner certaines lignes d’une table en fonction de leur contenu (sélection) ;
– combiner des informations venant de plusieurs tables (jointure, union, intersection,
différence et division) ;
– combiner entre elles ces différentes opérations.

Une requête (i.e. une interrogation) est une combinaison d’opérations portant sur des
tables (relations) et dont le résultat est lui-même une table dont l’existence est éphémère (le
temps de la requête).
La structure d'une requête est la suivantes:
SELECT [ALL | DISTINCT] {* | attribut [,…] }
FROM nom_table [,…]
[WHERE condition]
– la clause SELECT permet de spécifier les attributs que l’on désire voir apparaître dans le
résultat de la requête ; le caractère étoile (*) récupère tous les attributs de la table générée par
la clause FROM de la requête ;
– la clause FROM spécifie les tables sur lesquelles porte la requête ;
– la clause WHERE, qui est facultative, énonce une condition que doivent respecter les n-
uplets sélecTionnés.

De manière synthétique, on peut dire que la clause SELECT permet de réaliser la


projection, la clause FROM le produit cartésien et la clause WHERE la sélection.
4.1 Passage de l’algèbre relationnelle au LMD

6
4.1.1 SQL / Algèbre … Sélection
Exemple : Soit la table PAYS ayant les informations suivantes :
PAYS
Nom Capitale Population Surface
Cameroun Yaoundé 78 83
Gabon Libreville 37 50
Côte d’Ivoire Yamoussoukro 100 90
France Paris 200 150
Bénin Cotonou 29 45

Affichons tous les pays de population inférieure à 100


En Algègre : [population < 100]PAYS
EN SQL : SELECT *
FROM PAYS
WHERE population < 100 ;

Le résultat donne la table ci-après :

TABLE
RESULTAT
Nom Capitale Population Surface
Cameroun Yaoundé 78 83
Gabon Libreville 37 50
Bénin Cotonou 29 45

4.1.2 SQL / Algèbre … Projection

Exemple : Affichage du nom et de la capitale des pays


TABLE
En SQL : En Algèbre : RESULTAT
SELECT nom, capitale [nom, capitale]PAYS Nom Capitale
FROM Pays; Cameroun Yaoundé
Gabon Libreville
4.1.3 : Combinaison Projection – sélection Côte d’Ivoire Yamoussoukro
France Paris
Bénin Cotonou

7
Exemple :
SQL :
SELECT nom, capitale, population TABLE
FROM Pays RESULTAT
WHERE population < 100 Nom Capitale Population
Cameroun Yaoundé 78
Algèbre : Gabon Libreville 37
π [nom, capitale, population] (σ [population < 100] Bénin Cotonou 29
Pays)

4.1.4 SQL / Algèbre … Produit cartésien

4.1.5 SQL / Algèbre … Jointure


En algèbre :
R*S
En SQL :
SELECT *
FROM R, S
WHERE R.A1 = S.A1
AND R.A2 = S.A2

AND R.An = S.An
Avec A1, …, An tous les attributs communs à R et S

Exemple : Soit la table CAN ayant les informations suivantes :


CAN
Année Lieu Pays
2000 Douala Cameroun
2002 Libreville Gabon
2004 Abidjan Côte
d’Ivoire
2006 Bata Guinnée
2008 Cotonou Bénin
La requête SQL ci-après donne l’année, le lieu, le pays ainsi que la capitale des pays ayant
organisés la coupe d’afrique des nations. Il faudrait que le nom d’un pays se retrouve dans
les deux tables (CAN et PAYS)
Table
SELECT année, lieu, pays, capitale
Résultat
FROM CAN, PAYS
Année Lieu Pays capitale
WHERE CAN.pays = PAYS.nom;
2000 Douala Cameroun Yaoundé
2002 Libreville Gabon Libreville
2004 Abidjan Côte Yamoussoukro
d’Ivoire
2008 Cotonou Bénin Cotonou

8
4.1.5.1 Jointure sur la même table
Comment comparer les populations des pays? Toutes les paires de pays telles que le premier
pays a une population plus grande que le deuxième pays :

SELECT P1.nom, P1.population, P2.nom, P2.population


FROM PAYS as P1, PAYS as P2
WHERE P1.population > P2.population;

NB: La table PAYS est renommée en P1 et P2 (alias)

4.1.6 SQL / Algèbre … union

4.1.7 SQL / Algèbre … intersection

4.1.8 SQL / Algèbre … différence

Quelques Différences
En SQL :
– Le résultat d'une requête peut contenir plusieurs occurrences d’un n-uplet. Pour avoir une
seule occurrence de chaque n-uplet dans une relation, on utilise : DISTINCT
Exemple : select distinct nom
from Personnes
– Le résultat d'une requête peut être trié,
– Il existe une valeur spéciale dite indéfinie (NULL) utilisée pour remplir un champ dont on
ne connaît pas la valeur.

9
Note : En SQL, si plusieurs attributs ont le même nom, pour résoudre l’ambiguïté, on spécifie
la relation auquel l’attribut appartient.
Example: select A, R.B, C
From R, S

4.1.9 Ecriture des conditions


4.1.9.1 Opérateurs de comparaison

4.1.9.2 Opérateurs logiques

4.1.9.3 Appartenance à un ensemble: IN


WHERE monnaie = ‘Euro’ OR
monnaie = ‘Yen’ OR
monnaie = ‘Franc’
Équivalent à:
WHERE monnaie IN (‘Euro’, ‘Yen’,‘Franc’)

NOT IN: non appartenance à un ensemble


4.1.9.4 Comparaison à un ensemble: ALL
SELECT * FROM Employé
WHERE salary >= 1400
AND salary >= 3000;
Équivalent à:
SELECT * FROM Employee
WHERE salary >= ALL (1400, 3000);

4.1.9.5 Valeur dans un intervalle: BETWEEN (NOT BETWEEN)


WHERE population >= 50 AND population <= 60
Équivalent à:
WHERE population BETWEEN 50 AND 60

4.1.9.6 Conditions partielles

10
4.1.9.7 Valeurs calculées
SELECT nom, population, surface
FROM PAYS
WHERE (population * 1000 / surface) < 50

SELECT nom, (population * 1000 / surface)


FROM PAYS

Valeurs numériques: + - * /
Chaines de caractères: ¦¦

4.1.9.8 Valeur inconnue ou non définie: NULL


SELECT nom
FROM PAYS
WHERE population IS NULL

En résultat, on affiche les pays dont on n’a pas entré la valeur de population s’ils existent.

4.1.10 Requêtes avec blocs emboîtés


Exemple : BD Livraisons
P ( np , nomp , couleur , poids , prix ) les produits
U ( nu , nomu , ville , pays ) les usines
F ( nf , nomf , type , ville , pays ) les fournisseurs
PUF ( np, nu, nf , quantité ) les livraisons
np, nu, nf dans PUF sont des identifiants externes sur P, U et F (respectivement)

4.1.10.1 Jointure par blocs emboîtés : IN (∈)


Nom et couleur des produits livrés par le fournisseur 1

Solution 1 : la jointure déclarative


SELECT nomp, couleur
FROM P, PUF
WHERE PUF.np = P.np AND nf = 1;

Solution 2 : la jointure procédurale (par emboîtement)


SELECT nomp, couleur
FROM P
WHERE np IN
(SELECT np

11
FROM PUF
WHERE nf = 1);

4.1.10.2 Quantificateur ANY


Ex1: Numéro des fournisseurs de produits rouges

SELECT nf
FROM PUF
WHERE np = ANY (SELECT np FROM P
WHERE couleur = ‘rouge’);
Equivalent au IN: Existe t'il dans l'ensemble au moins un élément qui vérifie la condition?

Ex2 : Numéro des fournisseurs fournissant des produits dont le numéro est inférieur au
numéro des produits pesant plus d’une tonne
SELECT nf
FROM PUF
WHERE np < ANY (SELECT np FROM P
WHERE poids > 1000) ;

4.1.10.3 Conditions sur des ensembles: EXISTS

4.1.11 Fonctions sur des colonnes


Attributs calculés
– Ex: SELECT nom, population*1000/surface FROM PAYS

Opérateurs sur attributs numériques


– SUM: somme des valeurs des tuples sélectionnés
– AVG: moyenne

Opérateurs sur tous types d’attributs


– MIN: minimum
– MAX: maximum
– COUNT: nombre de tuples sélectionnés

12
Exemple :

13
Partition de l’ensemble des tuples en groupes homogènes :

SELECT continent, MIN (population), MAX (population), AVG (population), SUM


(surface), COUNT(*)
FROM PAYS
GROUP BY continent ;

Condition HAVING
SELECT … FROM … WHERE … GROUP BY … HAVING <condition>

Partition de l’ensemble des tuples en groupes homogènes

SELECT continent, SUM (population)


FROM PAYS
GROUP BY continent
HAVING SUM (surface) > 439;

Attention ! la condition ne porte pas sur chaque tuple de la table comme pour le where mais
sur l’ensemble des tuples d’un groupe: On retourne la population totale par continent, tel
que chaque continent a une superficie > 439

14
Bibliographie
Akoka, J. & Comyn-Wattiau, I. (2001). Conception des bases de données relationnelles.
Vuibert informatique.

Bourda, Y. (2005b). Systèmes de Gestion de Bases de Données Relationnelles. (http ://


wwwlsi.supelec.fr/www/ yb/ poly_bd/ poly.html).

Crescenzo, P. (2005). Un support de cours magistraux de Bases de données. (http ://


www.crescenzo.nom.fr/CMBasesDeDonnees).

Date, C. (2000). Introduction aux bases de données. Vuibert.

Dionisi, D. (1993). L’essentiel sur merise. Eyrolles.

Gabillaud, J. (2004). SQL et algèbre relationnelle - Notions de base. ENI.

Gruau, C. (2006). Conception d’une base de données. (http :// cyril-gruau.developpez.com/


uml/ tutoriel/Conception BD/).

Petrucci, L. (2006). Base de données. Présentation projetée et travaux dirigés. (IUT GTR
Villetaneuse)

Saglio, J.-M. (2002). Dominante informatique : Module bases de données. (http ://
www.bd.enst.fr/dombd.html).

SQL Anywhere Studio. (2005a). ASA - Guide de programmation : Programmation avec


Embedded SQL. (http :// www.ianywhere.com/ developer/ product_manuals/
sqlanywhere/ 0901/ fr/ html/ dbpgfr9/00000171.htm).

SQL Anywhere Studio. (2005b). ASA - Guide de programmation: Utilisation de SQL dans les
applications. (http :// www.ianywhere.com/ developer/ product_manuals/ sqlanywhere/
0901/ fr/ html/ dbpgfr9/00000018.htm).

15

Vous aimerez peut-être aussi