50
Bases de données relationnelles sous Oracle SQL POUR ORACLE Préparé par : M. Karim ELATRACH

01 SQL POUR ORACLE

Embed Size (px)

Citation preview

Page 1: 01 SQL POUR ORACLE

Bases de données relationnelles sous Oracle

SQL POUR ORACLE

Préparé par : M. Karim ELATRACH

Page 2: 01 SQL POUR ORACLE

Plan du cours

� Le SGBDR Oracle

� Présentation des SGBDR

2

� SQL : Langage d’Interrogation de Données (LID)

� SQL : Langage de Manipulation de données (LMD)

� SQL : Langage de Définition de données (LDD)

Page 3: 01 SQL POUR ORACLE

Présentation des SGBDR

Page 4: 01 SQL POUR ORACLE

Bases de données

� Une base de données est un ensemble dedonnées :� représentant une partie du monde réel

stockées en mémoire secondaire

4

� stockées en mémoire secondaire

� pouvant être interrogées et mises à jour

� servant de support à une ou plusieurs applications

� Mais… base de données ≠ banque de données

Page 5: 01 SQL POUR ORACLE

Bases de données

Une collection de données est appelée base dedonnées si:� format connu (défini au niveau du système et nonuniquement au niveau des programmes utilisant les

5

uniquement au niveau des programmes utilisant lesdonnées) et défini par des méta-données(données décrivant des données)

� Données stockées, recherchées, modifiéesuniquement par un type spécial de programmesappelé système de gestion de bases dedonnées

� Données manipulées sous le contrôle detransactions (ensemble de règles formellesassurant l’intégrité des données

Page 6: 01 SQL POUR ORACLE

Système de gestion de bases de données (SGBD)

Un SGBD est un ensemble de logiciels-systèmepermettant aux utilisateurs de:� mettre en forme

sauvegarder,

6

� sauvegarder,

� mettre à jour (modifier, insérer, supprimer)

� rechercher

efficacement des données spécifique dans unetrès grande masse d’informations partagéesentre plusieurs utilisateurs

Page 7: 01 SQL POUR ORACLE

Fonctionnalités d’un SGBD (1)

� Contrôler la redondance d'informations

� Partage des données

� Fiabilité des données

7

� Fiabilité des données� Cohérence et contraintes d’intégrité

� Sûreté du fonctionnement� Notion de transaction atomique

� Techniques de sauvegarde et/ou de journalisation

� Procédures de reprise sur panne

Page 8: 01 SQL POUR ORACLE

Fonctionnalités d’un SGBD (2)

� Sécurité d’accès� commandes d’autorisation

� Partage et accès concurrentstechniques de verrouillage

8

� techniques de verrouillage

� Interrogation : langages de requêtes� déclaratifs et incomplets

→ intégration du langage de requête et d’un langagede programmation

→ dysfonctionnements (typage et traitementensembliste)

Page 9: 01 SQL POUR ORACLE

Le SGBDR Oracle

Page 10: 01 SQL POUR ORACLE

Généralités (1/3)

� Oracle est un SGBD relationnel developpé par la société « Oracle Corporation »

� 1ère version : 1981

Version de travail Oracle 9i (Enterprise/Standard/Personal

10

� Version de travail Oracle 9i (Enterprise/Standard/Personal Edition)

� Définition et manipulation des données

� Langage SQL

� Langage PL/SQL (extension procédurale du langage SQL)

� Procédure stockées

� Déclencheurs (trigger)

Page 11: 01 SQL POUR ORACLE

Généralités (2/3)

� Intégrité

� Définition des contraintes d’intégrité du modèle relationnel

� Confidentialité

� Privilège

11

� Privilège

� Rôle : ensemble de privilèges pouvant être attribués à un grouped’utilisateurs

� Vue

� Concurrence d’accès

� Verrouillage = mode de réservation qui consiste à interdire l’accèsà une partie de données pendant que celle-ci est utilisée par uneunité de traitement

���� Plusieurs utilisateurs peuvent accéder aux mêmes donnéessimultanément

Page 12: 01 SQL POUR ORACLE

Généralités (3/3)

� Oracle est un SGBD à architecture ouverte

� Portabilité d’Oracle :

Oracle est écrit en langage C ���� disponible sur plusieurs plates-formes matérielles et logicielles :

12

formes matérielles et logicielles :

���� Indépendance des données et des applications vis-à-vis del’environnement matériel et logiciel

o Plates-formes matérielles : du mainframes (IBM et les autres)jusqu’au micro-ordinateur (PC, Macintosh)

o Systèmes d’exploitation : Unix, VMS, DOS, Windows98/NT/2000/XP, etc.

Depuis la version 8.0.5, Oracle est disponible sous linux

Page 13: 01 SQL POUR ORACLE

PL/SQL

Architecture d’Oracle

Utilitaires

Outils d’interconnexion

SQL*Net (Oracle Net)

SQL*Connect

Produits d’intégration d’outils

Oracle for 1-2-3

Oracle for DBase

13

PL/SQL

SQL

Noyau

Dictionnaire

de données

NoyauOutils décisionnels

Easy*SQL

SQL*Calc

Oracle for 1-2-3

Utilitaires d’administration

SQL*DBA

SQL*Loader

Import/Export

Outils de développement d’applications

SQL*Plus

Developer 2000

Précompilateurs (SQL*xxx)

Couches de base d’Oracle

Page 14: 01 SQL POUR ORACLE

Architecture d’Oracle

14

Oracle est un environnement complet

Page 15: 01 SQL POUR ORACLE

Architecture d’OracleNoyau

� Le noyau assure les fonctionnalités d’un SGBD quisont essentiellement les suivantes :

Fonctions classiques

− Gestion de l’intégrité et de la cohérence des données

15

− Gestion de l’intégrité et de la cohérence des données

− Gestion de la confidentialité des données

− Gestion de sauvegarde et de restauration

− Gestion des accès concurrents

Fonctions particulières

− Optimisation de l’exécution des requêtes

− Gestion des accélérateurs

− Stockage physique des données

Page 16: 01 SQL POUR ORACLE

Architecture d’OracleDictionnaire de données

� C’est une base de données qui décrit de façondynamique une base de de données. Son contenureflète l’image de la base à un instant donné.

Il décrit

16

Il décrit− Les objets de la base de données (tables, colonnes, vues,

index, clusters, …)

− Les utilisateurs accèdent à Oracle avec leurs privilèges et les droits qu’ils ont sur les différents objets.

− Les informations relatives à l’activité de la base de données (connexions, ressources utilisées, etc.)

Le dictionnaire de données est manipulé avec le langage SQL

Page 17: 01 SQL POUR ORACLE

Architecture d’OracleCouche SQL

Elle joue le rôle d’interface entre le noyau et les différents

outils d’Oracle

Tout accès à la base de données est exprimé en SQL

17

− Interprétation des commandes SQL

− Vérification syntaxique et sémantique

− Décomposer les commandes en opérations élémentaires et les soumettre au noyau

Tout accès à la base de données est exprimé en SQL

Rôle de cette couche :

− Récupération du résultat et le transmettre à l’application qui a soumis la commande

Page 18: 01 SQL POUR ORACLE

Architecture d’OracleCouche PL/SQL

Extension de la couche SQL

18

PL/SQL = SQL+ Structures de contrôle + Variables + Traitement

des erreurs + Traitement des curseurs

Page 19: 01 SQL POUR ORACLE

Outils d’OracleOutils de développement d’applications

Outils de 4ème génération

3 outils de développement :

19

− SQL*Plus : interface interactive à SQL et PL/SQL

− Developer 2000 : conception et création d’application client-serveur

− SQL*xxx : précompilateurs

Page 20: 01 SQL POUR ORACLE

Outils d’OracleOutils de développement d’applications

SQL*Plus

20

Page 21: 01 SQL POUR ORACLE

Outils d’OracleOutils de développement d’applications

Developer 2000

Developer 2000 dispose de 4 outils principaux :

Oracle Forms : utilisé pour concevoir et générer des applications baséessur des formulaires.

21

sur des formulaires.

Oracle Reports : utilisé pour concevoir des états

Oracle Graphics : permet de définir des requêtes qui lorsqu’elles sontexécutées, génèrent des graphiques dynamiques

Procedure Builder : utilisé pour concevoir et gérer le code PL/SQL sur unserveur de bases de données

Page 22: 01 SQL POUR ORACLE

Outils d’OracleOutils de développement d’applications

Précompilateurs

� Oracle dispose d’une variété d’interfaces de programmationpermettant d’accèder, depuis des langages de 3ème génération(C, Ada, Cobol, Pascal) aux données générées par Oracle.

LibrairieCode C

22

Code C & SQLLibrairieOraclePrécompilateur

Code C & fonctions

Compilateur C

Exécutable

Page 23: 01 SQL POUR ORACLE

Outils d’OracleOutils d’administration

Ensembles d’outils et d’utilitaires d’administration de la base dedonnées

3 outils d’administration :

23

3 outils d’administration :

− SQL* DBA : outil de base de l’administrateur

− SQL*Loader : outil de chargement de données à partir desfichiers externes

− Import/Export : outils d’importation et d’exportation dedonnées entre les bases de données Oracle

Page 24: 01 SQL POUR ORACLE

Outils d’OracleOutils d’administration

SQL*DBA

Permet d’effectuer les opérations suivantes :

− Démarrage et arrêt d’une instance

24

− Chargement et déchargement d’une base de données

− Ouverture et fermeture d’une base de données

− Pilotage en temps réel du fonctionnement d’Oracle

− Sauvegarde et restauration des données et des journaux

Page 25: 01 SQL POUR ORACLE

Outils d’OracleOutils d’administration

SQL*Loader & Import/Export

SQL*Loader permet d’alimenter des tables d’unebase de données Oracle par des données qui

25

base de données Oracle par des données quiproviennent de fichiers non Oracle

Import/Export permettent d’échanger desdonnées entre les bases de données Oracle

Page 26: 01 SQL POUR ORACLE

LE LANGAGE SQL

Langage d’Interrogation de Données (LID)

Page 27: 01 SQL POUR ORACLE

Interrogation des données (syntaxe partielle)

Syntaxe partielle de l’interrogationSELECT <liste d'attributs dont on cherche la valeur>FROM <listederelationsdonton fait le produit>

27

FROM <listederelationsdonton fait le produit>[ WHERE <condition de sélection> ]

Page 28: 01 SQL POUR ORACLE

Syntaxe complète de l’interrogation

SELECT {[ ALL | DISTINCT ] <colonne et/ou calculs> [AS <alias>]}| *

FROM <table1 [var1], table2 [var2] …>

[WHERE < conditiondesélection>]

28

[WHERE < conditiondesélection>]

[GROUP BY <colonne1 , colonne2…>

[HAVING <critères_regroupement>] ]

[{ UNION | INTERSECT | MINUS } ( SELECT …)]

[ORDER BY <colonne1[ASC | DESC], …>]

Page 29: 01 SQL POUR ORACLE

Ligne SELECTSELECT {[ ALL | DISTINCT ] <colonne et/ou calculs> [AS <alias>]} | *

� ALL : sans élimination des doublons (mode par défaut)� DISTINCT : avecéliminationdesdoublons

29

� DISTINCT : avecéliminationdesdoublons

� colonne :� soit nom_att (si pas d'ambiguïté sur ce nom),� soit nom_table.nom_att,� soit var_table.nom_att,� soit * (toutes les colonnes),� soit nom_tab.*� soit var_tab.*

Page 30: 01 SQL POUR ORACLE

Ligne SELECTSELECT {[ ALL | DISTINCT ] <colonne et/ou calculs> [AS

<alias>]} | *

calcul :� soit expressionsurdescolonnesavecdesopérateurs: +, -, *, /

30

soit expressionsurdescolonnesavecdesopérateurs: +, -, *, /éventuellement avec (), ou || (concaténation de chaînes decaractères)

� soit des fonctions simples sur une valeur ou agrégats sur unensemble de valeurs (ex: SUM(somme), AVG(moyenne) desvaleurs d‘une colonne, COUNT (compte les n-uplets))

� soit la combinaison des expressions, fonctions simples etagrégats (ex: MIN, MAXd‘une expression sur des colonnes)

alias : si mentionné, alias est le nomde la colonne dans lerésultat de la requête.

Page 31: 01 SQL POUR ORACLE

Ligne FROM

FROM <table1 [var1], table2 [var2] …>

table1 :

31

table1 :� soit un nomde table,

� soit un nom de table préfixé du compte dupropriétaire

var1 : variable (alias) attribuée à table1 durantla requête

Page 32: 01 SQL POUR ORACLE

Ligne WHERE (Optionnelle)[WHERE <condition de sélection>]

condition : expression logique de prédicats� colonne comparateur { valeur | colonne | sous-requête}

où le comparateurestl’un dessuivants:

32

où le comparateurestl’un dessuivants:=, !=, >, <, >=, <=, LIKE, {>|<|…} {ALL| ANY}

� colonne {IN | NOT IN} { (valeur1, valeur2,…) | sous-requête}� colonne BETWEEN valeur1 AND valeur2� {EXISTS | NOT EXISTS} sous_requête� colonne IS NULL� condition {AND|OR} condition,� NOT condition

Page 33: 01 SQL POUR ORACLE

Ligne GROUP BY (Optionnelle)[GROUP BY <colonne1 , colonne2…>[HAVING <critères_regroupement>] ]

� colonnes : attributs de regroupement� objectif : partitioner horizontalementla relation

33

� objectif : partitioner horizontalementla relationselon les valeurs de certaines colonnes, appliquerensuite une fonction agrégat (sur d'autres colonnes)aux partitions

• Ligne HAVING (Optionnelle après regroupement)critère_regroupement :fonction_agrégat([DISTINCT] colonne)comparateur {valeur |sous-requête}

Page 34: 01 SQL POUR ORACLE

Opérations ensemblistes

� UNION : effectue l’union des n-uplets de deux relations

� INTERSECT : effectue l’intersection des n-uplets de deuxrelations

34

relations

� MINUS : effectue la différence ensembliste entre deuxrelations

Remarque : les attributs des lignes SELECT doivent être lesmêmes pour pouvoir appliquer ces opérations entre deux

requêtes

Page 35: 01 SQL POUR ORACLE

Ligne ORDER BY (optionnelle)

[ORDER BY <colonne1[ASC | DESC], …>]

ordonne le résultat de la requête dans l’ordre croissant

35

ordonne le résultat de la requête dans l’ordre croissant

(ASC) ou décroissant (DESC) des valeurs de la colonne1…

Page 36: 01 SQL POUR ORACLE

LE LANGAGE SQL

Langage de Manipulation de données (LMD)

Page 37: 01 SQL POUR ORACLE

INSERT� L’instruction INSERT est utilisée pour ajouter de nouvelles lignes dans la

base de données.� La syntaxe de INSERT est:

� INSERT INTO schema.table column(s) VALUES subquery� Avec:

37

� schema est un paramètre optionnel pour identifier le schéma de base de donnée utilisé pour l’insertion. Par défaut, c’est le schéma de l’utilisateur.

� table est obligatoire et est le nom de la table.� column est la liste des colonnes qui vont recevoir les valeurs

insérées.� VALUES est utilisé lorsqu’une ligne de données est insérée. Les

valeurs sont représentées comme des constantes.� subquery est utilisé lorsque l’option VALUES n’est pas utilisée. Les

colonnes de la sous-requête doivent correspondre à l’ordre et aux types des données des colonnes dans la liste de la commande INSERT.

Page 38: 01 SQL POUR ORACLE

Exemple INSERT

� INSERT INTO dept (dept_no, name, adrs_id)VALUES (12, ’INFORMATIQUE’, 200);

38

VALUES (12, ’INFORMATIQUE’, 200);� Ou : INSERT INTO dept

VALUES (12, ’INFORMATIQUE’, 200);

Page 39: 01 SQL POUR ORACLE

UPDATE� L’instruction UPDATE est utilisée pour changer des lignes existantes dans

la base de données. � La syntaxe de l’instruction UPDATE est

� UPDATE schema.table SET column(s) = expr sub query WHERE condition

� Avec:� schema est un paramètre optionnel pour identifier le schéma de base de

39

� schema est un paramètre optionnel pour identifier le schéma de base de données utilisé pour la mise à jour. Par défaut, il s’agit du schéma de l’utilisateur.

� table est obligatoire et est le nom de la table.� SET est un mot clé obligatoire réservé.� column est une liste de colonnes qui vont recevoir les valeurs mises à jour.� expr est la nouvelle valeur à affecter.� sub query est une instruction SELECT qui va extraire les nouvelles valeurs des

données.� WHERE est optionnel et est utilisé pour restreindre les lignes qui vont être mises

à jour.

Page 40: 01 SQL POUR ORACLE

Exemple UPDATE

� UPDATE emp

SET last_name = ’DOE’,

first_name = ’JOHN’

40

first_name = ’JOHN’

WHERE dept_no = 30;

Page 41: 01 SQL POUR ORACLE

DELETE

� L’instruction DELETE est utilisée pour retirer des lignes de la base de données.

� La syntaxe de DELETE est :� DELETE FROM schema.table WHERE condition

41

� DELETE FROM schema.table WHERE condition� Avec:� SCHEMA est un paramètre optionnel pour identifier

le schéma de base de donnée utilisé pour le DELETE. Par défaut il s’agit du schéma de l’utilisateur.

� TABLE est obligatoire et est le nom de la table.� WHERE restreint l’opération DELETE.

Page 42: 01 SQL POUR ORACLE

Exemple DELETE� DELETE FROM addresses

WHERE adrs_id = (SELECT e.adrs_idFROM emp eWHERE e.last_name = ’DOE’ AND e.first_name = ’JOHN’);DELETE FROM emp e

42

� DELETE FROM emp eWHERE e.last_name = ’DOE’ AND e.first_name = ’JOHN’

� DELETE FROM deptWHERE adrs_id is null;

� Remarque : Une opération de suppression est permanente ! Unefois faite, il est Impossible de récupérer la ou les ligne(s)autrement que par une opération INSERT. Il n’y a pas decommande undo.

Page 43: 01 SQL POUR ORACLE

LE LANGAGE SQL

Langage de Définition de données (LDD)

Page 44: 01 SQL POUR ORACLE

Création de table (1)

� CREATE TABLE nom (définition d’une colonne | définition d’une contrainte ….)[ spécification de stockage ][définition de cluster]

44

[définition de cluster][données provenant d’une requête]

� Définition d’une colonne :Elément de colonne ::= nom type [DEFAULT expression] [contrainte de colonne]….

Page 45: 01 SQL POUR ORACLE

Création de table (2)� Contrainte de colonne ::=

[CONSTRAINT contrainte]

{ [NOT] NULL | {UNIQUE | PRIMARY KEY}

REFERENCES table [(colonne)] [ON DELETE CASCADE]

45

|CHECK (condition)}

{ [USING INDEXUSING [PCTFREE entier] [INITTRANS entier]

[TABLESPACE tablespace]

[STORAGE clause_storage]] [EXCEPTION INTO table | DISABLE}

Page 46: 01 SQL POUR ORACLE

Création de table (3)� CONSTRAINT sert à attribuer un nom à la contrainte à définir qui sera

sauvegardé dans le dictionnaire de données

� NULL spécifie que la colonne peut contenir des valeurs nulles.

46

� UNIQUE interdit d’avoir deux lignes ayant la même valeur pour cette colonne.

� PRIMARY KEY spécifie que la colonne est utilisée comme clé primaire. Même effet que UNIQUE sauf qu’elle n’accepte pas les valeurs nulles.

� REFERENCES définit une contrainte d’intégrité référentielle par rapport à une clé primaire ou unique.

Page 47: 01 SQL POUR ORACLE

Création de table (4)� Contrainte d’intégrité d’une table ::=

[CONSTRAINT contrainte]{ UNIQUE | PRIMARY KEY} (colonne [,colonne]…)| FOREIGN KEY (colonne, [colonne]…)REFERENCES table [(colonne)] [ON DELETE CASCADE]

47

REFERENCES table [(colonne)] [ON DELETE CASCADE]| CHECK (condition)}{ [USING INDEXUSING [PCTFREE entier] [INITTRANS entier] [TABLESPACE tablespace][STORAGE clause_storage]] [EXCEPTION INTO table | DISABLE}

FOREIGN KEY désigne une ou plusieurs colonnes comme une clé étrangère dans une contrainte d’intégrité référentielle.

Page 48: 01 SQL POUR ORACLE

Création de table (5)� 1- La table Client définit une clé primaire sur la colonne idclient, une

contrainte NOT NULL sur la colonne nom et une contrainte CHECK sur la colonne codepost.

� CREATE TABLE client (

48

(idclient NUMBER CONSTRAINT u_id PRIMARY KEY,nom CHAR(20) CONSTRAINT nn_nom NOT NULL,adresse CHAR(80),codepost NUMBER(5) CHECK (codepost BETWEEN

10000 AND 95999),ville CHAR(20),tel NUMBER(8)

);

Page 49: 01 SQL POUR ORACLE

Création de table (6)

� 2- La table article définit deux contraintes PRIMARY KEY et NOT NULL resp sur les colonnes idarticle et designation. Elle affecte une valeur par défaut égale à 0 pour la colonne qtestock.

CREATE TABLE article

49

� CREATE TABLE article

(

idarticle NUMBER CONSTRAINT c_idr PRIMARY KEY,

designation CHAR(20) CONSTRAINT nn_des NOT NULL,

prixunit NUMBER(7,2)

qtestock NUMBER DEFAULT 0

);

Page 50: 01 SQL POUR ORACLE

Création de table (7)� 2- Création d’une table ligne de commande nommée ligne_com en définissant les

contraintes d’intégrité suivante:� Une clé étrangère sur la colonne idarticle qui se réfère à idarticle de la table article.� Deux contraintes sur la colonne qtecom. La première n’autorise pas la saisie des valeurs

nulles et la seconde contrôle que la valeur saisie doit être supérieure à 0.� Une clé primaire composée des deux colonnes numcomet nuligne.

50

Une clé primaire composée des deux colonnes numcomet nuligne.

� CREATE TABLE ligne_com(

numcom NUMBERnuligne NUMBERidarticle NUMBER CONSTRAINT fk_ida REFERENCES

article(idarticle),qtecom NUMBER CONSTRAINT nn_qte NOT NULLCONSTRAINT check_qte CHECK (qtecom>0),PRIMARY KEY (numcom, nuligne)

);