Introduction Et LDD

79
Cours:SGBD jointure

description

Introduction Et LDD

Transcript of Introduction Et LDD

SQL

Jointure interne

Jointure interneJointure n'affichant que les lignes ayant une correspondance dans les deux tables jointes.

Exemple , il serait possible de joindre les tablesemploy etdpartement pour obtenir un ensemble de rsultats montrant, pour chaque nom demploy, le nom de son dpartement .Dans le cas d'une jointure interne, les noms demploys non accompagns d'informations sur le dpartement et les dpartement non accompagns des noms des employs ne seront pas inclus dans l'ensemble des rsultats. select nomE, nom_Depfrom employe, deptartement where employe.dept = departement.dept

Autre syntaxe :

select nomE, nom_Depfrom employe INNER JOIN departementON employe.dept = departement.dept Clause WHERE76Interrogation de la base

Syntaxe gnraleSELECT FROM WHERE GROUP BY HAVING ORDER BY L'ordre des clauses est imposSELECT et FROM sont obligatoiresObjectifs des systmes de gestion de bases de donnes

Ces objectifs sont les suivants :[Indpendance physique]La faon dont les donnes sont dfinies doit tre indpendante des structures de stockages utilises.

[Indpendance logique]Un mme ensemble de donnes peut tre vu diffremment par des utilisateurs diffrents. Toutes ces visions personnelles des donnes doivent tre intgrs dans une vision globale. [Manipulations des donnes par des non informaticiens]Il faut pouvoir accder aux donnes sans savoir programmer ce qui signifie des langages ``quasi naturels''.

Objectifs des systmes de gestion de bases de donnes

[Efficacit des accs aux donnes]Ces langages doivent permettre d'obtenir des rponses aux interrogations en un temps ``raisonnable''. Ils doivent donc tre optimiss et, entre autres, il faut un mcanisme permettant de minimiser le nombre d'accs disques. Tout ceci, bien sur, de faon compltement transparente pour l'utilisateur.

[Administration centralise des donnes]Des visions diffrentes des donnes (entre autres) se rsolvent plus facilement si les donnes sont administres de faon centralise.[Non redondance des donnes]Afin d'viter les problmes lors des mises jour, chaque donne ne doit tre prsente qu'une seule fois dans la base.

[Cohrence des donnes]Les donnes sont soumises un certain nombre de contraintes d'intgrit qui dfinissent un tat cohrent de la base. Elles doivent pouvoir tre exprimes simplement et vrifiesautomatiquement chaque insertion, modification ou suppression des donnes.Objectifs des systmes de gestion de bases de donnes

[Partageabilit des donnes]Il s'agit de permettre plusieurs utilisateurs d'accder aux mmes donnes au mme moment. Si ce problme est simple rsoudre quand il s'agit uniquement 'interrogations et quand on est dans un contexte mono-utilisateur, cela n'est plus le cas quand il s'agit de modifications dans un contexte muti-utilisateurs. Il s'agit alors de pouvoir :permettre deux (ou plus) utilisateurs de modifier la mme donne ``en mme temps'' ;assurer un rsultat d'interrogation cohrent pour un utilisateur consultant une table pendant qu'un autre la modifie.[Scurit des donnes]Les donnes doivent pouvoir tre protges contre les accs non autoriss. Pour cela, il faut pouvoir associer chaque utilisateur des droits d'accs aux donnes. .Objectifs des systmes de gestion de bases de donnes[Rsistance aux pannes]Que se passe-t-il si une panne survient au milieu d'une modification, si certains fichierscontenant les donnes deviennent illisibles? Les pannes, bien qu'tant assez rares, se produisent quand mme de temps en temps. Il faut pouvoir, lorsque l'une d'elles arrive, rcuprer une base dans un tat ``sain''. Ainsi, aprs une panne intervenant au milieu d'une modification deux solutions sont possibles : soit rcuprer les donnes dans l'tat dans lequel elles taient avant la modification, soit terminer l'opration interrompue.

Malheureusement, ces objectifs ne sont pas toujours atteints

Concepts de basePour assurer ces objectifs (surtout les deux premiers), trois niveaux de description des donnes ont t dfinis par la norme ANSI/SPARC.Niveau interne

Description du stockage des donnes au niveau des units de stockage, des fichiers, ... Onappelle cette description le schma interne.

Niveau conceptuel

Description de la structure de toutes les donnes qui existent dans la base, description de leurs proprits (relations qui existent entre elles) c'est--dire de leur smantique inhrente, sans soucis d'implmentation physique ni de la faon dont chaque groupe de travail voudra s'en servir. On appelle cette description le schma conceptuel.

Niveau externeDescription pour chaque utilisateur de sa perception des donnes. On appelle cette description le schma externe ou vue.Concepts de baseLe rsultat de la conception d'une base de donnes sera une description des donnes.

description : * dfinir les proprits d'ensembles d'objets modliss dans la base de donnes

Cette description des donnes sera effectue en utilisant un modle de donnes. Ce dernier est un outil intellectuel utilis pour comprendre l'organisation logique des donnes.

Modle des donnes :* C'est un ensemble de concepts et de rgles pour les utiliser, permettant de construire avec des types de donnes une reprsentation de la ralit.

Un SGBD est caractris par le modle de description des donnes qu'il supporte. Les donnes sont dcrites sous la forme de ce modle, grce un langage de description des donnes. Cette description est appele schma. Les modles utiliss sont : rseau, relationnel, objet, ...

Concepts de baseUne fois la base de donnes spcifie, on peut y :insrer des donnes, les rcuprer, les modifier et les dtruire. C'est ce qu'on appelle manipuler les donnes. Les donnes peuvent tre manipules non seulement par un langage spcifique de manipulation des donnes mais aussi par des langages de programmation ``classiques'.

Composants des systmes de gestion de bases de donnesUn systme de gestion de bases de donnes va donc possder un certain nombre de composants logiciels et ce, quelque soit le modle de donnes qu'il supporte. On trouve donc des composants chargs de :La description des donnesCette partie sera constitue des outils (en gros des langages) permettant de dcrire la vision des donnes de chaque utilisateur et l'intgration dans une vision globale. On y trouve aussi les outils permettant de dcrire le stockage physique des donnes.La rcupration des donnesCette partie prend en charge l'interrogation et la modification des donnes et ce, de faon optimise. Elle est compose de langages de manipulation de donnes spcifiques et d'extensions de langages ``classiques''. Elle gre aussi les problmes de scurit.Composants des systmes de gestion de bases de donnesLa sauvegarde et la rcupration aprs pannesCette partie comporte des outils permettant de sauvegarder et de restaurer de faon explicite une base de donnes. Elle comporte aussi des mcanismes permettant, tant qu'une modification n'est pas finie, de pouvoir revenir l'tat de la base avant le dbut de cette modification.Les accs concurrents aux donnesC'est la partie charge du contrle de la concurrence des accs aux donnes. Elle doit tre telle que chaque utilisateur attende le moins possible ses donnes tout en tant certain d'obtenir des donnes cohrentes en cas de mises jour simultanes de la base.SGBD :conclusionSystmes de Gestion de Bases de Donnes (DataBase Management Systems - DBMS) :

Ensemble de logiciels systmes permettant aux utilisateurs d'insrer, de modifier, et de rechercher efficacement des donnes spcifiques dans une grande masse d'informations (pouvant atteindre plusieurs milliards d'octets) partage par de multiples utilisateurs

Exemples : MySQL, PostgreSQL (utilis en L3), Oracle,Microsoft SQLServer, etc.

SGBD ( 2/2)Principales fonctionnalits dun SGBD : Cration et mises jour de la structure de la basede donnes (par le concepteur et/ou le DBA DataBase Administrator) Administration de la base de donnes : gestion desutilisateurs, des droits daccs etc. (par ladministrateur DBA)Saisie et mises jour des donnes (par le concepteur et/ou les utilisateurs)Interrogation des donnes selon diffrents critreset/ou en effectuant des calculs (par les utilisateurs)

Exemple de SGBD: Oracle

SGBDR (Relationnel) qui utilise: le langage SQLLangage procdural PL/SQL (dit L4G) Nombreux programmes utilitairesSQL*PLUS : SQL interactif, avec quelques ajoutsSQL*FORMS : saisir/voir des donnes avec des FormulairesSQL*REPORTWRITER : rapports imprimsWebDB pour linterface avec le WebLe Langage SQLPrsentation de SQL

SQL=Structured Query Language c'est--dire Langage d'interrogation structur.Il a t conu par IBM dans les annes 70. Il est devenu le langage standard des systmes de gestion de bases de donnes (SGBD) relationnelles (SGBDR).C'est une Langage complet de gestion de bases de donnes relationnelles. Elle permet :Dinterroger (LID; Langage dInterrogation des Donnes :ordre SELECT)De mettre jour (LMD ; Langage de Manipulation des Donnes : ordres UPDATE, INSERT, DELETE) De dfinir les donnes (LDD ; Langage de Dfinition des donnes gres : ordres CREATE, ALTER, DROP),De contrler laccs aux donnes (LCD ; Langage de Contrle de laccs aux Donnes ordres GRANT,REVOKE)Norme SQL92 (ou SQL2)

Norme adopte en 1992 par l ISO (InternationalOrganisation for Standardization)Presque compltement implmente par les principaux SGBD : Oracle, DB2, Informix, MySQL, PostsgreSQL, Access, SQL Server, La norme SQL99 (ou SQL3) est dj l depuis longtemps mais elle est loin dtre implmente par tous ces SGBDObjets manipuls par SQLObjets manipuls par SQL

1. IdentificateursSQL utilise des identificateurs pour dsigner les objets qu'il manipule :utilisateurs, tables, colonnes, index, fonctions, etc.Un identificateur est un mot form d'au plus 30 caractres, commenant obligatoirement par une lettre de l'alphabet. Les caractres suivants peuvent tre une lettre, un chiffre, ou l'un des symboles # $ et _. SQL ne fait pas la diffrence entre les lettres minuscules et majuscules. Les voyelles accentues ne sont pas acceptes.

Un identificateur ne doit pas figurer dans la liste des mot cls rservs (voirmanuel de rfrence Oracle). Voici quelques mots cls que l'on risque d'utilisercomme identificateurs : ASSERT, ASSIGN, AUDIT, COMMENT, DATE,DECIMAL, DEFINITION, FILE, FORMAT, INDEX, LIST, MODE, OPTION,PARTITION, PRIVILEGES, PUBLIC, REF, REFERENCES, SELECT,SEQUENCE, SESSION, SET, TABLE, TYPE. Objets manipuls par SQL 2.Tables

Relations stockes sous forme de tables composes de lignes et de colonnesSQL92 : le nom dune table est prcd du nom dun schma (pour runir tous les objets lis un mme thme)Sous Oracle, le schma est remplac par le nom de lutilisateur qui a cr la table : L2_RSI.DEPTPar dfaut, le schma est le nom de lutilisateur connectExemple de table ; DEPARTEMENTDeptNomDLieu10FinancesTunis20RechercheSousse30Ventes SfaxExemple de table ; EMPLOYEMatrNomSal ComSupDept1780Imen25002200202200Seif3000 500101200Imed2500300220010Objets manipuls par SQL 2.ColonneToutes les donnes dune colonne sont dun mme typeIdentificateur unique pour les colonnes dune table, mais 2 colonnes dans 2 tables diffrentes peuvent avoir le mme nomLe nom complet dune colonne comprend le nom de la table laquelle elle appartient (obligatoire en cas dambigut) : DEPARTEMENT.dept, L2_RSI. DEPARTEMENT.deptTypes de donnesTypes de donnes SQL

Types numriquesTypes pour les chanes de caractresTypes temporels (dates, heures, minutes,)SQL2 na pas de type pour les donnes trs volumineuses telles que les images et les sonsSQL2 ne permet pas lutilisateur de crer sespropres typesTypes numriques (1)

Nombres entiers :SMALLINT sur 2 octetsINTEGER sur 4 octets virgule flottante :REALDOUBLE PRECISION (ou FLOAT)Constantes : 253.8, -10, 1.3E-5Types numriques (2)

Nombres dcimaux nombre fixe de dcimales :DECIMAL(nbChiffres, nbDcimales)NUMERIC(nbChiffres, nbDcimales)

NUMERIC(8, 2) ou DECIMAL(8, 2) : 6 chiffres avant la virgule et 2 aprsPrcision imposepour les calculs

Types chanes de caractresCHAR(longueur)chanes de caractres avec un nombre fixe de CaractresVARCHAR(longueurMaximum)chanes de caractres avec un nombre variable decaractres (mais un nombre maximum decaractres)CHAR(5) : chane de 5 caractresVARCHAR(20) : chane de 20 caractres au plusConstante : 'Comptabilit', 'Aujourdh''ui'Types temporels

DATE pour les datesTIME pour les heures, minutes et secondesTIMESTAMP pour un moment prcis : date etheures, minutes et secondes, avec une prcisionjusqu la microseconde (un millionime de secondeTypes numriques d'Oracle

Oracle accepte les types numriques SQL2 mais il les traduit dans ses propres typesNUMBERnombre virgule flottante avec jusqu' 38 chiffres SignificatifsNUMBER(nbChiffres [, nb-dcimales])nombre dcimal d'au plus nbChiffres chiffres dont nbdcimales aprs la virguleTypes chanes de caractres d'OracleCHAR, comme la norme SQL2VARCHAR est accept mais Oracle conseilled'utiliser VARCHAR2 qui a les mmes propritsTypes temporels d'Oracle

Le type DATE remplace les types DATE et TIMEde SQL2DATE correspond une date avec une prcision jusqu' la secondeConstantes : '10/05/1998', '10 MAY 1998

le format dpend de la localisation de la base

Langage de dfinitiondes donnes (LDD)

Cration dune table

Cration dune table

CREATE TABLE table (colonne1 type1,colonne2 type2,. . .) ;

Exemple create table article (ref char(5) not null,Nom varchar(20),Prix numeric(9,2),dateMAJ date);

Option not nullsi la colonnedoit obligatoirementtre renseigneValeur par dfaut

On peut donner une valeur par dfaut pour unecolonne :create table departement (numDept integer not null,nomDept varchar(20),ville varchar(30) default Tunis');On peut aussi donner une fonction comme valeurpar dfaut ; par exemple, default sysdateDESCRIBE

Cette commande SQL*PLUS dOracle (pas SQL)affiche une description des colonnes dune table :SQL > describe article;

Name Null ? TypeREF Not null CHAR(5)NOM VARCHAR(20)PRIX NUMBER(9,2)DATEMAJ DATEMme si le typedonn lacration estDECIMAL

Contraintes dintgritDfinitionUne contrainte dintgrit est une contrainte que doivent vrifier les donnes dune tableUne commande est annule par le SGBD si sonexcution viole une des contraintesTypes de contraintes d'intgrit

PRIMARY KEY : cl primaireFOREIGN KEY REFERENCES : cl trangreUNIQUE : 2 lignes ne peuvent avoir la mmevaleur pour les colonnes spcifiesCHECK : contrainte de domaine, ou autre ; porte sur une seule ligneTypes de contraintes d'intgrit

2 types de contraintes :contrainte de colonne (concerne une seule colonne)contrainte de tableDfinition des contraintes

Les contraintes sont dfinies dans les commandesCREATE (ou ALTER) TABLE l'intrieur des dfinitions de colonnes pour les contraintes de colonneau mme niveau que les dfinitions de colonnes pour les contraintes de tableCONSTRAINT nomContrainte dfinitionContrainteCl primaire

Si la cl primaire nest forme que dune seulecolonne, le plus simple est dajouter une contrainte decolonne :create table emp (matr integer constraint pkemp primary key,. . . );Sinon, il faut ajouter une contrainte de table :create table participation (matr integer,codeP integer,. . .,Constraint pkpar primary key(matr, codeP));Une erreur ne pas faireSi une table a une cl primaire forme de 2 colonnes, il ne faut pas dclarer 2 contraintes de colonne Il faut dclarer une seule contrainte de table portant sur les 2 colonnes : constraint pkpar primary key(matr, codeP)Aucune des colonnes de la cl primaire ne peutavoir la valeur null41Contrainte UNIQUE

2 lignes de la table ne pourront avoir la mmevaleur (sauf NULL)Correspond un identificateur (cl candidate si minimal), si on ajoute une contrainte NOT NULL Optionnel si colonneRfrence est cl primaire

Cl trangreSi une seule colonne forme la cl trangre, le plus simple est dutiliser une contrainte de colonne :create table employe (. . .,dept integer constraint r_dept references departement (dept));Cl trangre

Peut tre une contrainte de table :FOREIGN KEY (colonne1, colonne2,)REFERENCES table-ref [(col1, col2,)]Exemple :create table employe (. . .,dept integer,constraint r_dept foreign key(dept) references departement (dept))Il faut ajouterforeign keydept doit tre clprimaire, ou uniqueCl trangre

Option ON DELETE CASCADEcreate table emp (. . .dept integer constraint r_dept references dept)

On ne peut supprimer un dpartement s'il estrfrenc par une ligne de la table employe

create table emp (. . .dept number(2)constraint r_dept references departement on delete cascade)

La suppression d'un dpartement entrane automatiquement la suppression de toutes les lignes de la table employe qui rfrencent au table dpartementAutres options pour les cls trangreson delete set null4 autres options de SQL2 pas implmentes parOracle :on delete set defaulton update cascadeon update set nullon update set defaultExemples divers de contraintes

create table employe (Matr integer constraint pkemp primary key,nomE varchar(30) constraint nom_unique uniqueConstraint maj check (nomE = upper(nomE)),Dept smallint constraint r_emp_dept references departement constraint ndept check (dept in (10, 20, 30, 40)));Cration de table par copieCREATE TABLE table (col1 type, )AS select create table dept2 (cle integer, nom varchar(20))as select dept, nomd from departement;

Create table dept10as select * from employe where dept = 10;Modifier la dfinition d'une table

ALTER TABLE tableADD (col1 type1, col2 type2,);

ALTER TABLE tableMODIFY (col1 type1, col2 type2,);

ALTER TABLE tableDROP COLUMN colonne;Modifier la dfinition d'une table

On ne peut modifier une colonne que si lacolonne ne contient que des valeurs null ou si lanouvelle dfinition est compatible avec lesvaleurs dj entres dans cette colonneExemples

Ajouter une colonne dans la table employeAlter table employeadd (situ_famille char(1), nb Enfants smallint);

Modifier la taille dune colonne dans la table emp Alter table employemodify (situ_famille char(2));

Supprimer une colonne

Tous les SGBDs ne permettent pas de supprimerune colonne dune table Si cest impossible, on peut mettre toutes lesvaleurs de la colonne null pour gagner de la placeOn peut aussi utiliser create table as pour transfrer les autres donnes dans une nouvelle table qui na pas cette colonne supprimer la 1re table renommer la nouvelle tableSupprimer une colonne (Oracle 9i)ALTER TABLE employe DROP COLUMN Nom_colonnenest disponible sous Oracle que depuis laversion 9iIl nest pas possible de supprimer une colonne rfrence par une cl trangre sur laquelle un index a t construit Exemple :alter table empDrop column situ_famille;Renommer une tableOn peut renommer une table :RENAME ancienNom TO nouveauNom Commande quivalente :ALTER TABLE ancienNomRENAME TO nouveauNomLangage de manipulationdes donnes (LMD)Commandes demanipulation des donnes

INSERT pour ajouter des lignesUPDATE pour modifier des lignes DELETE pour supprimer des lignesInsertion

INSERT INTO table [(colonne1, colonne2,)]VALUES (valeur1, valeur2,)ouINSERT INTO table [(colonne1, colonne2,)]select La liste des colonnes est optionnelle ; par dfaut,toutes les colonnes sont dans lordre donn lors de la cration de la tableSi la commande comporte une liste, les colonnesqui ne sont pas dans la liste auront la valeur NULLExemples

insert into deptvalues (10, 'Finance', 'Paris');

insert into dept (lieu, nomD, dept)values ('Grenoble', 'Recherche', 20);

insert into emp (matr, nomE, dept, sal)select matr + 100, nomE, 60, sal * 0.15from empwhere dept = 10;Modification

UPDATE tableSET colonne1 = expr1, colonne2 = expr2, [ WHERE prdicat ]ouUPDATE table [ synonyme ]SET (colonne1, colonne2, ) = (select )Toutes les lignespar dfaut

Ne doit renvoyerqu'une seule ligneExemples

update empset dept = 10where nomE = ALI';

update empset sal = sal * 1.1Where poste = 'Commercial';Suppressions

DELETE FROM table[ WHERE prdicat ]Attention ! s'il n'y a pas de clause WHERE, toutes les lignes sont supprimesExemple :delete from employewhere dept = 10;Interrogation de la base Clause SELECT

select [distinct] expression1 [ [AS] nom1],expression2 [ [AS] nom2],. . .nom1 :en-tte de la colonne (entre guillemets si mot-clef ou si contient plusieurs mots)alias pour dsigner la colonne dans une autre partie du selectselect *Toutes les colonnesSELECT SIMPLESELECT expression1, expression2, FROM tableWHERE prdicat;Exemplesselect nomE, poste from employe;select * from departement;select distinct poste from employe;

select dans une expressionselect nomE, sal + comm from emp;select matr, nomE, sal * 1.15 from empwhere sal + comm >= 12500;select nomE, sal / (select sum(sal) from emp) * 100from emp;

Select nomE, sal + coalesce(comm, 0) as "Salaire Total"from emp;select dans une expression

On peut utiliser lalias pour trier par ordredcroissant des salaires :select nomE, sal*12 as salaire_annuelfrom emporder by salaire_annuel desc ;Clause FROM

FROM table1 [synonyme1], table2 [synonyme2], Produit cartsien des tables sil y en a plusieurs Possible de se restreindre un sous-ensemble du produit cartsien (voir jointure)Clause FROM :Exempleselect B.dept, A.nomDfrom departement A, departement B

DEPT NOMD---------- ------------30 VENTES20 VENTES10 VENTES30 RECHERCHE20 RECHERCHE10 RECHERCHE30 FINANCE

Clause FROMCertains SGBDs (et la norme SQL-2) permettentl'utilisation d'un SELECT la place du nom d'unetable :select nomE, salaire, salaire / total * 100 Pourcentagefrom employe, (select sum(salaire) as total from employe);Clause WHERE

La clause WHERE comporte de nombreuses possibilits :

oprateurs de comparaisonoprateurs logiquesJointuressous-interrogations

Clause WHERE Oprateurs de comparaison

=, !=, , =, BETWEEN, LIKE, NOT LIKE,IN, NOT IN, IS NULL, IS NOT NULLLIKE permet d'utiliser des jokers :% pour une chane de caractres de longueur quelconque_ pour un seul caractreAttention,expression = NULL nest jamais vrai,il faut utiliser expression IS NULL

Clause WHEREOprateurs de comparaison Exemplesselect * from emp where poste = 'Secrtaire';select * from emp;where sal between 10000 and 15000;select * from emp where dept in (10, 30);select * from emp where comm is not null;select * from emp where nomE like '%A%';Oprateurs logiques

AND, OR, NOTExemples :select nomE from empwhere dept = 30and (sal > 10000 or commission is null);

select * from empwhere not (poste = 'Directeur or poste ='Secrtaire'); et si on met and la place de or ? Clause WHERELes jointuresLorsque que vous ralisez une jointure de tables, le type de cette jointure influe sur les lignes affiches dans l'ensemble des rsultats.Voici les diffrents types de jointures pouvant tre crs:Jointure interneJointure externe

4

Jointure interne:Jointure de plus de 2 tables

Exemple , il serait possible de joindre les tablesemploy , projet, participation pour obtenir un ensemble de rsultats montrant, pour chaque nom demploy, le nom de projet sur lequel il travaille ..

select nome, nompfrom employe, participation, projetwhere employe.matr = participation.matrand participation.codeP = projet.codeP

Autre syntaxe :

select nome, nompfrom employe join participationon employe.matr = participation.matrjoin projeton participation.codep = projet.codep Clause WHEREJointure interne :Jointure d'une table avec elle-mme

Alias indispensable pour le nom de la table afin de lever lambigut sur les colonnes :

select employe.nomE "Employ", supe.nomE "Suprieur"from employe join employe supeOn employe.sup = supe.matr Clause WHEREJointure naturelle

La jointure seffectue sur toutes les colonnes quiont le mme nom dans les 2 tables ; ces colonnes ne sont pas rptes dans la jointure Les colonnes qui participent la jointure ne doivent tre prfixes par un nom de tableselect nomE, nomD, deptfrom employe NATURAL JOIN departement;select nome, nompfrom employeNATURAL JOIN participation NATURAL JOIN projet Clause WHERE