29
LANGAGES SQL Oracle

Oracle : extension du langage SQL

Embed Size (px)

Citation preview

Page 1: Oracle : extension du langage SQL

LANGAGES SQLOracle

Page 2: Oracle : extension du langage SQL

Historique

1970 IBM => System-R, a implanté le modèle relationnel au travers du langage SEQUEL (Stuctured English as QUEry Language), rebaptisé par la suite SQL (Structured Query Language).

1979 Relational Software, Inc (Oracle corp.) : première version commerciale

1986 recommandation AINSI ISO/CEI 9075:1987 => SQL1 : compromis entre

constructeurs ISO/CEI 9075:1992 => SQL2 : entry – transitional

– intermediate – full level ISO/CEI 9075:1999 => SQL3 : concepts objets,

collections, entrepôts de données, séries temporelles, accès à des sources non SQL, réplication des données, etc..

Page 3: Oracle : extension du langage SQL

Caractéristiques

Depuis 1986 N’est pas complet : Impedance

mismatch Peut être embedded : interfacé avec

des langages de 3ème génération (c, cobol ..) ou plus (c++, java, c# ..)

Langage déclaratif : décrire les résultats attendus sans se soucier de la manière de les obtenir

Page 4: Oracle : extension du langage SQL

Utilisation

Programme => middleware => sgbd Programme + embedded sql =>

sgbd Programme => sgbd + stored proc,

triggers ..

Page 5: Oracle : extension du langage SQL

Un langage plusieurs aspects

Ordres SQL Aspect du langage

CREATE – ALTER – DROP - COMMENT – RENAME – TRUNCATE

Définition des données (LDD)

INSERT – UPDATE – DELETE – MERGE – LOCK TABLE

Manipulation des données (LMD)

SELECT Interrogation des données (LID)

GRANT – REVOKE – COMMIT – ROLLBACK – SAVEPOINT – SET TRANSACTION

Contrôle des données (LCD)

Page 6: Oracle : extension du langage SQL

DDL : Tables

Création de tableCREATE TABLE [schéma.]nomTable(

colonne1 type1 [DEFAULT valeur1] [NOT NULL][, colonne2 type2 [DEFAULT valeur2] [NOT

NULL] ][CONSTRAINT nomContrainte1

typeContrainte1]…) ;

Page 7: Oracle : extension du langage SQL

DDL : Tables

● caractères (CHAR, NCHAR, VARCHAR2, NVARCHAR2, CLOB, NCLOB, LONG) ;● valeurs numériques NUMBER ;● date/heure (DATE, INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE) ;● données binaires (BLOB, BFILE, RAW, LONG RAW) ;

Page 8: Oracle : extension du langage SQL

DDL : contraintes

CONSTRAINT nomContrainte• UNIQUE (colonne1 [,colonne2]…)• PRIMARY KEY (colonne1 [,colonne2]…)• FOREIGN KEY (colonne1 [,colonne2]…)REFERENCES [schéma.]nomTablePere (colonne1 [,colonne2]…)[ON DELETE { CASCADE | SET NULL }]• CHECK (condition)

Page 9: Oracle : extension du langage SQL

DDL : Index

CREATE INDEX{ UNIQUE | BITMAP } [schéma.]nomIndexON [schéma.]nomTable ( {colonne1 | expressionColonne1 } [ASC |DESC ] …) ;

Page 10: Oracle : extension du langage SQL

Index

Un index ralentit les rafraîchissements de la base (conséquence de la mise à jour de l’arbre ou des bitmaps). En revanche il accélère les accès ;

Il est conseillé de créer des index sur des colonnes (majoritairement des clés étrangères) utilisées dans les clauses de jointures;

Les index bitmaps sont conseillés quand il y a peu de valeurs distinctes de la (ou des) colonne(s) à indexer. Dans le cas inverse, utilisez un index B-tree.

Les index sont pénalisants lorsqu’ils sont définis sur des colonnes très souvent modifiées ou si la table contient peu de lignes.

Page 11: Oracle : extension du langage SQL

Les Vues

CREATE VIEW nom_vueAS SELECT colonne1, colonne2, ... FROM table WHERE condition[ WITH CHECK OPTION ]

Page 12: Oracle : extension du langage SQL

Modifications structurelles DROP TABLE [schéma.]nomTable [CASCADE

CONSTRAINTS]; RENAME ancienNom TO nouveauNom; ALTER TABLE ancienNom RENAME TO nouveauNom; ALTER TABLE Pilote ADD (compa VARCHAR2(4)

DEFAULT 'AF',ville VARCHAR2(30) DEFAULT 'Paris' NOT NULL);

ALTER TABLE Pilote RENAME COLUMN ville TO adresse;

ALTER TABLE Pilote MODIFY compa CHAR(4) NOT NULL;

ALTER TABLE Pilote DROP COLUMN adresse; ALTER TABLE Pilote SET UNUSED COLUMN compa;

ALTER TABLE Pilote DROP UNUSED COLUMNS;

Page 13: Oracle : extension du langage SQL

Modification comportementales ALTER TABLE [schéma.]nomTable

ADD [CONSTRAINT nomContrainte] typeContrainte;

ALTER TABLE [schéma.]nomTable DROP CONSTRAINT nomContrainte [CASCADE];

ALTER TABLE [schéma.]nomTableDISABLE CONSTRAINT nomContrainte[CASCADE] [ { KEEP | DROP } INDEX ] ;

ALTER TABLE [schéma.]nomTableENABLE [ VALIDATE | NOVALIDATE ] CONSTRAINT nomContrainte[USING INDEX ClauseIndex] [EXCEPTIONS INTO tableErreurs];

ALTER TABLE Avion ENABLE CONSTRAINT pk_AvionUSING INDEX (CREATE UNIQUE INDEX pk_Avion ON Avion (immat));ALTER TABLE Avion ENABLE CONSTRAINT nn_proprio;

Page 14: Oracle : extension du langage SQL

Modification comportementales ENABLE vérifie les mises à jour à venir (insertions et

nouvelles modifications de la table) ; DISABLE autorise toute mise à jour ; VALIDATE vérifie que les données courantes de la table

respectent la contrainte ; NOT DEFERRABLE INITIALLY IMMEDIATE. DEFERRABLE INITIALLY DEFERRED DEFERRABLE INITIALLY IMMEDIATE SET CONSTRAINT fk_Avion_comp_Compag DEFERRED; SET CONSTRAINTS ALL DEFERRED; ALTER SESSION SET CONSTRAINTS = { IMMEDIATE

| DEFERRED | DEFAULT }

Page 15: Oracle : extension du langage SQL

Manipulation : Insertion

INSERT INTO table VALUES (val1,...,valn )

INSERT INTO table (col1,..., coln ) VALUES (val1,...,valn )

INSERT INTO table (col1,..., coln ) SELECT ...

Page 16: Oracle : extension du langage SQL

Manipulation : Modification UPDATE table

SET col1 = exp1, col2 = exp2, ...WHERE prédicat

UPDATE tableSET (col1, col2,...) = (SELECT ...)WHERE prédicat

Page 17: Oracle : extension du langage SQL

Manipulation : Suppression DELETE FROM table

WHERE prédicat

Page 18: Oracle : extension du langage SQL

Interrogation des données

SELECT projectionFROM jointureWHERE prédicatGROUP BY agrégationHAVING prédicatORDER BY champs asc|desc

Page 19: Oracle : extension du langage SQL

Select : projection

Liste des champs (schema.table.colonne) séparé par des virgulesSelect client.nom, produit.nom, prix

Expression (calcul, conversion, appel de fonction …)Select prix * qte as montant, to_char(date_achat,’YYYY-MM-DD’) as « date d’achat »

Une constante (valeur)select nom, ‘dirigeant’ as role

Page 20: Oracle : extension du langage SQL

From : Jointure

Après la clause from on met une liste de tables

Par défaut le SGBD effectuera le produit cartésien (cross join) de toutes les tables

Il faut indiquer la jointure join/ natural join / inner join / left|right outer join

On utilisera des alias de tables (synonymes) pour une jointure réflexive (table ayant plusieurs sens: employé =subordonné et supérieur, membre = acheteur et vendeur … )

Page 21: Oracle : extension du langage SQL

Where : prédicat

=, <>, <, >, <=, >= and , or , not expression between val1 and val2 Is NULL, is not NULL In (val1, val2 , val3, …., valn) not in (…) Like ,% , _

Page 22: Oracle : extension du langage SQL

Agrégation

Fonctions : SUM, COUNT, MIN, MAX, AVG

Mettre les champs de groupement dans la clause GROUP BY

Les conditions sur les fonctions d’agrégation dans la clause HAVING

La fonction COUNT compte le nombre d’enregistrements et non le nombre de valeur du champs en paramètre

Page 23: Oracle : extension du langage SQL

Extensions SQL

La pseudo-colonne ROWNUM La pseudo-table DUAL Sysdate

Concaténation || Les Conversions

TO_NUMBER TO_CHAR TO_DATE (to_date('11/07/1997 19:13:00','DD/MM/YYYY HH24:MI:SS')) NVL(exp1,exp2) -prend lexp2 si exp1 est nulle

Page 24: Oracle : extension du langage SQL

Date et Heure

MM Numeric month (e.g., 07)

MON Abbreviated month name (e.g., JUL)

MONTH Full month name (e.g., JULY)

DD Day of month (e.g., 24)

DY Abbreviated name of day (e.g., FRI)

YYYY 4-digit year (e.g., 1998)

YY Last 2 digits of the year (e.g., 98)

RRLike YY, but the two digits are ``rounded'' to a year in the range 1950 to 2049. Thus, 06 is considered 2006 instead of 1906

AM (or PM) Meridian indicator

HH Hour of day (1-12)

HH24 Hour of day (0-23)

MI Minute (0-59)

SS Second (0-59)

Page 25: Oracle : extension du langage SQL

Extensions SQL : les fonctions abs(nombre) valeur absolue de nombre ceil(nombre) plus petit entier plus grand ou égal

à nombre floor(nombre) plus grand entier inférieur ou égal

à nombre mod(nombre1,nombre2) reste de la division

entière (le quotient est entier) de nombre1 par nombre2

power(nombre1,nombre2) nombre1 élevé à la puissance nombre2 qui doit être entier

round(nombre1,nombre2) arrondit nombre1 à nombre2 chiffres après la virgule si nombre2>0, à -nombre2 chiffres avant la virgule si nombre2<0.

sign(nombre) -1 si nombre<0 0 si nombre=0 +1 si nombre>0

sqrt(nombre) racine carrée de nombre si nombre>=0 NULL si nombre<0

trunc(nombre1,nombre2) nombre1 est tronqué à nombre2 chiffres après la virgule si nombre2>0 ou à -nombre2 chiffres avant la virgule si nombre2<0.

Page 26: Oracle : extension du langage SQL

Extensions SQL : les fonctions

chr(nombre) caractère de code ASCII nombre initcap(chaine) Met tous les mots de chaîne en

minuscules sauf la première lettre mise en majuscule

lower(chaine) met chaine en minuscules (<>upper)

lpad(chaine1,n,chaine2) met chaine1 sur n positions, chaine1 étant cadrée à droite. Les caractères restant à gauche sont remplis par chaine2.

ltrim(chaine1,chaine2) Les caractères de gauche de chaine1 sont supprimés jusqu'à rencontrer un caractère qui ne se trouve pas dans chaine2.

replace(chaine1,chaine2,chaine3) remplace chaine2 par chaine3 dans chaine1.

rpad(chaine1,n,chaine2) idem lpad mais à droite trim(chaine1,chaine2) idem ltrim mais à droite

Page 27: Oracle : extension du langage SQL

Extensions SQL : les fonctions

substr(chaine,p,nombre) sous-chaîne de chaine de nombre caractères commençant en position p.

translate(chaine,texte,traduction) remplace dans chaîne tout caractère se trouvant dans texte par le caractère correspondant se trouvant dans

ascii(caractère) code ASCII de caractère instr(chaine1,chaine2,p,o) position de la o ième

occurrence de chaine2 dans chaine1, la recherche commençant à la position p de chaine1.

length(chaine) nombre de caractères de chaine

Page 28: Oracle : extension du langage SQL

addate(date,n) date augmentée de n mois. Le résultat est une date.addate('01-jan-91',3)='01-apr-91'

last_day(date) date du dernier jour du mois contenu dans datelast_day('01-jan-91')='31-jan-91'

months_between(date1,date2) nombre de mois entre date1 et date2. La partie décimale représente le pourcentage d'un mois de 31 jours. Si date1<date2 le résultat est >0 sinon il est <0.month_between('01-jan-91','14-feb-91')=-1.4193548

next_day(date,jour) donne la date du jour indiqué dans la semaine qui suit date. next_day('01-jan-91','monday')='07-jan-91'

Extensions SQL : les fonctions

Page 29: Oracle : extension du langage SQL

trunc(date,[format]) tronque date selon le format indiqué. Par défaut, c'est la composante heure qui est supprimée.Formats : year : tronque au 1er janvier de l'année de date month : tronque au 1er du mois de date day : tronque au dimanche qui précède date.

round(date,format) date arrondie selon le format préciséFormats : year : arrondit au 1er janvier le plus proche month : arrondit au 1er du mois le plus proche day : arrondit au dimanche le plus proche

Extensions SQL : les fonctions