Vous êtes sur la page 1sur 7

PLAN

Rappel sur le langage SQL Complment sur le langage SQL Programmation PL/SQL
lments de base du langage Les curseurs Procdures et fonctions Les exceptions Les dclencheurs

BASES DE DONNES AVANCES

Administration des utilisateurs

Hmida HMIDA

SQL
4

Rappel sur SQL

Structured Query Language Standard pour les SGBD (SQL3) Dfinit :


Langage de Dfinition des Donnes (LDD)
CREATE, ALTER, DROP

Langage de Manipulation des Donnes (LMD)


INSERT, UPDATE, DELETE

Langage dinterrogation de la base (SELECT) Langage de Contrle de laccs aux Donnes (LCD)
GRANT, REVOKE

LDD(1)
6

LDD(2)
Types de colonnes :
Char(n) : chane de longueur n fixe (remplir avec des blancs). Varchar2(n) : chane longueur variable de taille maximale n. Number(nc,d) : nombre entier ou rl avec nc chiffres dont d chiffres dcimaux. Aussi : integer, decimal, real.
Exemples : number, number(6,2), number(5), number(*,2)

Vocabulaire :

Table, colonne, ligne

Cration de table

CREATE TABLE<nom_table>( <colonne1> <type1> [not null] [unique] [<contrainte de colonne>], ......... <colonne n> <typen> [not null] [unique] [<contrainte de colonne>], [<contrainte(s) de table>] );

Date : date et heure. Long : varchar jusqu 2 GO BLOB : Binary Large Object ; donnes binaires (128TO)

LDD(3)
8

LDD(4)
Cration de table et SELECT
Enregistrer le rsultat dune requte dans une nouvelle table
CREATE TABLE nomTable AS SELECT . CREATE TABLE postes AS SELECT disntinct(poste) FROM EMP

Cration de table

Exemples

Exemple1 CREATE TABLE article ( ref VARCHAR(10) constraint pk_article primary key, nom VARCHAR(30) NOT NULL, prix DECIMAL(9,2), datemaj DATE) Exemple 2 CREATE TABLE article ( ref VARCHAR(10) constraint pk_article primary key, nom VARCHAR(30) NOT NULL, prix DECIMAL(9,2), datemaj DATE DEFAULT CURRE NT_DATE)

LDD(5)
10

LDD(6)
Contraintes dintgrit
Cl trangre
Niveau table
FOREIGN KEY (colonne1, colonne2,...) REFERENCES tableref[(col1, col2,...)] [ON DELETE CASCADE]

Contraintes dintgrit

CONSTRAINT nom-contrainte dfinition-contrainte Colonne obligatoire

NOT NULL Niveau colonne


REFERENCES tableref[(col1)] [ON DELETE CASCADE]

Cl primaire

PRIMARY KEY (colonne1, colonne2,...) PRIMARY KEY

Unicit Autre
CHECK (condition)

UNIQUE (colonne1, colonne2,...) UNIQUE

LDD(7)
12

LDD(8)
Manipulation des contraintes
ALTER TABLE EMP DROP CONSTRAINT NOM_UNIQUE ADD CONSTRAINT SAL_MIN CHECK(SAL + NVL(COMM,0) > 1000) RENAME CONSTRAINT NOM1 TO NOM2 MODIFY CONSTRAINT SAL_MIN DISABLE

11

Exemple

CREATE TABLE EMP ( MATR INTEGER CONSTRAINT KEMP PRIMARY KEY, NOME VARCHAR (10) CONSTRAINT NOM_UNIQUE UNIQUE CONSTRAINT MAJ CHECK (NOME = UPPER(NOME)), ......... DEPT INTEGER CONSTRAINT R_ DEPT REFERENCES DEP(DEPT) CONSTRAINT NDEPT CHECK (DEPT IN (10, 20, 30, 35, 40)))

LMD(1)
14

LMD(2)
Session et transaction
Savepoint nomPoint Commit Rollback [to nomPoint]

13

Insertion

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

Modification

UPDATE table SET col1 = exp1, col2 = exp2, ... WHERE prdicat UPDATE table SET (col1, col2,...) = (SELECT .. .) WHERE prdicat

Suppression

DELETE FROM table WHERE prdicat

Requtes dinterrogation(1)
16

Requtes dinterrogation(1)
Base donnes des exemples DEP(dept, nomD, lieu) EMP(matr, nomE, prenom, poste, dateEmb, sup, sal, comm, #dept) PROJET(codep, nomp, budget) PARTICIPATION(#codep, #matr, fonction)

15

Ordre SELECT : 6 clauses

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

Requtes dinterrogation(2)
18

Requtes dinterrogation(3)
Clause SELECT
Les pseudo-colonnes :
Rownum, rowid, sysdate, user, userid Exemple :
select rownum, nome from emp where sal > 2000 and rownum < 5 retrourne les 4 premiers employs avec un salaire > 2000 : numro + nome

17

Clause SELECT

SELECT [DISTINCT] * Ou SELECT [DISTINCT] exp1 [[AS] nom1], exp2 [[AS] nom2], ..... Exemples

SELECT * FROM DEP tous les dpartements SELECT DISTINCT POSTE FROM EMP les diffrents postes des eemploys SELECT EMP.NOME, SAL + NVL(COMM,0) AS "Salaire global" FROM EMP les nom des employs et leurs salaires globaux calculs

Requtes dinterrogation(4)
20

Requtes dinterrogation(5)
Clause WHERE
WHERE prdicat Prdicat : expression logique simple ou composs par les oprateurs logiques OR, AND, NOT Prdicat utilise les oprateurs de comparaison
exp1 = exp2, exp1 != exp2 exp1 < exp2, exp1 > exp2 exp1 <= exp2, exp1 >= exp2 exp1 BETWEEN exp2 AND exp3 exp1 LIKE exp2 (utilisant les jokers _ et %) exp1 IN (exp2, exp3,...) exp IS NUL L exp IS NOT NULL

19

Clause FROM

FROM table1 [synonyme1] , table2 [synonyme2] , ... Exemple

select nome, sal, sal/total*100 from emp, (select dept, sum(sal) as total from emp group by dept) TOTALDEPT where emp.dept = TOTALDEPT.dept

Requtes dinterrogation(6)
22

Requtes dinterrogation(7)
Clause HAVING
HAVING prdicat Comme WHERE mais sur les groupes dfinis par GROUP BY
Exemple
SELECT DEPT, COUNT(*) FROM EMP WHERE POSTE = 'SECRETAIRE ' GROUP BY DEPT HAVING COUNT(*) > 1 Les codes des dpartements avec le nombre de secretaires qui est >1

21

Clause GROUP BY

GROUP BY exp1, exp2,... Fonctions de groupes : Clause SELECT

AVG moyenne SUM somme MIN plus petite des valeurs MAX plus grande des valeurs VARIANCE variance STDDEV cart type (dviation standard) COUNT(*) nombre de lignes COUNT(col) nombre de valeurs non nulles de la colonne COUNT(DISTINCT col) nombre de valeurs non nul les diffrentes

Requtes dinterrogation(8)
24

Jointures(1)
Jointure interne (inner join)
Sous-ensemble du produit cartsien de 2 tables Exemple :
SELECT NOME , NOMD FROM EMP JOIN DEP ON EMP.DEPT = DEP.DEPT Avec la clause where SELECT NOM E, NOMD FROM EMP, DEP WHERE EMP. DEPT = DEP.DEPT Condition de jointure
qui-jointure : = Non qui : <,<=,>,>=,between, in

23

Clause ORDER BY

ORDER BY exp1 [DESC], exp2 [DESC], ... Tri par dfaut croissant

Jointures(2)
26

Jointures(2)
Jointure dune table avec elle-mme
Utilisation des synonymes

25

Jointure externe(outer join)

Afficher les lignes dont la valeur de la colonne de jointure est NULL La jointure interne prcdente naffiche pas les dpartement sans employs Solution :

SELECT NOME , NOMD FROM EMP RIGHT OUTER JOIN DEP ON EMP.DEPT = DEP.DEPT

SELECT EMP. NOME EMPLOYE, SUPE.NOME SUPERIEUR FROM EMP, EMP SUPE WHERE EMP.SUP = SUPE.MATR

RIGHT : pour afficher toutes les lignes de la table droite (DEP) par lajout de lignes virtuelles gauche LEFT OUTER JOIN, FULL OUTER JOIN