• Aucun résultat trouvé

Cours langages SQL complet – Cours et formation gratuit

N/A
N/A
Protected

Academic year: 2022

Partager "Cours langages SQL complet – Cours et formation gratuit"

Copied!
29
0
0

Texte intégral

(1)

LANGAGES SQL

Oracle

(2)

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:198 7 => 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..

(3)

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

(4)

Utilisation

 Programme => middleware => sgbd

 Programme + embedded sql =>

sgbd

 Programme => sgbd + stored proc,

triggers ..

(5)

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)

(6)

DDL : Tables

 Création de table

CREATE TABLE [schéma.]nomTable (

colonne1 type1 [DEFAULT valeur1] [NOT NULL]

[, colonne2 type2 [DEFAULT valeur2] [NOT NULL] ] [CONSTRAINT nomContrainte1 typeContrainte1]…

) ;

(7)

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) ;

(8)

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)

(9)

DDL : Index

CREATE INDEX

{ UNIQUE | BITMAP } [schéma.]nomIndex

ON [schéma.]nomTable ( {colonne1 | expressionColonne1 } [ASC |DESC ]

…) ;

(10)

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.

(11)

Les Vues

CREATE VIEW nom_vue AS

SELECT colonne1, colonne2, ...

FROM table WHERE condition [ WITH CHECK OPTION ]

(12)

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;

(13)

Modification

comportementales

ALTER TABLE [schéma.]nomTable ADD [CONSTRAINT nomContrainte]

typeContrainte;

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

ALTER TABLE [schéma.]nomTable

DISABLE CONSTRAINT nomContrainte [CASCADE] [ { KEEP | DROP } INDEX ] ;

ALTER TABLE [schéma.]nomTable

ENABLE [ VALIDATE | NOVALIDATE ] CONSTRAINT nomContrainte

[USING INDEX ClauseIndex] [EXCEPTIONS INTO tableErreurs];

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

ALTER TABLE Avion ENABLE CONSTRAINT nn_proprio;

(14)

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 }

(15)

Manipulation : Insertion

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

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

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

SELECT ...

(16)

Manipulation : Modification

 UPDATE table

SET col1 = exp1, col2 = exp2, ...

WHERE prédicat

 UPDATE table

SET (col1, col2,...) = (SELECT ...)

WHERE prédicat

(17)

Manipulation : Suppression

 DELETE FROM table

WHERE prédicat

(18)

Interrogation des données

SELECT projection FROM jointure

WHERE prédicat

GROUP BY agrégation HAVING prédicat

ORDER BY champs asc|desc

(19)

Select : projection

 Liste des champs

(schema.table.colonne) séparé par des virgules

Select 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

(20)

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 …

)

(21)

Where : prédicat

 =, <>, <, >, <=, >=

 and , or , not

 expression between val1 and val2

 Is NULL, is not NULL

 In (val1, val2 , val3, …., valn)

 not in (…)

 Like ,% , _

(22)

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

(23)

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

(24)

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) RR

Like 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)

(25)

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.

(26)

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

(27)

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

(28)

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 date

last_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

(29)

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

Références

Documents relatifs

Vous pouvez utiliser librement ce fichier, mais sa diffusion (sous sa forme originale ou après modification). est soumise à accord préalable

Vous pouvez utiliser librement ce fichier, mais sa diffusion (sous sa forme originale ou après modification). est soumise à accord préalable

© Hugolescargot.com Retrouvez d’autres fiches scolaires sur le site d’Hugo l’escargot.. TANGRAM FACILE -

Etant donn´ ee la classe PriorityQueueObject, on vous demande de pro- grammer une classe PriorityQueueHeap qui impl´ emente les queues de pri- orit´ e au moyen des heaps

Certains préfèrent utiliser un extrait préparé de venin d’abeille comme Apitox ® , sous forme de capsules prêtes à l’emploi, ou d’aiguilles

Cliquer sur Non pour ne pas laisser ACCESS vous créer automatiquement une clé primaire.. Vous aurez toujours la possibilité de définir une clé primaire

(ou cliquer la flèche à droite de la zone puis cliquer Ouvrir en lecture seule ou Ouvrir une copie ou si le document est en format HTML, Ouvrir dans un navigateur). UTILISATION

Cette opération se fait manuellement, elle a pour objectif d’éliminer les olives endommagés (tachées, ridées, défectueuses) qui ne répondent pas aux critères de qualité dans