11/06/20 1
BASES DE DONNÉES
Cours 5: SQL
Dr. Aïcha BEN SALEM
11/06/20 2
Plan
1. Définition des données
2. La mise à jour des données
3. Interrogation des données
4. Le concept de vue
5. Exemples de requêtes SQL
6. Exercices SQL
3
SQL
Introduction
• SQL : Structured Query Language (Langage d’interrogation
structuré)
• Langage de gestion de bases de données relationnelles pour :
– Interroger une base de données
– Mettre à jour les informations contenues dans les tables de la base
de données (LMD : Langage de Manipulation des Données)
– Définition et Modification du schéma de la base de données (DDL :
Langage de Définition des Données)
– Gestion des droits d’accès (DCL : Langage de Contrôle de l’accès)
– Gestion de la concurrence des opérations (TCL : Langage de
contrôle des transactions)
3
4
Subdivisions du SQL
• Définition des données : DDL
• Manipulation des données : DML
• Gestion des droits d’accès : DCL
• Gestion des transactions : TCL
• Programmation dynamique.
4
5
5
SQL
TCL:
SET TRANSACTION, COMMIT, ROLLBACK
DML: DCL:
DDL:
SELECT, CONNECT,
CREATE,
INSERT, GRANT,
ALTER, UPDATE, REVOKE
DROP DELETE
Programmation SQL:
DECLARE, FETCH, PREPARE,
DESCRIBE, EXECUTE
6
SQL
SQL
• SQL est insensible à la casse (majuscule/minuscule) des
caractères.
• SQL est insensible à la césure comme à l’indentation.
• Commentaires : /* … */
• Chaîne de caractères : suite de caractères entre deux
apostrophes.
• Noms des objets : doivent commencer par une lettre et ne
contenir que des caractère de A à Z, les chiffres de 0 à 9 et le
caractère souligné _. (norme : max = 128 caractères) .
• Liste : la virgule est utilisée comme séparateur pour les
éléments de la liste.
6
7
7
Types de de
Type données
données
Type SQL
Chaîne de Temporels Nombres Chaînes
caractères de bits
DATE TIME
REELS ENTIERS BIT
ASCII TIMESTAMP
BIT VARYING
EXACT INTEGER
UNICODE
CHAR SMALLINT
DECIMAL
VARCHAR NCHAR APPROCHES
NCHAR VARYING
REAL FLOAT
DOUBLE PRECISION 8
8
Type alphanumérique
• ASCII :
– CHARACTER(N) :CHAR(N)
– CHARACTER VARYING(N): VARCHAR(N)
• UNICODE :
– NATIONAL CHARACTER(N) : NCHAR(N)
– NATIONAL CHARACTER VARYING(N) :
• NCHAR VARYING(N)
• Exemples : nom char(32)
adresse varchar(3200)
Attention : Les types CHAR(N) et NCHAR(N) complètent les
données par des blancs si la taille réelle est inférieure à N
8
9
Type numérique
9
10
Type numérique
2. Réels :
• DECIMAL(N, M) : DEC, NUMERIC
• Valeurs décimales exactes
• FLOAT(N, M) :
• Réel représenté sous forme binaire.
• REAL(N, M) :
• Réel plus petit que float en nombre de bits (moins de
précision)
• DOUBLE PRECISION(N, M) :
• Réel plus grand que float en nombre de bits
• Exemple :
• solde NUMERIC (15, 2)
• 15 chiffres significatifs dont 2 après la virgule
10
11
Type temporels
– DATE : date du calendrier entre le 1 janvier 1 et 31
décembre 9999.
– TIME : Temps sur 24 heures
– TIMESTAMP : DATE + TIME.
– INTERVAL : Durée
• Exemples :
date_naiss DATE
format iso : ‘aaaa-mm-jj’
heure_depart TIME
format iso : ‘hh:mm:[Link]’
Arrive TIMESTAMP
format iso :’aaaa-mm-jj hh:mm:[Link]’
11
12
Type BLOB
• BLOB : Binary Large OBjects
• Famille de type :
– Image
– Son
– Vidéo
• – …
12
11/06/20
13
1. La définition des données
1.1. Création des tables
La création de la Base de Données (BD) se fait simplement
en créant les tables qui la composent.
Il n’est pas nécessaire d’attribuer un nom à un ensemble de
tables.
Le rôle de l’administrateur de la BD (DBA) est de créer :
- l’espace physique nécessaire pour stocker toutes les
tables de tous les utilisateurs CREATE TABLESPACE ;
- tous les utilisateurs avec la commande CREATE USER …
11/06/20
14
1.1. Création des tables (suite)
La création de la structure de nouvelles tables se fait par l'ordre suivant :
CREATE TABLE <Nom_de_la_table>
(
<Nom_de_l'attribut1> <Domaine_de_définition> [<Contrainte>]
[<Valeur_par_défault>]
[ ,(<Nom_de_l'attribut2> <Domaine_de_définition> [<Contrainte>]
[<Valeur_par_défault>]
... <Nom_de_l'attributn> <Domaine_de_définition> [<Contrainte>]
[<Valeur_par_défault>] ]);
Les domaines (les types de données) les plus utilisés sont :
INTEGER/NUMBER(x) pour les entiers
DECIMAL(x,y)/NUMBER(x,y) x pour la longueur totale dont y décimales
CHAR(n)/VARCHAR(n) pour les chaines de caractères de longueur n
DATE de la forme jj/mm/aa ou jj-MMM-aa
15
1.1. Création des tables (suite)
Les contraintes d’intégrité
• Le contrôle de la validité des données se fait par
la définition de contraintes.
• Une contrainte d’intégrité est une contrainte que doivent
vérifier les données d’une table.
• Une commande est annulée par le SGBD si son
exécution viole une des contraintes.
15
16
1.1. Création des tables (suite)
Types de contraintes d’intégrité
• PRIMARY KEY : clé primaire
• FOREIGN KEY … REFERENCES : clé étrangère
• UNIQUE : 2 lignes ne peuvent avoir la même valeur
pour les colonnes spécifiées
• CHECK : contrainte de domaine, ou autre ; porte sur
une seule ligne
• 2 types de contraintes :
– contrainte de colonne (concerne une seule colonne)
– contrainte de table
16
17
1.1. Création des tables (suite)
Définition des contraintes
• Les contraintes sont définies dans les commandes
CREATE (ou ALTER) TABLE
– à l'intérieur des définitions de colonnes pour les contraintes de
colonne
– au même niveau que les définitions de colonnes pour les
contraintes de table
CONSTRAINT nomContraintedéfinitionContrainte
17
18
1.1. Création des tables (suite)
Clé primaire
• Si la clé primaire n’est formée que d’une seule colonne, le plus
simple est d’ajouter une contrainte de colonne :
CREATE TABLE Client (
nclt INTEGER CONSTRAINT PK_Client PRIMARY KEY,
…)
• Sinon, il faut ajouter une contrainte de table:
CREATE TABLE Commande(
nclt INTEGER,
nproduit INTEGER,
….,
CONSTRAINT PK_COMMANDE PRIMARY KEY (nclt, nproduit) )
18
19
1.1. Création des tables (suite)
Clé étrangère
• Si une seule colonne forme la clé étrangère, le plus simple
est d’utiliser une contrainte de colonne :
CREATE TABLE Commande (
nclt INTEGER CONSTRAINT FK_COMMANDE_Client REFERENCES Client(nclt),
nprod INTEGER CONSTRAINT FK_COMMANDE_Prod REFERENCES Prod(nprod),
…,
);
• Peut être une contrainte de table :
FOREIGN KEY (colonne1, colonne2,…)
REFERENCES table-ref [(col1, col2,…)]
CREATE TABLE COMMANDE (
nclt INTEGER,
nprod INTEGER,
…,
CONSTRAINT FK_COMMANDE_Client FOREIGN KEY (nclt) REFERENCES
Client(nclt)
…);
19
20
1.1. Création des tables (suite)
Contraintes sur les clés étrangères
• Les colonnes de l’autre table référencées (col1,col2,…)
doivent avoir la contrainte PRIMARY KEY ou
UNIQUE
20
11/06/20
21
1.1. Création des tables (suite)
Autres types de contraintes:
CHECK ( <expression bouléenne> )
Ou
CONSTRAINT <Nom_de_la_contrainte> CHECK ( <expression
bouléenne> )
CHECK ( <Nom_d’attribut> BETWEEN <Borne_Inf> AND <Borne_Sup>)
CHECK ( <Nom_d’attribut> IN (<Valeur1> , <Valeur2>, … <Valeurn>)
DEFAULT <valeur_par_défaut>
NOT NULL
11/06/20
22
1.1. Création des tables (suite)
La création de la structure de nouvelles tables se fait par l'ordre suivant, avec
la définition de la clé étrangère :
CREATE TABLE <Nom_de_la_table> (
<Nom_de_l'attribut1> <Domaine_de_définition> [<Contrainte>] [<Valeur_par_défault>]
[ ... <Nom_de_l'attributn> <Domaine_de_définition> [<Contrainte>] [<Valeur_par_défault>] ],
PRIMARY KEY (<Le_ou_les_attributs_de_la_clé_primaire>) ,
FOREIGN KEY (<Le_ou_les_attributs_de_la_clé_étrangère>) REFERENCES <Nom_table> );
CREATE TABLE <Nom_de_la_table> (
<Nom_de_l'attribut1> <Domaine_de_définition> [<Contrainte>] [<Valeur_par_défault>]
[ ,(<Nom_de_l'attribut2> <Domaine_de_définition> [<Contrainte>] [<Valeur_par_défault>]
... <Nom_de_l'attributn> <Domaine_de_définition> [<Contrainte>] [<Valeur_par_défault>] ]
CONSTRAINT PK_Table PRIMARY KEY (<Le_ou_les_attributs_de_la_clé_primaire>) ,
CONSTRAINT FK_Table1_Attribut_Table2 FOREIGN KEY
(<Le_ou_les_attributs_de_la_clé_étrangère>) REFERENCES <Nom_table> );
11/06/20
23
1.1. Création des tables (suite)
Notation utilisée concernant les noms des contraintes :
- la contrainte clé primaire d’une table se nomme
pk_table
- la contrainte clé étrangère d’une table se nomme
fk_table1_colonne_table2
- la contrainte de validité d’une colonne se nomme
ck_ table_colonne
- la contrainte de type non nulle sur une colonne se nomme
nn_ table_colonne
- la contrainte de type unique sur une colonne se nomme
unique_ table_colonne
11/06/20
24
Exemple 1 : BD ‘Sport Activities’
SPORACT
11/06/20
25
Exemple 1 : BD ‘Sport
Activities’SPORACT
J F Les tables de la Base de Données sont décrites par les schémas
des relations ci-dessous :
J BD SporAct
CEN ð CENTRE ( NUMC, NOMC, VILC, COUTINSC )
PRO ð PROPOSE ( NUMC, SPORT )
ACT ð ACTEUR ( NUMA, PRENA, NOMA, VILA )
EST ð ESTMEMBRE ( NUMA, NUMC, DATEINSC )
PRA ð PRATIQUE ( NUMA, SPORT, NUMC )
MAT ð MATERIEL ( NUMM, LIBM, PRAM, DTAM )
INS ð INSTALLATION ( NUMM, NUMC, DTIM )
11/06/20
26
Exemple 1 : BD ‘Sport Activities’
SPORACT
11/06/20
27
Exemple 1 : BD ‘Sport Activities’
SPORACT
11/06/20
28
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table pour les centres sportifs : CENTRE
CREATE TABLE CENTRE
( NUMC VARCHAR(3),
NOMC VARCHAR(15),
VILC VARCHAR(15),
COUTINSC NUMBER(7,2) CHECK (COUTINSC > 0),
PRIMARY KEY (NUMC) ); NON !
CREATE TABLE CENTRE
( NUMC VARCHAR(3) PRIMARY KEY,
NOMC VARCHAR(15),
VILC VARCHAR(15),
COUTINSC NUMBER(7,2) CHECK (COUTINSC > 0));
11/06/20
29
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table (structure des données) pour les centres sportifs :
CENTRE
CREATE TABLE CENTRE
( NUMC VARCHAR(3), OUI !
NOMC VARCHAR(15),
VILC VARCHAR(15),
COUTINSC NUMBER(7,2),
CONSTRAINT CK_CEN_COUTINSC CHECK (COUTINSC > 0),
CONSTRAINT PK_CEN PRIMARY KEY (NUMC) );
11/06/20
30
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table pour y stocker les sports proposés par les centres
sportifs : PROPOSE
CREATE TABLE PROPOSE
( NUMC VARCHAR(3),
SPORT VARCHAR(15),
CONSTRAINT PK_PRO PRIMARY KEY (NUMC, SPORT),
CONSTRAINT FK_PRO_NUMC_CEN FOREIGN KEY (NUMC)
REFERENCES CENTRE ) ;
11/06/20
31
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table qui contiendra les adhérents des centres sportifs
qui sont des acteurs de cinéma : ACTEUR
CREATE TABLE ACTEUR
( NUMA VARCHAR(3),
PRENA VARCHAR(10),
NOMA VARCHAR(10),
VILA VARCHAR(15),
CONSTRAINT PK_ACT PRIMARY KEY (NUMA) ) ;
11/06/20
32
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table des adhérents avec comme contrainte
supplémentaire :
Le nom doit être en majuscule
CREATE TABLE ACTEUR
( NUMA VARCHAR(3),
PRENA VARCHAR(10),
NOMA VARCHAR(10),
VILA VARCHAR(15),
CONSTRAINT PK_ACT PRIMARY KEY (NUMA),
CONSTRAINT CK_ACT_NOMA CHECK (NOMA = UPPER(NOMA)),
11/06/20
33
1.2. Modification des tables
La commande ALTER TABLE permet d'ajouter/de modifier une ou
plusieurs colonnes dans une tables existante; la syntaxe est la suivante :
ALTER TABLE <nom_de_la_table> ADD/MODIFY
( <nom_de_l'attribut-1> <type_de_données>
[,( <nom_de_l'attribut-2> <type_de_données>
...( <nom_de_l'attribut-n> <type_de_données>]);
Remarques :
- Les valeurs de la nouvelle colonne sont des valeurs nulles,
- NOT NULL n'est pas autorisé dans ALTER TABLE
11/06/20
34
1.3. Destruction des tables
La commande DROP TABLE permet de supprimer une table inutilisée,
si l'utilisateur en question y est autorisé.
Lors de sa destruction, les données qu'elle contient sont perdues et ne
peuvent être restaurées.
L'ensemble des objets (index, vues, synonymes, etc…) associés à cette
table sont également supprimés.
La destruction d'une table se fait ainsi :
DROP TABLE <nom_de_la_table>;
11/06/20
35
2. La mise à jour des données
(insertion, modification, suppression)
2.1. Création des données (insertion)
L'insertion des tuples dans la BD peut se faire en utilisant la commande ci-
dessous :
INSERT INTO <nom_de_la_table>
(<nom_de_l'attribut1>, <nom_de_l'attribut2>, ... <nom_de_l'attributn>)
VALUES (valeur1, valeur2,........, valeurn);
11/06/20
36
Exemples : INSERT INTO
INSERT INTO CENTRE (NUMC, NOMC, VILC, COUTINSC)
VALUES ( ‘103’,’Pleine Forme’, ‘PARIS’, 400);
INSERT INTO CENTRE
VALUES ( ‘107’,’Pleine Forme’, ‘PARIS’, 420);
INSERT INTO CENTRE (NUMC, NOMC, COUTINSC)
VALUES ( ‘111’,’Le nouveau’, 400);
INSERT INTO PROPOSE (NUMC, SPORT)
VALUES ( ‘103’,’FOOTBALL’);
11/06/20
37
2.2. Modification des données
La modification des tuples dans la BD peut se faire en utilisant la commande ci-
dessous :
UPDATE <nom_de_la_table>
SET <nom_de_l'attribut-1> = <expression-1>
[,<nom_de_l'attribut-2> = <expression-2>
, ... <nom_de_l'attribut-n> = <expression-n>]
[WHERE <condition>] ;
11/06/20
38
Exemples : UPDATE
Augmenter le coût d' inscription, pour tous les centres, de 5% :
UPDATE CENTRE
SET COUTINSC = COUTINSC * 105%;
Baisser le coût d' inscription, dans le centre 101, de 20% :
UPDATE CENTRE
SET COUTINSC = COUTINSC * 80%
WHERE NUMC = ‘101’;
11/06/20
39
2.3. Suppression des données
La suppression des tuples dans la BD peut se faire en utilisant la commande ci-
dessous :
DELETE FROM <nom_de_la_table>
[WHERE <condition>] ;
11/06/20
40
Exemples : DELETE
Supprimer de la BD les coordonnées de l'acteur de numéro 003
DELETE FROM ACTEUR
WHERE NUMA = ‘003’ ;
11/06/20
41
3. L'interrogation des données
Une requête SQL s'écrit sous la forme :
SELECT Colonne(s)
FROM Table(s) | Requête(s)
[ [ WHERE Condition(s) ]
[ GROUP BY Colonne(s)
[ HAVING Condition(s) ] ]
[ ORDER BY Colonne(s) ] ] ;
11/06/20
42
Une requête SQL peut donc être formulée comme suit :
Ces deux commandes
SELECT ……… sont obligatoires
FROM ………… N’est nécessaire que s’il y a des
conditions à exprimer :
des conditions de sélections et/ou
WHERE ………. des conditions de jointures
N’est nécessaire que
ORDER BY …… s’il y a un classement à
effectuer.
GROUP BY ……
N’est nécessaire que s’il y
HAVING …….. a un groupement à
effectuer.
Le HAVING ne peut exister
qu’avec GROUP BY
11/06/20
43
3.1. Expression des projections
SELECT [ DISTINCT ] expression(s)
FROM table ;
L'élimination des doubles dans le résultat se fait par le mot clé DISTINCT.
Les expressions peuvent être du type :
- le caractère * (étoile) désigne la liste de toutes les colonnes de la table,
- une ou plusieurs colonnes de la table, séparées par une virgule,
- une expression arithmétique (composée avec les opérateurs binaires ,
+, -, *, /)
- une expression arithmétique suivie par un titre
11/06/20
44
3.2. Expression des sélections
SELECT [ DISTINCT ] expression(s)
FROM table
WHERE condition_de_sélection ;
Le mot clé WHERE permet de spécifier une ou plusieurs conditions de
sélection.
La condition de sélection est une expression logique composée d'une suite
de conditions, prenant chacune la valeur 'vrai' ou 'faux'.
Ces conditions sont combinées entre elles par les opérateurs logique AND,
OR ou NOT.
Si la valeur de l'expression logique est 'vrai' pour chaque tuple considéré,
celui-ci fera partie du résultat.
11/06/20
45
Les opérateurs de comparaison utilisés sont :
comparaison à une valeur =, <, >, <=, >=, <>
comparaison à une fourchette de valeurs BETWEEN / NOT BETWEEN
comparaison à une liste de valeurs IN / NOT IN
comparaison à un filtre LIKE / NOT LIKE
test sur l'indétermination d'une valeur IS NULL / IS NOT NULL
test 'TOUS' ALL
test 'AU MOINS UN‘ ANY
test existentiel EXISTS / NOT EXISTS
11/06/20
46
Une expression logique contient un nombre quelconque d'opérateurs NOT (la
négation NON), AND (le ET logique) et OR (le OU logique) :
l'opérateur NOT inverse la valeur du résultat,
le résultat de deux conditions logiques combinées par un AND est 'vrai' si les deux le
sont, et 'faux' si une des deux est fausse,
le résultat de deux conditions logiques, combinées par un OR, est 'vrai' si une des
deux conditions est 'vraie', et 'faux' si les deux sont fausses.
11/06/20
47
3.3. Expression du produit cartésien
SELECT [ DISTINCT ] expression(s)
FROM table1 , table2 ;
SELECT [ DISTINCT ] expression(s)
FROM table1 variable1, table2 variable2 ;
11/06/20
48
3.4. Expression de la jointure
SELECT [ DISTINCT ] expression(s)
FROM table1 , table2
WHERE condition_de_jointure ;
SELECT [ DISTINCT ] expression(s)
FROM table1 variable1, table2 variable2
WHERE condition_de_jointure ;
11/06/20
49
3.5. Expression de l'union
SELECT ... FROM ... [WHERE ... ]
UNION Compatibilité entre les
colonnes
SELECT ... FROM ... [WHERE ... ] ;
11/06/20
50
3.6. Expression de l’intersection
SELECT ... FROM ... [WHERE ... ]
INTERSECT Compatibilité entre les
colonnes
SELECT ... FROM ... [WHERE ... ] ;
11/06/20
51
3.6. Expression de l’intersection (suite)
SELECT colonne(s)
FROM …
[WHERE [… AND] ]
colonne IN
( SELECT colonne
FROM ... Compatibilité entre les
colonnes
[WHERE ...] );
11/06/20
52
3.7. Expression de la différence
SELECT ... FROM ... [WHERE ... ]
MINUS Compatibilité entre les
colonnes
SELECT ... FROM ... [WHERE ... ] ;
11/06/20
53
3.7. Expression de la différence (suite)
SELECT colonne(s)
FROM …
[WHERE [… AND] ]
colonne NOT IN
( SELECT colonne
FROM ... Compatibilité entre les
colonnes
[WHERE ...] );
11/06/20
54
3.8. Expressions des calculs
Le partitionnement horizontal d'une table en fonction des valeurs d'un ou
plusieurs attributs de partitionnement, suivi de l'application d'une fonction
de calcul s'exprime en SQL comme suit :
SELECT Fonction ( colonne ) ...
FROM ...
[WHERE ...] ; Fonction : SUM, AVG, MIN, MAX, COUNT
SUM : SOMME
AVG : AVERAGE, MOYENNE
MIN : MINIMUM
MAX : MAXIMUM
COUNT : COMPTER, NOMBRE
11/06/20
55
4. Le concept de vue
Une vue est une table virtuelle dont le schéma et le contenu sont dérivés
de la base réelle par un ensemble de questions :
CREATE VIEW <nom_de_la_vue> [ (liste_des attributs) ]
AS <requête> [ WITH CHECK OPTION ] ;
DROP VIEW <nom_de_la_vue> ;
CREATE OR REPLACE VIEW
<nom_de_la_vue> [ (liste_des attributs) ] AS <requête> ;
11/06/20
56
5. Exemples de requêtes SQL
Requêtes effectuées sur la BD SPORACT
11/06/20
57
5. Exemples de requêtes SQL
Requête A1 : Projection
Afficher la liste des sports proposés.
Sans élimination des doubles
SELECT SPORT
FROM PROPOSE ;
Avec élimination des doubles
SELECT DISTINCT SPORT
FROM PROPOSE ;
11/06/20
58
5. Exemples de requêtes SQL
Requête A2 : Projection
Afficher la liste des noms des centres sportifs et les villes où ils se
trouvent.
SELECT NOMC, VILC
FROM CENTRE ;
11/06/20
59
5. Exemples de requêtes SQL
Requête B1 : Sélection
Afficher la liste des centres sportifs de Paris.
SELECT *
FROM CENTRE
WHERE UPPER(VILC) = ‘PARIS’ ;
SELECT *
FROM CENTRE
WHERE LOWER (VILC) = ‘paris’ ;
SELECT *
FROM CENTRE
WHERE VILC = "PARIS" ; sous access
11/06/20
60
5. Exemples de requêtes SQL
Requête B2 : Sélection + Projection
Afficher la liste des noms des centres sportifs de Paris.
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) = ‘PARIS’ ;
11/06/20
61
5. Exemples de requêtes SQL
Requête B3 : Sélection + Projection
Afficher la liste des noms des centres sportifs de Paris ou de Nice.
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) = ‘PARIS’ OR UPPER(VILC) = ‘NICE’;
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) IN (‘PARIS’ , ‘NICE’);
11/06/20
62
5. Exemples de requêtes SQL
Requête B4 : Sélection + Projection
Afficher la liste des noms des centres sportifs
dont le nom de la ville où ils se trouvent ne commence pas par
MA
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) NOT LIKE ‘MA%’ ;
Commence par MA : LIKE ‘MA%’ sous ORACLE
Commence par MA : LIKE ‘MA*’ sous ACCESS
Se termine par MA : LIKE ‘%MA’ sous ORACLE
Contient MA : LIKE ‘%MA%’ sous ORACLE
11/06/20
63
5. Exemples de requêtes SQL
Requête B5 : Sélection + Projection
Afficher la liste des numéros des acteurs membres d'un centre sportif
à partir du début de juin 2003 jusqu'en mars 2004
SELECT NUMA
FROM ESTMEMBRE
WHERE DATEINSC >= ’01-JUN-03’ AND DATEINSC <= ’31-MAR-04’ ;
La date est donnée entre quotes sous
oracle
SELECT NUMA
La date est donnée entre dièses sous
FROM ESTMEMBRE access
WHERE DATEINSC >= #03/06/01# AND DATEINSC <= #04/03/31# ;
11/06/20
64
5. Exemples de requêtes SQL
Requête B5 : Sélection + Projection
Afficher la liste des numéros des acteurs membres d'un centre sportif
à partir du début de juin 2003 jusqu'en mars 2004
SELECT NUMA
FROM ESTMEMBRE
WHERE DATEINSC BETWEEN ’01-JUN-03’ AND ’31-MAR-04’ ;
11/06/20
65
5. Exemples de requêtes SQL
Requête C : Produit cartésien
Afficher toutes les coordonnées des centres sportifs
avec la liste des sports qu'ils proposent.
SELECT *
FROM CENTRE, PROPOSE ;
11/06/20
66
5. Exemples de requêtes SQL
Requête D : Jointure
Afficher la liste des numéros, des noms et des villes des centres sportifs
qui proposent le Karting.
SELECT [Link], [Link], [Link]
FROM CENTRE, PROPOSE
WHERE UPPER([Link]) = ‘KARTING’
AND [Link] = [Link] ;
SELECT [Link], [Link], [Link]
FROM CENTRE C, PROPOSE P
WHERE UPPER([Link]) = ‘KARTING’ AND [Link] = [Link] ;
11/06/20
67
5. Exemples de requêtes SQL
Requête D : Jointure
Afficher la liste des numéros, des noms et des villes des centres sportifs
qui proposent le Karting.
SELECT [Link], [Link], [Link]
FROM CENTRE, PROPOSE
WHERE UPPER([Link]) = "KARTING"
AND [Link] = [Link] ;
SELECT NOMC, VILC
FROM CENTRE
WHERE NUMC
IN (SELECT NUMC
FROM PROPOSE
WHERE SPORT = "KARTING") ;
11/06/20
68
5. Exemples de requêtes SQL
Requête E : Union
Afficher la liste des numéros des centres sportifs qui proposent
le football ou le handball ou ceux qui se trouvent à villetaneuse.
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) IN (‘FOOTBALL’, ‘HANDBALL’)
UNION
SELECT NUMC
FROM CENTRE
WHERE UPPER(VILC) = ‘VILLETANEUSE’ ;
11/06/20
69
5. Exemples de requêtes SQL
Requête F : Intersection
Afficher la liste des numéros des centres sportifs qui proposent
à la fois le Golf et le Tennis.
11/06/20
70
5. Exemples de requêtes SQL
Requête F : Intersection
Afficher la liste des numéros des centres sportifs qui proposent
à la fois le Golf et le Tennis.
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘GOLF’
INTERSECT
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘TENNIS’ ;
11/06/20
71
5. Exemples de requêtes SQL
Requête F : Intersection
Afficher la liste des numéros des centres sportifs qui proposent
à la fois le Golf et le Tennis.
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘GOLF’
AND NUMC IN
(SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘TENNIS’ ) ;
11/06/20
72
5. Exemples de requêtes SQL
Requête G : Différence
Afficher la liste des numéros des centres sportifs
qui ne proposent que la natation (pas d'autres sports).
11/06/20
73
5. Exemples de requêtes SQL
Requête G : Différence
Afficher la liste des numéros des centres sportifs
qui ne proposent que la natation (pas d'autres sports).
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘NATATION’
MINUS
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) <> ‘NATATION’ ;
11/06/20
74
5. Exemples de requêtes SQL
Requête G : Différence
Afficher la liste des numéros des centres sportifs
qui ne proposent que la natation (pas d'autres sports).
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘NATATION’
AND NUMC NOT IN
(SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) <> ‘NATATION’) ;
11/06/20
75
5. Exemples de requêtes SQL
Requête I 1 : Calculs
Afficher la liste des numéros des centres sportifs, les villes où ils se
trouvent et le coût d'inscription réduit de 10%..
SELECT NUMC, VILC, COUTINSC * 0,9
FROM CENTRE ;
Renommer des colonnes à l’affichage (à l’écran)
SELECT NUMC AS Centre, VILC AS Ville,
COUTINSC * 0,9 AS Nouveau_Coût
FROM CENTRE ;
11/06/20
76
5. Exemples de requêtes SQL
Requête I 2 : Calculs
Afficher la valeur maximale du coût d'inscription dans les centres
sportifs
Requête I 3 : Calculs
Afficher la valeur minimale du coût d'inscription dans les centres
sportifs
Requête I 4 : Calculs
Compter le nombre d’adhérents (inscrits ou non) dans la table
ACTEUR
11/06/20
77
5. Exemples de requêtes SQL
Requête I 2 : Calculs
Afficher la valeur maximale du coût d'inscription dans les centres
sportifs
SELECT MAX (COUTINSC)
FROM CENTRE ;
Requête I 3 : Calculs
Afficher la valeur minimale du coût d'inscription dans les centres
sportifs
SELECT MIN (COUTINSC)
FROM CENTRE ;
Requête I 4 : Calculs
Compter le nombre d’adhérents (inscrits ou non) dans la table
ACTEUR
SELECT COUNT (*)
FROM ACTEUR ;
11/06/20
78
5. Exemples de requêtes SQL
Requête I 5 : Calculs
Afficher le(s) numéro(s) de(s) centre(s) sportif(s) dont le coût d'inscription
est le moins élevé.
Requête I 6 : Calculs
Afficher la liste des centres sportifs (NUMC, NOMC, COUTINSC)
les plus chers.
s
11/06/20
79
5. Exemples de requêtes SQL
Requête I 5 : Calculs
Afficher le(s) numéro(s) de(s) centre(s) sportif(s) dont le coût d'inscription
est le moins élevé.
SELECT NUMC, COUTINSC
FROM CENTRE WHERE
COUTINSC= ( SELECT MIN (COUTINSC) FROM CENTRE ) ;
Requête I 6 : Calculs
Afficher la liste des centres sportifs (NUMC, NOMC, COUTINSC)
les plus chers.
SELECT NUMC, NOMC, COUTINSC
FROM CENTRE WHERE
COUTINSC = ( SELECT MAX (COUTINSC) FROM CENTRE ) ;
11/06/20
80
5. Exemples de requêtes SQL
Requête I 7 : Calculs
Afficher la liste des centres sportifs (NUMC, NOMC, COUTINSC)
dont le coût d'inscription est supérieur ou égal à la moyenne des coûts
d'inscription des différents centres.
11/06/20
81
5. Exemples de requêtes SQL
Requête I 7 : Calculs
Afficher la liste des centres sportifs (NUMC, NOMC, COUTINSC)
dont le coût d'inscription est supérieur ou égal à la moyenne des coûts
d'inscription des différents centres.
SELECT NUMC || ‘ ‘ || NOMC AS Centre,
COUTINSC AS Coût_Inscription
FROM CENTRE WHERE
COUTINSC >= ( SELECT AVG(COUTINSC) FROM CENTRE ) ;
11/06/20
82
5. Exemples de requêtes SQL
Requête I 8 : Calculs
Compter le nombre de sport(s) proposé(s) par chacun des centres
sportifs
11/06/20
83
5. Exemples de requêtes SQL
Requête I 8 : Calculs
Compter le nombre de sport(s) proposé(s) par chacun des centres
sportifs
SELECT NUMC, COUNT(SPORT)
FROM PROPOSE
GROUP BY NUMC;
SELECT NUMC AS Centre, COUNT(SPORT) AS NbrSports
FROM PROPOSE
GROUP BY NUMC;
11/06/20 ABS-coursBD-EA 84
Bibliographie
• Faouzi Boufarès, Bases de Données : Le langage SQL,
Université Paris 13, Sorbonne Paris Cité, Licence
Informatique.