• Aucun résultat trouvé

SQL Le langage de définition des données de SQL

N/A
N/A
Protected

Academic year: 2022

Partager "SQL Le langage de définition des données de SQL"

Copied!
6
0
0

Texte intégral

(1)

SQL

Le langage de définition des données de SQL

Bases de Données Relationnelles

BD.5.2

Introduction

!

SQL : Structured Query Language

!

SQL est normalisé

"

SQL 2: adopté (SQL 92)

"

SQL 3: adopté (SQL 99)

!

Standard d'accès aux bases de données

"

relationnelles

"

et relationnel-objets

!

Ce chapitre du cours : SQL relationnel uniquement

BD.5.3

SQL : Trois langages

!

Langage de définition de données (LDD/DDL)

"création de relations : CREATE TABLE

"modification de relations: ALTER TABLE

"suppression de relations: DROP TABLE

"vues, index …. : CREATE VIEW ...

!

Langage de manipulation de données (LMD /DML)

"insertion de tuples: INSERT

"mise à jour des tuples: UPDATE

"suppression de tuples: DELETE

!

Langage de requêtes (LMD/DML)

"SELECT ….... FROM ... WHERE ...

BD.5.4

Terminologie

!

Relation –> table

!

Tuple –> ligne (row)

!

Attribut –> colonne (column)

!

Identifiant –> clé primaire (primary key) clé secondaire (unique)

!

Identifiant externe

–> clé externe (foreign key)

BD.5.5

Langage de Définition de Données

!

Commandes pour créer, modifier et supprimer les éléments du schéma (table, vue, index...)

!

CREATE TABLE : créer une table

!

CREATE VIEW : créer une vue particulière sur les données à partir d’un SELECT

=> table dérivée

!

DROP TABLE / VIEW : supprimer une table ou une vue

!

ALTER TABLE / VIEW : modifier une table ou une vue.

BD.5.6

CREATE TABLE

!

Commande créant une table en donnant son nom, ses attributs et ses contraintes

!

CREATE TABLE nom-table

( {nom-col type-col [DEFAULT valeur]

[ [CONSTRAINT] contrainte-col] }*

[ [CONSTRAINT] contrainte-table ]* ) | AS requête-SQL ;

!

Légende :

"{a | b} : a ou b

"[option]

"* : applicable autant de fois que souhaité

"mot en capitale : mot clé

(2)

BD.5.7

Deux CREATE TABLE

! CREATE TABLE nom_table

( {nom-col type-col [DEFAULT val] [ [CONSTRAINT] contrainte-col] }*

[ [CONSTRAINT] contrainte-table]* ) | AS requête-SQL ;

!

CREATE TABLE Doctorant

( nom VARCHAR(20), prénom VARCHAR(15),

année_insc DECIMAL(4) DEFAULT 2006 ) ;

!

CREATE TABLE Doctorant

AS SELECT nom, prénom, année_inscr FROM Etudiant WHERE statut='Doctorant' ; => Création du schéma ET des tuples

BD.5.8

CREATE TABLE AS / CREATE VIEW

!

CREATE TABLE Etudiant ( nom VARCHAR(20), prénom VARCHAR(15), cycle CHAR(1) )

! INSERT INTO Etudiant VALUES ( 'Rochat' , 'Annie' , 2 )

! INSERT INTO Etudiant VALUES ( 'Smith' , 'John' , 1 )

…..

BD.5.9

CREATE TABLE AS

!

CREATE TABLE Etud2 AS SELECT nom, prénom

FROM Etudiant WHERE cycle=2

BD.5.10

CREATE VIEW

!

CREATE VIEW VEtud2 AS SELECT nom, prénom

FROM Etudiant WHERE cycle=2

VETUD2 : SELECT nom, prénom FROM Etudiant WHERE cycle = 2

Etudiant

Rochat ... 2 Smith ... 1 Muller ... 1 Duval ... 2

Etud2

Rochat ...

Duval ...

Les vues sont dynamiques

!

Un nouvel étudiant :

INSERT INTO Etudiant VALUES (‘Dupont’, ‘André’, 2) VETUD2 : SELECT nom, prénom FROM Etudiant WHERE cycle = 2

Etudiant

Rochat ... 2 Smith ... 1 Muller ... 1 Duval ... 2 Dupont ... 2

Etud2

Rochat ...

Duval ...

Domaines de valeurs

CHAR(nb) VARCHAR(max) INTEGER NUMERIC(n,p) DATE

TIME TIMESTAMP

(3)

BD.5.13

Contraintes

!

contrainte-col : contrainte sur une colonne

"NOT NULL

"DEFAULT value

"PRIMARY KEY

"UNIQUE

"REFERENCES nom-table [(nom-col)] [action]

"CHECK ( condition)

!

contrainte-table : contraintes sur une table

"PRIMARY KEY (nom-col*)

"UNIQUE (nom-col*)

"FOREIGN KEY (nom-col*) REFERENCES nom-table

[(nom-col*)] [action]

"CHECK ( condition)

BD.5.14

Attribut obligatoire / facultatif

!

Contrainte sur une colonne

!

Attribut obligatoire : NOT NULL CREATE TABLE Pays

(nom VARCHAR(20) NOT NULL , capitale VARCHAR(20) NOT NULL , surface INTEGER ,

… )

!

Attribut facultatif :

"Si possible éviter les valeurs nulles en donnant une

valeur par défaut

"CREATE TABLE Doctorant ( ...

année_insc DECIMAL(4) DEFAULT 2006 ...)

BD.5.15

Identifiants : clé primaire / secondaire

!

PRIMARY KEY (A1, A2, …)

"

La clé primaire (si elle existe) . En SQL les lignes

doubles sont possibles !

"

choisir l'identifiant le plus efficace

"

attribut référencé par défaut dans les identifiants

externes

"

pas de valeur nulle possible

c-à-d NOT NULL automatiquement

!

UNIQUE (A1, A2, …)

"

une clé secondaire (s'il en existe)

"

contrainte d'intégrité pour les autres identifiants

"

valeur nulle permise (sauf si NOT NULL)

BD.5.16

PRIMARY KEY : exemples

!

CREATE TABLE Pays

( nom VARCHAR(20) PRIMARY KEY , capitale VARCHAR(20) … )

!

CREATE TABLE Employé ( nom VARCHAR(30) , prénom VARCHAR(30) , adresse VARCHAR(60) , …

CONSTRAINT Pk_emp PRIMARY KEY (nom, prénom) )

!

contrainte de colonne et de table

BD.5.17

UNIQUE : exemples

!

CREATE TABLE Etudiant ( AVS CHAR(11) PRIMARY KEY , N°Etudiant CHAR(6) UNIQUE , nom VARCHAR(20) ,

prénom VARCHAR(30) , …

CONSTRAINT UNIQUE (nom, prénom) )

!

Contrainte de colonne et de table

!

PRIMARY KEY et UNIQUE sont incompatibles

BD.5.18

Clé externe : FOREIGN KEY

CREATE TABLE Etudiant (N°E …) CREATE TABLE Cours (NomCours …) CREATE TABLE Suit

( N°Etud CHAR(9) , NomC VARCHAR(25) ,

PRIMARY KEY (N°Etud , NomC) ,

FOREIGN KEY (N°Etud) REFERENCES Etudiant ,

FOREIGN KEY (NomC) REFERENCES Cours )

(4)

BD.5.19

FOREIGN KEY (suite)

!

Les clés externes référencent par défaut la clé primaire de la table référencée

"CREATE TABLE Employé

(AVS CHAR(11) PRIMARY KEY, N°emp CHAR(6) UNIQUE , … )

"CREATE TABLE Département

(N°dep VARCHAR(18) PRIMARY KEY, chefN° CHAR(11) REFERENCES Employé , … )

!

Une clé externe peut référencer une clé secondaire de la table référencée => à préciser

"CREATE TABLE Département2

(N°dep VARCHAR(18) PRIMARY KEY,

chefN° CHAR(6) REFERENCES Employé (N°emp) , … )

BD.5.20

Intégrité référentielle

!

REFERENCES nom-table [(nom-col)] [action]

"Qu'est ce qui se passe quand on détruit/m.à.j. une clé

primaire ou unique qui est référencée par un tuple (foreign key) d'une autre table?

"CREATE TABLE Département

(N°dep VARCHAR(18) PRIMARY KEY, chefN° CHAR(11) REFERENCES Employé,… )

!

Soit le tuple (N°dep=Ventes, chefN°=12345, …) dans la table Département

Que se passe-t-il si l’on détruit l'employé d'AVS 12345 dans la table Employé ?

BD.5.21

"Referential triggered action"

!

Deux circonstances

"ON DELETE

"ON UPDATE

! Trois options

"SET NULL

"SET DEFAULT: valeur par défaut si elle existe, sinon NULL

"CASCADE : on répercute la m.à.j.

! CREATE TABLE Département ( N°dep VARCHAR(18) PRIMARY KEY,

chefN° CHAR(11) REFERENCES Employé (N°emp) ON DELETE SET NULL

ON UPDATE CASCADE ,

… )

! Si la clause n'existe pas : refus du DELETE ou UPDATE

BD.5.22

Contraintes (rappel)

!

contrainte-col : contrainte sur une colonne

"NOT NULL

"DEFAULT

"PRIMARY KEY

"UNIQUE

"REFERENCES nom-table [(nom-col)] [action]

"CHECK ( condition)

!

contrainte-table : contraintes sur une table

"PRIMARY KEY (nom-col*)

"UNIQUE (nom-col*)

"FOREIGN KEY (nom-col*) REFERENCES nom-table

[(nom-col*)] [action]

"CHECK ( condition)

Contrainte CHECK (condition)

!

Condition que chaque ligne de la table doit vérifier

!

Contrainte de colonne et de table

"CREATE TABLE Employé

( AVS CHAR(11) PRIMARY KEY , nom VARCHAR(20) NOT NULL, prénoms VARCHAR(30) ,

âge NUMBER CHECK (âge>16 AND âge<70) , sexe CHAR CHECK (sexe IN ('M', 'F')) , salaire NUMBER ,

commission NUMBER , CONSTRAINT checkSalaire

CREATE TRIGGER

!

Contrainte d'intégrité

"

simple => clause CHECK dans CREATE TABLE

"

complexe => un TRIGGER

!

CREATE TRIGGER

"

nouvelle instruction Evènement-Condition-Action

"

QUAND événement

#INSERT / DELETE /UPDATE

SI condition-SQL

ALORS action

(5)

BD.5.25

TRIGGER : exemple

!

Institut FormaPerm : Pour tout tuple de Prérequis <nomC, nomCprérequis>, le cycle de nomCprérequis dans Cours doit être inférieur ou égal à celui de nomC

QUAND : INSERT, UPDATE Prérequis

SI : le cycle de nomCprérequis dans Cours est supérieur à celui de nomC

ALORS : refuser l'insertion ou la mise à jour

BD.5.26

CREATE TRIGGER initPrerequis

BEFORE INSERT OR UPDATE ON Prerequis FOR EACH ROW

DECLARE cyclePrerequis NUMBER(1,0);

cycleCours NUMBER(1,0);

BEGIN

SELECT cycle INTO cyclePrerequis FROM Cours WHERE Cours.nomC = :new.nomCprerequis;

SELECT cycle INTO cycleCours FROM Cours WHERE Cours.nomC = :new.nomC;

IF (cyclePrerequis > cycleCours) THEN

raise_application_error(-20040,'** le cycle du cours ne peut pas etre inferieur a celui du prerequis **');

END IF;

END;

BD.5.27

DROP TABLE

!

DROP : supprimer une table

" supprime la table et tout son contenu

! DROP TABLE nom-table [CASCADE CONSTRAINTS]

!

CASCADE CONSTRAINTS

" Supprime toutes les contraintes de clé externe

référençant cette table

" Si on cherche à détruire une table dont certains attributs

sont référencés sans spécifier CASCADE CONSTRAINT:

refus du DROP

BD.5.28

ALTER TABLE

!

Modifier la définition d’une table :

"

Changer le nom de la table

mot clé : RENAME

"

Ajouter une colonne ou une contrainte

mot clé : ADD

"

Modifier une colonne ou une contrainte

mot clé : MODIFY

"

Supprimer une colonne ou une contrainte

mot clé : DROP

"

renommer une colonne ou une contrainte

mot clé : RENAME

BD.5.29

ALTER TABLE (format)

ALTER TABLE nom-table

{ RENAME TO nouveau-nom-table | ADD ( { nom-col type-col [DEFAULT valeur]

[contrainte-col]* }* ) |

MODIFY ( nom-col [type-col] [DEFAULT valeur]

[contrainte-col]* ) |

DROP COLUMN nom-col [CASCADE CONSTRAINTS] | RENAME COLUMN nom-col TO nouveau-nom-col

}

BD.5.30

Exemple : Institut FormaPerm

!

CREATE TABLE Personne

( n°P INTEGER ,

nom VARCHAR(30) NOT NULL , adr VARCHAR(100) NOT NULL , PRIMARY KEY (n°P ) )

!

CREATE TABLE PersonnePrénoms

( n°P INTEGER ,

prénom VARCHAR(30) NOT NULL , n°prénom INTEGER ,

PRIMARY KEY (n°P , n°prénom ) , UNIQUE (n°P , prénom ) ,

FOREIGN KEY (n°P) REFERENCES Personne ON DELETE CASCADE )

(6)

BD.5.31

Exemple FormaPerm (2)

!

CREATE TABLE Etudiant

( n°P INTEGER NOT NULL , n°E INTEGER ,

dateN DATE NOT NULL , PRIMARY KEY (n°E ) , UNIQUE (n°P ) ,

FOREIGN KEY (n°P) REFERENCES Personne )

!

CREATE TABLE EtudiantEtudes

( n°E INTEGER ,

année INTEGER NOT NULL , diplôme VARCHAR(30) , PRIMARY KEY (n°E , diplôme ) ,

FOREIGN KEY (n°E) REFERENCES Etudiant ON DELETE CASCADE )

BD.5.32

Exemple FormaPerm (3)

!

CREATE TABLE Enseignant

( n°P INTEGER , tel INTEGER NOT NULL , statut VARCHAR(30) NOT NULL , banque VARCHAR(30) NOT NULL , agence VARCHAR(30) NOT NULL , compte INTEGER NOT NULL , PRIMARY KEY (n°P ) ,

FOREIGN KEY (n°P) REFERENCES Personne )

!

CREATE TABLE Cours

( nomC VARCHAR(30) , cycle INTEGER NOT NULL , n°Ens INTEGER NOT NULL , PRIMARY KEY (nomC ) ,

FOREIGN KEY (n°Ens) REFERENCES Enseignant )

BD.5.33

Exemple FormaPerm (4)

!

CREATE TABLE Obtenu

( n°E INTEGER , nomC VARCHAR(30) , note NUMERIC(2,1) NOT NULL , année INTEGER NOT NULL , PRIMARY KEY (n°E , nomC ) ,

FOREIGN KEY (n°E) REFERENCES Etudiant.n°E , FOREIGN KEY (nomC) REFERENCES Cours )

!

CREATE TABLE Inscrit

( n°E INTEGER , nomC VARCHAR(30) , PRIMARY KEY (n°E , nomC ) ,

FOREIGN KEY (n°E) REFERENCES Etudiant.n°E , FOREIGN KEY (nomC) REFERENCES Cours )

BD.5.34

Exemple FormaPerm (5)

!

CREATE TABLE Prérequis

( nomC VARCHAR(30) , nomCprérequis VARCHAR(30) ,

PRIMARY KEY (nomC , nomCprérequis ) , FOREIGN KEY (nomC) REFERENCES Cours , FOREIGN KEY (nomCprérequis) REFERENCES Cours )

Références

Documents relatifs

Réaliser un script Python permettant de créer une « fiche film » alimentant la table film à partir des données saisies par l’utilisateur et des données des tables genre,

– si un même type d’entité intervient plusieurs fois dans un même type d’association, on doit explicitement indiquer le rôle de chaque entité – si on a

NumEtud Nom Prenom Adresse DateNais Sexe NumCours NomCours NomProf NbHC NbHTD NbHTP NumEtud NumCours Note. E1

changed: WORD, size:

 Pour les BIC non professionnels, le montant des bénéfices et plus-values à court terme non imposables qui correspondent aux abattements et exonérations prévus

Indiquer au système une clé primaire pour chaque table permet une indexation des données à l'aide de cette clé, ce qui renforce l'efficacité des procédures d'interrogation de

On va quand même là haut …ce sera notre sommet …J’annonce que mes crampons sont avec Bertrand…qui lui, avec Guillaume, sont déjà installés pour le casse-croûte sur

7 la page est l’unité de base de stockage des données d’une base de données ; sa capacité est de l’ordre de plusieurs kio : 16 kio est une valeur courante ; une page peut