Académique Documents
Professionnel Documents
Culture Documents
Cours BD 4 PDF
Cours BD 4 PDF
Bases de données
Cours 4 : Le langage SQL pour ORACLE
Odile PAPINI
POLYTECH
Université d’Aix-Marseille
odile.papini@univ-amu.fr
http://odile.papini.perso.esil.univmed.fr/sources/BD.html
Plan du cours
1 Introduction
2 SQL comme LDD
Identificateurs
Types
Tables
3 SQL comme Langage de Requêtes
Interrogation
Ordonner les réponses
Fonctions de groupe et regroupement de lignes
Opérateurs de l’algèbre relationnelle
Sous-requêtes
Vues
Fonctions pour requêtes SQL
4 SQL comme LCD
Bibliographie
Livres :
G. Gardarin : Bases de données objet et relationnel. Eyrolles
ed. 1999.
C. J. Date : Introduction aux bases de données. (8ième
edition). Vuibert ed. 2004.
H. Garcia-Molina, J. D. Ullman, J. Widow : Database
systems, the complete book. Prentice Hall ed. 2002.
Supports de cours :
Support de cours : J. Le Maitre :
http ://lemaitre.univ-tln.fr/cours.htm
Support de cours : C. Sabatier, Université de la Méditerranée.
SQL : Introduction
SQL : Introduction
SQL : Quelques repères historiques
SQL et Oracle
SQL : Quelques repères historiques
Oracle est SGBD qui utilise SQL
Identificateurs :
Tables :
Tables : colonnes
CHAR(taille)
chaı̂nes de caractères de longueur fixe
codage en longueur fixe : remplissage de blancs
taille comprise entre 1 et 2000 octets
VARCHAR(taille max)
chaı̂nes de caractères de longueur variable
taille comprise entre 1 et 4000 octets
constantes
chaı̂nes de caractères entre guilllemets
Odile PAPINI Bases de données
Introduction
Identificateurs
SQL comme LDD
Types
SQL comme Langage de Requêtes
Tables
SQL comme LCD
CHAR(taille) ou NCHAR(taille)
VARCHAR(taille max)
MAIS de préférence
VARCHAR2(taille max) ou NVARCHAR2(taille max)
constantes
chaı̂nes de caractères entre côtes
exemples
’Administration’, ’Marketing’
exemples
DATE
pour les dates
TIME
pour les heures, minutes et secondes
TIMESTAMP
pour un moment précis : date et heure, minutes et secondes
(précision jusqu’ à la microseconde)
constantes
exemples : ’1/05/2007’ ou ’1 MAY 2007’
BIT
pour enregistrer la valeur d’un bit
exemples : BIT(1), BIT(4)
avions pilotes
No AV NOM AV CAP LOC No PIL NOM PIL VILLE
100 airbus 300 nice 1 laurent nice
101 airbus 300 paris 2 sophie paris
102 carav 200 toulouse 3 claude grenoble
vols
No VOL No AV No PIL Vd Va Hd Ha
it100 100 1 nice paris 7 8
it101 100 2 paris toulouse 11 12
it102 101 1 paris nice 12 13
it103 102 3 grenoble toulouse 9 11
it104 101 3 toulouse grenoble 17 18
Odile PAPINI Bases de données
Introduction
Identificateurs
SQL comme LDD
Types
SQL comme Langage de Requêtes
Tables
SQL comme LCD
création de table
définition de colonne : :=
nom de colonne
(nom de domaine ou type)
[liste de contrainte de colonne]
[DEFAULT valeur par défaut]
Odile PAPINI Bases de données
Introduction
Identificateurs
SQL comme LDD
Types
SQL comme Langage de Requêtes
Tables
SQL comme LCD
contrainte de colonne : :=
[CONSTRAINT nom]
type de contrainte de colonne
Contraintes de colonnes ?
Contraintes de table ?
suppression de table
modification de table
modification de table : :=
ADD COLUMN définition de colonne
ADD CONSTRAINT contrainte de table
DROP COLUMN nom de colonne
DROP CONSTRAINT nom de contrainte
le schéma devient :
ou
Exemples :
expression colonne : :=
nom de colonne = expression ou
nom de colonne = requête
Exemple :
modifier la capacité de l’avion numéro 100
UPDATE avions SET CAP = 300
WHERE no AV = 100 ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
interrogation
requête : := (requête)
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
Sélection de lignes
Sélection de lignes
pour connaı̂tre tous les pilotes qui effectuent des vols qui
durent plus d’une heure
SELECT DISTINCT no PIL
FROM vols
WHERE (24 *(D a -D d) )> 1 ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
caractère spéciaux :
% : remplace 0, 1 ou plusieurs caractères
: remplace 1 caractère
caractère d’échappement :
permet de traiter les caractère spéciaux comme de simples
caractères
il n’y a pas de caractère d’échappement prédéfini
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
comparaisons indéfinies :
SELECT *
FROM avions
WHERE NULL = NULL OR ” = ” OR ” LIKE ’%’
OR ’A’ LIKE ” OR ’A’ NOT LIKE ” ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
équivalences disjonctives
expr NOT BETWEEN expr1 AND expr2
⇔ expr < expr1 OR expr > expr2
sont vraies ssi expr a une valeur et si au moins une des expressions
expr1 , exprN a une valeur qui satisfait les comparaisons
SELECT NUM PIL FROM pilotes
WHERE VILLE IN (’Marseille’, ’Nice’, ”) ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
équivalences conjonctives
expr BETWEEN expr1 AND expr2
⇔ expr >= expr1 AND expr <= expr2
sont vraies ssi expr a une valeur et si toutes les expressions expr1 ,
exprN ont une valeur qui satisfait la comparaison
SELECT NUM PIL FROM pilotes
WHERE VILLE NOT IN (’Marseille’, ’Nice’, ”) ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
SELECT no VOL
FROM vols
WHERE no AV IS NULL ;
pour connaı̂tre les horaires des vols triés par ordre croissant
des dates et heures de départ
SELECT no VOL, DATE d, DATE a
FROM vols
ORDER BY DATE d ;
pour savoir si le pilote 4010 assure tous les vols avec un avion
différent à chaque fois
SELECT no PIL
FROM vols
WHERE no PIL IS NOT NULL
GROUP BY no PIL
HAVING COUNT(DISTINCT no AV) >= 2 ;
Opérateurs ensemblistes
Opérateurs ensemblistes
pour connaı̂tre les villes qui sont soit des villes de départ soit
des villes d’arrivées d’un vol
SELECT V d VILL
FROM vols
WHERE V d IS NOT NULL
UNION
SELECT V a
FROM vols
WHERE V a IS NOT NULL ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
Opérateurs ensemblistes
Produit cartésien
equi-jointure sur no AV
equi-jointure sur no AV
equi-jointure externe
Sous-requêtes
SELECT projection
FROM nom de table
WHERE condition
(SELECT projection
FROM nom de table
WHERE condition, · · · ) ;
SELECT projection
FROM nom de table
WHERE expr op
(SELECT projection
FROM nom de table
WHERE condition, · · · ) ;
pour connaı̂tre les vols qui utilisent le même avion que celui
utilisé par le vol V101
SELECT no VOL
FROM vols
WHERE no Av = (SELECT no Av
FROM vols
WHERE no VOL = ’V101’ ) ;
SELECT projection
FROM nom de table
WHERE (expr1 , · · · exprn ) op
(SELECT (expr1 , · · · exprn )
FROM nom de table
WHERE condition, · · · ) ;
op ∈ {= , <>}
SELECT projection
FROM nom de table
WHERE expr NOT IN
(SELECT (projection
FROM · · · ) ;
SELECT projection
FROM nom de table
WHERE expr op ANY | ALL
(SELECT (projection
FROM · · · ) ;
op ∈ { = , <>, < , <= , > , >= }
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
pour connaı̂tre le vols qui sont assurés par un pilote qui habite
Paris
SELECT no VOL
FROM vols
WHERE no PIL IN
(SELECT no PIL
FROM pilotes
WHERE VILLE = ’Paris’ ) ;
Sous-requêtes d’existence
SELECT projection
FROM nom de table [Alias]
WHERE [NOT] EXISTS
(SELECT (projection
FROM · · · ) ;
Sous-requêtes d’existence
Les vues
Les vues
vols
No VOL No AV No PIL Vd Va Hd Ha
it200 100 1 nice paris 7 8
it201 100 2 paris toulouse 11 12
it202 101 1 paris nice 12 13
it203 102 3 paris toulouse 9 11
it204 104 3 nice paris 17 18
ligne
Vd Va
nice paris
paris toulouse
paris nice
Les vues
Exemples
Contraintes de référence
agrégation
CREATE VIEW ad avions
AS SELECT * FROM avions A
WHERE no AV > 0
AND CAP > 1
AND NOM AV IN (’Airbus’, ’Boeing’, ’Caravelle’)
AND NOT EXISTS ( SELECT * FROM vols V WHERE
A.no AV = V.no AV)
WITH CHECK OPTION ;
modulaire
CREATE VIEW a avions
AS SELECT * FROM avions
WHERE no AV > 0
AND CAP > 1
AND NOM AV IN (’Airbus’, ’Boeing’, ’Caravelle’)
AS SELECT * FROM pilotes P
WITH CHECK OPTION ;
CREATE VIEW ad avions
AS SELECT * FROM a avions
WHERE NOT EXISTS ( SELECT * FROM vols V WHERE
A.no AV = V.no AV) ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
TO CHAR(nombre[format[nls param]])
format est une chaı̂ne de caractères formée des éléments
suivants :
9 un chiffre quelconque
0 un chiffre ou un zéro si absence de chiffres
$ symbole monétaire américain
B remplace le nombre 0 par des blancs
MI signe du nombre post-fixé s’il est négatif, un blanc
post-fixé sinon.
S signe du nombre
PR nombre mis entre ”<” et ”>” s’il est négatif, nombre mis
entre 2 blancs sinon.
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
TO CHAR(nombre[format[nls param]])
nls param est une chaı̂ne de caractères formée à partir des
expressions suivantes :
SELECT
month between(’16/03/99’,’01/02/99’) NBmois1,
to date(’16/03/99’)-to date(’01/02/99’) NBjours1
month between(’16/04/99’,’01/03/99’) NBmois2,
to date(’16/04/99’)-to date(’01/03/99’) NBjours2 From
Dual ;
modificateurs :
FM suppression de blancs et de zéros
FX obligation de respecter exactement le format, les blancs
sont significatifs
afficher la date courante sous différentes formes :
SELECT
to char(sysdate,’DAY DD MONTH YYYY’) fmt1,
to char(sysdate,’FM DAY DD MONTH YYYY’) fmt2,
to char(sysdate,’DD/MM/YYYY HH24 :MI :SS’) fmt3
FROM Dual ;
Odile PAPINI Bases de données
Interrogation
Ordonner les réponses
Introduction
Fonctions de groupe et regroupement de lignes
SQL comme LDD
Opérateurs de l’algèbre relationnelle
SQL comme Langage de Requêtes
Sous-requêtes
SQL comme LCD
Vues
Fonctions pour requêtes SQL
TRUNC(date[format])
retourne une date tronquée selon le format spécifié
ROUND(date[format])
retourne une date arrondie selon le format spécifié
confidentialité
gestion des rôles et des utilisateurs
attribution de privilèges aux rôles et aux utilisateurs
définition de filtres (protection de donées confidentielles,
contrôle d’intégrité)
pérennité
gestion des transactions
intégrité
gestion des transactions
création de rôle
création d’utilisateur
systeme-privileges :
CREATE ROLE
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE PUBLIC SYNONYM
CREATE TABLE
CREATE USER
CREATE VIEW
Odile PAPINI Bases de données
Introduction
SQL comme LDD
SQL comme Langage de Requêtes
SQL comme LCD
suppression de privilèges
REVOKE liste-systeme-privileges
FROM liste-roles-utilisateurs
attribution de rôles
GRANT liste-roles
TO liste-roles-utilisateurs
[WITH ADMIN OPTION ] ;
suppression de rôles
REVOKE liste-roles
FROM liste-roles-utilisateurs