Vous êtes sur la page 1sur 54

SQL :

Structured Query Language

Langage de définition de données (LDD/DDL)

Langage de manipulation de données (LMD /DML)

Introduction à Oracle

1
Objectif C. Vangenot

 On sait faire un schéma conceptuel


1:1 1:n
Personne Travaille Entreprise

 On sait traduire ce schéma en un schéma


logique relationnel Personne(nom,…num_ent.)
Entreprise(numéro,…)

 On veut maintenant implémenter ce schéma


relationnel dans une base de données
– Utilisation du langage SQL

2
SQL: Trois langages C. Vangenot

 Langage de définition de données (LDD/DDL)


– création de relations : CREATE TABLE
– modification de relations: ALTER TABLE
– suppression de relations: DROP TABLE
– vues, index …. : CREATE VIEW ...
 Langage de manipulation de données (LMD /DML)
– insertion de tuples: INSERT
– mise à jour des tuples: UPDATE
– suppression de tuples: DELETE
 Langage de requêtes (LMD/DML)
– SELECT ….... FROM ....... WHERE ..........

3
Terminologie C. Vangenot

 Relation –> table


 Tuple –> ligne
 Attribut –> colonne (column)
 Identifiant –> clé primaire (primary key)
clé secondaire (unique)
 Identifiant externe
–> clé externe (external key)

4
Langage de définition de données

5
Langage de Définition de
Données C. Vangenot

 Commandes pour créer, modifier et


supprimer les éléments du schéma (pour
l’instant table et vue)
– CREATE TABLE : créer une table (une relation),
– CREATE VIEW: créer une vue particulière sur les
données à partir d’un SELECT,
– DROP {TABLE ¦ VIEW } : supprimer une table ou
une vue,
– ALTER {TABLE ¦ VIEW } : modifier une table ou
une vue.
6
CREATE TABLE C. Vangenot

 Commande créant une table en donnant son nom,


ses attributs et ses contraintes
 CREATE TABLE nom_table
{ ( nom-col type-col [DEFAULT val] [ [CONSTRAINT] contrainte-
col] )*
[ [CONSTRAINT] contrainte-table] | AS requête-SQL };
 Légende :
– {a | b} : a ou b,
– [option];
– * : applicable autant de fois que souhaité;
– mots en capitale : mots-clé.

7
CREATE TABLE C. Vangenot

 CREATE TABLE nom_table


{ ( nom-col type-col [DEFAULT val] [ [CONSTRAINT] contrainte-col] )*
[ [CONSTRAINT] contrainte-table] | AS requête-SQL };
 Exemple:
– CREATE TABLE Doctorant
(nom VARCHAR(20),
prénom VARCHAR(15),
année_insc NUMBER(4,2) DEFAULT 2002)

– CREATE TABLE Doctorant


AS SELECT nom, prénom, année_inscr
from Etudiant where statut='Doctorant';
8
Domaines de valeurs attributs C. Vangenot

 Types caractères
– CHAR(nb) : créé avec cette taille
– VARCHAR(max) : taille variable
 Types numériques
– NUMBER(n,p) ex: NUMBER(9,2) 7456123.89
 DATE
 TIMESTAMP (extension de DATE avec
h.,min., sec.)

9
Contraintes C. Vangenot

 contrainte-col : contrainte sur une colonne


– PRIMARY KEY
– UNIQUE
– NOT NULL
– REFERENCES nom_table [(nom-col)] [action]
– CHECK ( condition)
 contrainte-table : contraintes sur une table
– PRIMARY KEY (nom-col)*
– UNIQUE (nom-col)*
– FOREIGN KEY (nom-col)* REFERENCES nom_table
[(nom-col)*] [action]
– CHECK ( condition)
10
Attribut obligatoire : NOT NULL C. Vangenot

 Contrainte sur une colonne

 CREATE TABLE Pays


(nom VARCHAR(20) NOT NULL ,
capitale VARCHAR(20) NOT NULL ,
surface NUMBER,
…)

11
Identifiants : clé primaire /
secondaire C. Vangenot

 PRIMARY KEY (A1, A2, …)


– La clé primaire (si elle existe).
– attribut référencé par défaut dans les identifiants
externes
– pas de valeur nulle possible
c’est à dire NOT NULL automatiquement
 UNIQUE (A1, A2, …)
– une clé secondaire (s'il en existe)
– contrainte d'intégrité pour les autres identifiants
– valeur nulle permise (sauf si NOT NULL)

12
Contraintes PRIMARY KEY C. Vangenot

 PRIMARY KEY : IDENTIFIANT de la relation


– UNIQUE + NOT NULL
 Exemple:
 CREATE TABLE Dept
(dpt_id NUMBER(4) PRIMARY KEY, …

 CREATE TABLE Employé


( nom VARCHAR(30),
prénom VARCHAR(30),
adresse VARCHAR(60), …,
CONSTRAINT PK_emp PRIMARY KEY (nom, prénom))

UNIQUE et PRIMARY KEY sont incompatibles

13
Contrainte UNIQUE C. Vangenot

 UNIQUE
– Clé secondaire,
– pas deux lignes avec la même valeur,
– évt null
– Contrainte colonne ou table

– Exemple:
 CREATE TABLE Etudiant (
no_etudiant NUMBER UNIQUE, …
 CREATE TABLE Etudiant (
no_etudiant NUMBER CONSTRAINT no_etu_u UNIQUE, …

14
UNIQUE : exemples C. Vangenot

 CREATE TABLE Etudiant


( AVS CHAR(11) PRIMARY KEY ,
N°Etudiant NUMBER UNIQUE ,
nom VARCHAR(20) ,
prénom VARCHAR(30) , …
CONSTRAINT UNIQUE (nom, prénom) )

 PRIMARY KEY et UNIQUE sont


incompatibles
15
Contraintes d'intégrité
référentielle C. Vangenot

 "Foreign key" : " att1 Référence att2"


– Référence soit une primary key soit une unique key.
– Exemple:
 CREATE TABLE Dept
(dpt_id NUMBER(4) PRIMARY KEY,
manager_id NUMBER(4) CONSTRAINT fk_mgr
REFERENCES EMPLOYEE(emp_id)
,…)

 CREATE TABLE Dept


(dpt_id NUMBER(4) PRIMARY KEY,
manager_id NUMBER(4),
…,
CONSTRAINT fk_mgr FOREIGN KEY (manager_id)
16 REFERENCES EMPLOYEE(emp_id), …
Exemple C. Vangenot

 CREATE TABLE Dept


(dpt_id NUMBER(4) PRIMARY KEY,
manager_id NUMBER(4) REFERENCES EMPLOYEE(emp_id),
group_id NUMBER(2) REFERENCES GROUP(group_id);

 CREATE TABLE Employee (


employee_id NUMBER(4) UNIQUE,
last_name VARCHAR2(30),
first_name VARCHAR2(30),
salary NUMBER(7,2) DEFAULT 1,
Commission NUMBER(7,2),
department_id NUMBER(2) NOT NULL,
CONSTRAINT PK_Emp_id PRIMARY KEY(last_name, first_name));

17
Intégrité référentielle C. Vangenot

 Maintenir l’intégrité référentielle


– Lors de suppressions ou modifications d'un tuple dont
l'identifiant est référencé par un clé étrangère

 Exemple de problème
– Pays(nom, capitale, population, surface)
JO(lieu, pays, année)
 pays référence Pays.nom
– Suppression d'un tuple de Pays:
DELETE FROM Pays WHERE nom='Grèce';
– Que fait-on pour le tuple de JO correspondant?

18
Maintenir intégrité référentielle C. Vangenot

 Possibilités
– Interdire l'opération
– Mettre les valeurs de l'identifiant externe à NULL
ou à une valeur défaut
– En cas du suppression: éliminer aussi le tuple
avec l'identifiant externe
– En cas du modification: modifier également la
valeur de l'identifiant externe

19
Maintenir intégrité référentielle C. Vangenot
 Deux circonstances  Trois options
– SET NULL
– ON DELETE
– SET DEFAULT: valeur par défaut si
– ON UPDATE elle existe, sinon NULL
– CASCADE : on répercute la MAJ

 CREATE TABLE Dept


(dpt_id NUMBER(4) PRIMARY KEY,
manager_id NUMBER(4) CONSTRAINT fk_mgr
REFERENCES EMPLOYEE(emp_id) ON DELETE SET NULL
ON UPDATE CASCADE
 ORACLE: que ON DELETE et SET NULL, CASCADE
 Si pas cette clause, on ne peut pas détruire le tuple.
20
Contraintes simples C. Vangenot

 Condition que chaque ligne de la table doit vérifier


 Si contrainte de colonne, porte uniquement sur cette
colonne sinon porte sur plusieurs colonnes.
Exemple:
– CREATE TABLE divisions (
div_no NUMBER CONSTRAINT check_divno CHECK
(div_no BETWEEN 10 AND 99),

div_name VARCHAR2(9) CONSTRAINT check_divname


CHECK (div_name = UPPER(div_name)),

office VARCHAR2(10) CONSTRAINT check_office


CHECK (office IN ('BOSTON', 'PARIS','TOKYO'))
);
21
Contraintes sur plusieurs colonnes C. Vangenot

 Maintenir les conditions logiques sur les tuples


 Exemple
CREATE TABLE Account
( id NUMBER,
income NUMBER(4,0),
outcome NUMBER(4,0),
balance NUMBER(4,0),
PRIMARY KEY (id),
CHECK(income - outcome=balance));

22
Résumé, exemple C. Vangenot
 CREATE TABLE Dept
(dpt_id NUMBER(4) PRIMARY KEY,
manager_id NUMBER(4) REFERENCES EMPLOYEE(emp_id)
ON DELETE SET NULL,
group_id NUMBER(2) REFERENCES GROUP(group_id)
ON DELETE CASCADE );
 CREATE TABLE Employee (
emp_id NUMBER(4) UNIQUE,
last_name VARCHAR2(30),
first_name VARCHAR2(30),
salary NUMBER(7,2) DEFAULT 1,
Commission NUMBER(7,2),
department_id NUMBER(2) NOT NULL,
CONSTRAINT check_sal CHECK (salary * commission <= 5000),
CONSTRAINT PK_Emp_id PRIMARY KEY(last_name, first_name));
23
DROP TABLE C. Vangenot

 DROP : supprimer une table


– supprime la table et tout son contenu

 DROP TABLE nom_table [CASCADE CONSTRAINTS];

 CASCADE CONSTRAINTS
– Supprime toutes les contraintes référençant une clé
primaire (primary key) ou une clé unique (UNIQUE) de cette
table
– Si on cherche à détruire une table dont certains attributs
sont référencés sans spécifier CASCADE CONSTRAINT,
Oracle retourne une erreur.

24
ALTER TABLE C. Vangenot

 Modifier la définition d’une table:


– Changer le nom de la table,
mot clé : RENAME
– Ajouter une colonne ou une contrainte,
mot clé : ADD
– Modifier une colonne ou une contrainte,
mot clé : MODIFY
– Supprimer une colonne ou une contrainte,
mot clé : DROP
– Renommer une colonne ou une contrainte,
mot clé : RENAME

25
ALTER TABLE sur les colonnes C. Vangenot

 ALTER TABLE nom-table


{ RENAME TO nouveau-nom-table |
ADD ( [ (nom-col type-col [DEFAULT valeur]
[contrainte-col])* ] |
MODIFY (nom-col [type-col] [DEFAULT valeur]
[contrainte-col])* |
DROP COLUMN nom-col [CASCADE CONSTRAINTS] |
RENAME COLUMN old-name TO new-name
};

26
Renommer une table C. Vangenot

 … RENAME TO nouveau-nom-table

 ALTER TABLE country RENAME TO PAYS

27
Ajouter une colonne C. Vangenot

 … ADD ( [ (nom-col type-col [DEFAULT


valeur]
[contrainte-col])* ]

 ALTER TABLE Pays ADD


(duty NUMBER(2,2) DEFAULT 1
CHECK (duty < 10),
visa_needed VARCHAR2(3));

28
Modifier une colonne C. Vangenot

 … MODIFY (nom-col [type-col] [DEFAULT


valeur] [contrainte-col])*

 ALTER TABLE PAYS MODIFY (duty


NUMBER(3,2));
– !! Tout ce qui n'est pas spécifié dans le MODIFY
n'est pas modifié, par ex. ici default et check

29
Supprimer une colonne C. Vangenot

 … DROP COLUMN nom-col [CASCADE


CONSTRAINTS]

 ALTER TABLE PAYS DROP COLUMN


visa_needed CASCADE CONSTRAINTS;

30
Renommer une colonne C. Vangenot

 … RENAME COLUMN old-name TO new-


name

 ALTER TABLE PAYS RENAME COLUMN


duty to taxe;

31
ALTER TABLE sur les
contraintes C. Vangenot

 ALTER TABLE nom-table


{ ADD contrainte-table |
DROP { PRIMARY KEY |
UNIQUE ( nom-colonne)* |
CONSTRAINT nom-contrainte }
[CASCADE CONSTRAINTS] |
RENAME CONSTRAINT old-name TO new-name |
MODIFY [CONSTRAINT] nom-contrainte status-contrainte};

32
Ajouter une contrainte C. Vangenot

 … ADD contrainte-table

 ALTER TABLE employees


ADD CONSTRAINT check_comp CHECK (salary +
(commission_pct*salary) <= 5000);
 ALTER TABLE country
ADD CONSTRAINT pk_country primary key (name);

33
Supprimer une contrainte C. Vangenot

 … DROP { PRIMARY KEY |


UNIQUE ( nom-colonne)* |
CONSTRAINT nom-contrainte }
[CASCADE
CONSTRAINTS]

 ALTER TABLE departments


DROP PRIMARY KEY CASCADE CONSTRAINTS;

34
Exemples C. Vangenot

 ALTER TABLE employees


ADD CONSTRAINT check_comp
CHECK (salary + (commission_pct*salary) <=
5000);
 ALTER TABLE country
ADD CONSTRAINT pk_country primary key
(name);
 ALTER TABLE departments
DROP PRIMARY KEY CASCADE CONSTRAINTS;
 ALTER TABLE country RENAME CONSTRAINT
pk_country to pkc;
35
Langage de Manipulation de
données

36
Manipulation des données C. Vangenot

 INSERT INTO: ajouter un tuple dans une


table ou vue
 UPDATE: changer les tuples d’une table ou
vue
 DELETE FROM: éliminer les tuples d’une
table ou vue

37
INSERT INTO
C. Vangenot

INSERT INTO olympics


VALUES (1996, ‘Atlanta’, ‘U.S.A’) 1996 Atlanta U.S.A.

INSERT INTO olympics


(year, location)
VALUES (1996, ‘Atlanta’)
38 1996 Atlanta null
INSERT C. Vangenot

 INSERT INTO {nom_table ¦ nom_vue}


[ (nom_col)* ]
{ VALUES (valeur)* ¦ sous-requête };

39
UPDATE
C. Vangenot

UPDATE country
SET capital = ‘Londres’
WHERE country = ‘Ireland’

Londres

40
UPDATE C. Vangenot

UPDATE {nom_table ¦ nom_vue}


SET { (nom_col)* = (sous-requête) ¦
nom_col = { valeur ¦ (sous-requête)} }*
WHERE condition;

41
DELETE FROM C. Vangenot

DELETE FROM country


WHERE population > 50
-> éliminer les pays dont la population est > 50

DELETE FROM country


-> éliminer tous les tuples

42
DELETE C. Vangenot

 DELETE FROM {nom_table ¦ nom_vue}


WHERE condition;

43
Oracle

44
Oracle : Architecture C. Vangenot

• SQL*Plus
Oracle Instance
• Administration Tools
- Server Manager (UNIX) Server
- Oracle Enterprise Manager (Windows NT) Processes
-…
Systen Global

Network Listener
• CASE Tools Area
- WebDB - SGA -
- Oracle Designer (memory)
- Oracle Developer Net8
- JDeveloper Suite
-…

• Dedicated Applications Database


Application Interfaces Control files, Datafiles
-SQL, PL/SQL, And Redo Log Files
-Pro*C/C++, OCI,
-JDBC, SQLJ
-…
Oracle Clients Oracle Server
45 Protocole réseau
Accès aux données C. Vangenot

 SQL*Plus
– Permet d’ouvrir une session sur oracle
 Suivant le username on pourra faire des actions
différentes
 PL/SQL
– Extention procédurale d’oracle à SQL
 Embedded-SQL
– C/C++
– Cobol
– Java

46
SQL*Plus, C. Vangenot

 Invocation SQL*Plus :
– commande:
 Sqlplus [username][/password][@net_service_name]
– exemple : sqlplus BDR1/BDR1

 SQL>sql_statement;<return>
 SQL>select * from emp;<return>

– Quitter SQL*Plus:
 SQL>exit;<return>

47
SQL*Plus, quelques
commandes C. Vangenot

 DESC[RIBE] [schema.]object
– Liste les colonnes de l’objet spécifié (table, view, etc.)
– ex: DESC Employe

 STA[RT] file_name[.ext] [arg ...] ou @file_name[.ext] [arg ...]


– exécute le script SQL spécifié.

 SPO[OL] [file_name[.ext]|OFF|OUT]
– Stocke le résultat de la requête dans un fichier.
 SQL>SPOOL mylog.lst
 SQL>…
 SQL>SPOOL OFF
 Plus de commandse: SQL*Plus User's Guide and Reference
– Aide mémoire: http://lbdwww.epfl.ch/f/teaching/courses/
– Documentation oracle:
http://lbdwww.epfl.ch/f/teaching/courses

48
Oracle C. Vangenot

 Notre interface d'accès: SQLPLUS


 Comment vous connecter à Oracle?
1) Vous vous connectez sur une machine en INF3
2) Dans un terminal vous tapez la commande
sqlplus avec le username et le password qui
vous seront donnés
3) Vous obtenez:
sqplus>
4) Vous êtes connecté sous oracle. Vous pouvez
tapez vos ordres sql
sqlplus> create table toto (i integer);

49
Oracle (suite) C. Vangenot

 Vous êtes connecté dans la partie du SGBD


qui vous est réservée.
 Chaque BD possède une liste de username,
i.e. user qui peuvent se connecter à la BD
 A ce username sont associés :
– Storage settings and Quotas
– Profil et limites en terme de ressource
– Privilège et/ou rôle

50
Interfaces C. Vangenot

 PL/SQL
– Extension procédurale (d’Oracle) à SQL:
 déclarer constantes et variables
 Traitements procéduraux (IF-THEN-ELSE, WHILE, FOR, etc.)
 définir procédures et fonctions,
 Gérer les erreurs, exception (ADA)

51
PL/SQL C. Vangenot

DECLARE
acct_balance NUMBER(11,2);
acct CONSTANT NUMBER(4) := 3;
debit_amt CONSTANT NUMBER(5,2) := 500.00;
BEGIN
SELECT bal INTO acct_balance FROM accounts
WHERE account_id = acct
FOR UPDATE OF bal;
IF acct_balance >= debit_amt THEN
UPDATE accounts SET bal = bal - debit_amt
WHERE account_id = acct;
ELSE
INSERT INTO temp VALUES
(acct, acct_balance, 'Insufficient funds');
-- insert account, current balance, and message
END IF;
COMMIT;
END;

52
Example:

Pro*C/C++
/*declare section*/
EXEC SQL BEGIN DECLARE SECTION
VARCHAR username[UNAME_LEN]; C. Vangenot
VARCHAR password[PWD_LEN];
...
 Embedded SQL EXEC SQL END DECLARE SECTION
ordres SQL placés dans ...
main()
un programme comme {
C, C++ char temp_char[32];

/* connect to oracle*/
strncpy((char *) username.arr, "bdr1", UNAME_LEN);
username.len = strlen((char *) username.arr);
strncpy((char *) password.arr, "bdr1", PWD_LEN);
password.len = strlen((char *) password.arr);
EXEC SQL CONNECT :username IDENTIFIED BY :password;
/* execute queries */
strcpy( (char *) emp_name, "SMITH");
EXEC SQL SELECT ename, sal, comm
INTO :emprec INDICATOR :emprec_ind
FROM EMP
WHERE ENAME = :emp_name;
printf("%-8s\t%6.2f\t\t%6.2f\n",
emprec.emp_name.arr, emprec.salary, emprec.commission);
/* close connection */
EXEC SQL COMMIT WORK RELEASE;
53 exit(0);
}
Oracle 10, Documentation C. Vangenot

 http://lbdwww/f/teaching/courses/oracle/index.htm

54