Upload
nayd-nabil
View
427
Download
0
Tags:
Embed Size (px)
Citation preview
LANGAGES SQLOracle
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..
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
Utilisation
Programme => middleware => sgbd Programme + embedded sql =>
sgbd Programme => sgbd + stored proc,
triggers ..
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)
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]…) ;
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) ;
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)
DDL : Index
CREATE INDEX{ UNIQUE | BITMAP } [schéma.]nomIndexON [schéma.]nomTable ( {colonne1 | expressionColonne1 } [ASC |DESC ] …) ;
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.
Les Vues
CREATE VIEW nom_vueAS SELECT colonne1, colonne2, ... FROM table WHERE condition[ WITH CHECK OPTION ]
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;
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;
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 }
Manipulation : Insertion
INSERT INTO table VALUES (val1,...,valn )
INSERT INTO table (col1,..., coln ) VALUES (val1,...,valn )
INSERT INTO table (col1,..., coln ) SELECT ...
Manipulation : Modification UPDATE table
SET col1 = exp1, col2 = exp2, ...WHERE prédicat
UPDATE tableSET (col1, col2,...) = (SELECT ...)WHERE prédicat
Manipulation : Suppression DELETE FROM table
WHERE prédicat
Interrogation des données
SELECT projectionFROM jointureWHERE prédicatGROUP BY agrégationHAVING prédicatORDER BY champs asc|desc
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
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 … )
Where : prédicat
=, <>, <, >, <=, >= and , or , not expression between val1 and val2 Is NULL, is not NULL In (val1, val2 , val3, …., valn) not in (…) Like ,% , _
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
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
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)
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.
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
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
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
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