multimédia - portailweb.universita.corsica€¦ · université de corse - iut lptais – bases de...

15

Upload: others

Post on 18-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

1

Bases de données Multimédia

IUT LPTAIS

Capocchi [email protected]://lcapocchi.free.fr

SQL

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

2

Sommaire

�SQL

�Concepts

�Opérations relationnelles avec SQL

�Gestion des tables de vues

�Gestion des données

�Exercices

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

3

Concepts

�Concepts du langage SQL

�SQL est un sous-produit issu des travaux du groupe System-R.

�C'est une réalisation pratique des concepts de l'approche relationnelle chez IBM.

�C'est une évolution du langage SEQUEL, lui même dérivé du langage de recherche SQUARE.

�SQL est normalisé ISO depuis 1987.

�SQL2 adopté en 1992.

�SQL3 normalisé en 1999 prend en compte l'approche objet.

�La quasi-totalité des SGBD disposent d'une interface SQL.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

4

Concepts

�Concepts du langage SQL

�La norme SQL prévoit trois niveaux de conformité:

�Le niveau d'entrée,

�Le niveau intermédiaire,

�Le niveau complet.

�Les SGBD respectent en générale le premier niveau et adopte certains éléments des autres niveaux.

�La normalisation du langage garantit la portabilité générale des applications d'un SGBD à un autre.

Page 2: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

5

Concepts

�Concepts du langage SQL

�SQL manipule l'objet fondamental de l'approche relationnelle: la relation représentée par une table

�SQL est dit « non procédural », (on ne décrit pas la manière d'effectuer les opérations pas à pas).

�Le SGBD choisit la méthode utilisée pour y parvenir.

�SQL ne dispose pas d'instruction de structuration (boucles).

�Pour effectuer ce type d'opérations, on utilise un langage de programmation « classique » comme le C, php, Java...

�Les instructions SQL sont intégrées dans un langagevia une interface spécifique.

� Les résultats d'un requête sont stockés dans une structure de données.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

6

Concepts

�Concepts du langage SQL

�Le langage de programmation qui intègre SQL est appelé langage hôte.

�Des différences peuvent apparaître entre une requête SQL exprimée interactivement et la version intégrée dans le langage de programmation.

� Il existe une extension « procédurale » de SQL qui ajoute les fonctions, procédures et méthodes à SQL.

Programme en langage hôte

+ SQL

Bibliothèquefonctions SQL

SGBD

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

7

Opérations relationnelles avec SQL

� Exemple de la « casse »

NumVoit Marque Type Couleur1 Peugeot 404 Rouge2 Citroen SM Noire3 Opel GT Blanche4 Peugeot 403 Blanche5 Renault Alpine A310 Rose6 Renault Floride Bleue

voiture

NumAch Nom Age Ville Sexe1 Nestor 96 Paris M2 Irma 20 Lille F3 Henri 45 Paris M4 Josette 34 Lyon F5 Jacques 50 Bordeaux M

personne

DateVente Prix NumVoit NumArch03/12/85 10000 1 130/03/96 70000 2 414/06/98 30000 4 102/04/00 45000 5 2

vente

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

8

Opérations relationnelles avec SQL

� Projection (SELECT)

�Elle consiste à sélectionner la (les) colonne(s) que l'on veut voir figurer dans la table « résultat ».

SELECT Nom, Ville

FROM personne;

Nom VilleNestor ParisIrma LilleHenri Paris

Josette LyonJacques Bordeaux

Page 3: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

9

Opérations relationnelles avec SQL

� Projection (SELECT)

SELECT *

FROM personne;

�Les colonnes de la table « résultat » peuvent être renommées par le mot clé AS.

SELECT Ville AS City

FROM personne;

NumAch Nom Age Ville Sexe1 Nestor 96 Paris M2 Irma 20 Lille F3 Henri 45 Paris M4 Josette 34 Lyon F5 Jacques 50 Bordeaux M

CityParisLilleParisLyon

Bordeaux

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

10

Opérations relationnelles avec SQL

� Projection (SELECT)

�Valeurs distinctes d'une colonne: afin d'éliminer les doublons éventuels des valeurs d'une colonne de la table « résultat », on fait précéder le nom de la colonne par le mot clé DISTINCT.

SELECT DISTINCT Marque

FROM voiture;

NumVoit Marque Type Couleur1 Peugeot 404 Rouge2 Citroen SM Noire3 Opel GT Blanche4 Peugeot 403 Blanche5 Renault Alpine A310 Rose6 Renault Floride Bleue

Voiture

MarquePeugeotCitroen

OpelRenault

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

11

Opérations relationnelles avec SQL

� Projection (SELECT)

�Utilisation d'expression pour créer une colonne: Les valeurs des colonnes (lignes) de la table « résultat » peuvent être constituées par des expressions construites avec les opérateurs +, -, *, /, %

SELECT Prix, DateVente, (Prix/6.5596) AS Prix_Euros

FROM vente;

DateVente Prix NumVoit NumArch03/12/85 10000 1 130/03/96 70000 2 414/06/98 30000 4 102/04/00 45000 5 2

Vente

Prix DateVente Prix_Euros10000 03/12/85 1524.48320070000 30/03/96 10671.38240130000 14/06/98 4573.44960145000 02/04/00 6860.174401

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

12

Opérations relationnelles avec SQL

� Projection (SELECT)

�SQL dispose de nombreuse autres fonctions intégrées parfois dépendantes du SGBD utilisé, qui permettent par exemple le traitement des colonnes de type caractères, date...

SELECT UPPER(Nom) AS NomMaj

FROM personne;

SELECT MONTH(DateVente) AS Mois

FROM vente;

NomMajNESTOR

IRMAHENRI

JOSSETTEJACQUES

Mois12364

Page 4: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

13

Opérations relationnelles avec SQL

� Projection (SELECT)

�Utilisation de fonctions statistiques sur toutes les valeurs.

� SQL ne permet pas de réaliser des boucles !

� Les colonnes de la table « résultat » peuvent être constituées de résultats de fonctions statistiques intégrées à SQL:

SELECT AVG(Prix) AS Prix_Moyen

FROM vente;

SELECT COUNT(*) AS Nombre_Personne

FROM personne;

COUNT Comptage du nombre d'éléments (lignes) de la tableMAX Maximum des éléments d'une colonneMIN Minimum des éléments d'une colonneAVG Moyenne des éléments d'une colonneSUM Somme des éléments d'une colonne

Prix_Moyen38750.0000

Nombre_Personne5

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

14

Opérations relationnelles avec SQL

� Sélection ou Restriction (WHERE)

�Consiste à indiquer un ou plusieurs critères pour choisir les lignes à inclure dans la table « résultat ».

�Ces critères utilisent le contenu des valeurs des colonnes.

�Le critère de sélection est indiqué à la suite du mot clé WHERE.

� Il est constitué d'expressions de conditions composées à l'aide d'opérateurs de comparaison et combinées à l'aide de connecteurs logiques.

�Opérateurs de comparaison SQL:

<> Différent< Inférieur> Supérieur

<= Inférieur ou égale>= Supérieur ou égale

Valeur <valeur> AND <valeur> Appartient à un intervalleIN <liste de valeurs> Appartient à un ensemble de valeurs

IS NULL Teste s i la colonne n'est pas renseignéeLIKE Compare des chaînes de caractères

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

15

Opérations relationnelles avec SQL

� Sélection ou Restriction (WHERE)

SELECT *

FROM vente

WHERE Prix > 50000;

SELECT *

FROM voiture

WHERE Couleur IN (''Blanc'',''Rouge'');

SELECT *

FROM personne

WHERE Age BETWEEN 40 AND 60;

DateVente Prix NumVoit NumArch30/03/96 70000 2 4

NumVoit Marque Type Couleur1 Peugeot 404 Rouge

NumAch Nom Age Ville Sexe3 Henri 45 Paris M5 Jacques 50 Bordeaux M

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

16

Opérations relationnelles avec SQL

� Sélection ou Restriction (WHERE)

SELECT *

FROM voiture

WHERE Couleur=''Blanche'' OR Marque=''Peugeot'';

SELECT *

FROM personne

WHERE NOT (Ville='Paris');

NumVoit Marque Type Couleur1 Peugeot 404 Rouge3 Opel GT Blanche4 Peugeot 403 Blanche

NumAch Nom Age Ville Sexe2 Irma 20 Lille F4 Josette 34 Lyon F5 Jacques 50 Bordeaux M

Page 5: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

17

Opérations relationnelles avec SQL

� Agrégats ou Groupage (GROUP BY)

�Les opérations d'agrégation ou de groupage regroupent les lignes d'une table par valeurs contenues dans une colonne.

�Pour réaliser cette opération avec SQL, on utilise le mot clé GROUP BY suivi du nom de la colonne sur laquelle s'effectue l'agrégat.

SELECT Marque

FROM voiture

GROUP BY Marque;

SELECT Marque, COUNT(*) AS Compte

FROM voiture

GROUP BY Marque;

MarquePeugeotCitroen

OpelRenault

Marque ComptePeugeot 2Citroen 1

Opel 1Renault 2

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

18

Opérations relationnelles avec SQL

� Agrégats ou Groupage (GROUP BY)

SELECT Ville, AVG(Age) AS Moyenne_Age

FROM personne

GROUP BY Ville; Ville Moyenne_AgeBordeaux 50

Lille 20Lyon 34Paris 70.5

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

19

Opérations relationnelles avec SQL

� Agrégats ou Groupage (GROUP BY)

�Restriction sur le résultat.

�Le résultat de l'opération de groupage peut être filtré !

�Si on reprend l'exemple qui a permis de calculer le nombre de voitures par marques.

�On suppose que l'on élimine du résultat les marques dont on possède moins de deux voitures en considérant que ces marques ne sont pas représentatives du parc:

SELECT Marque, COUNT(*) AS Compte

FROM voiture

GROUP BY Marque

HAVING Compte > 1;Marque ComptePeugeot 2Renault 2

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

20

Opérations relationnelles avec SQL

� Agrégats ou Groupage (GROUP BY)

�Restriction sur le résultat.

�Supposons que l'on veuille éliminer les voitures rouges de notre calcul:

SELECT Marque, COUNT(*) AS Compte

FROM voiture

WHERE NOT (Couleur='Rouge')

GROUP BY Marque; Marque ComptePeugeot 1Citroen 1

Opel 1Renault 2

Page 6: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

21

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Lorsque l'on utilise plusieurs tables dans une requête SQL, il peut exister une ambiguïté dans les expressions sur les noms de colonnes.

�Deux tables peuvent avoir une colonne de nom identique.

�On prefixera le nom de la colonne par le nom de la table.

SELECT voiture.Marque, voiture.Couleur

FROM voiture;

Marque CouleurPeugeot RougeCitroen Noire

Opel BlanchePeugeot BlancheRenault RoseRenault Bleue

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

22

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Cette notation peut devenir vite fastidieuse si le nombre de tables est élevé et si leurs noms sont longs.

�Utiliser un alias est plus commode !

SELECT vo.Marque, vo.Couleur

FROM voiture AS vo;

Marque CouleurPeugeot RougeCitroen Noire

Opel BlanchePeugeot BlancheRenault RoseRenault Bleue

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

23

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Produit cartésien

�C'est la combinaison de toutes les lignes d'une table avec toutes les lignes d'une autre sans tenir compte du sens des données.

�En SQL:

SELECT *

FROM personne, voiture;

�Le nombre de lignes de la table « résultat » est égal au produit du nombre de lignes des deux tables.

�Les colonnes sont celles des deux tables simplement juxtaposées.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

24

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Jointure interne (INNER JOIN)

�Elle permet de lier deux tables entre elles en introduisant un critère de « sens des données ».

�Peut s'exprimer de différente manière en SQL:

� Traité de manière pas optimal par le SGBD

SELECT voiture.Marque, voiture.Couleur, vente.Prix

FROM voiture, vente

WHERE voiture.NumVoit=vente.NumVoit;

Marque Couleur PrixPeugeot Rouge 10000Citroen Noire 70000Peugeot Blanche 30000Renault Rose 45000

Page 7: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

25

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Jointure interne (INNER JOIN)

�Une autre solution: utiliser l'opérateur de jointure JOIN

SELECT voiture.Marque, voiture.Couleur, vente.Prix

FROM vente JOIN voiture ON voiture.NumVoit=vente.NumVoit;

�Le traitement de la requête est alors optimisée par le SGBD.

� Important car l'opération de jointure est complexe à réaliser pour un SGBD et est coûteuse en temps et ressources.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

26

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Jointure interne (INNER JOIN)

� Il est possible d'effectuer la jointure sur plus de deux tables:

SELECT vo.Marque, vo.Couleur, ve.Prix, pe.Nom, pe.Age

FROM voiture AS vo, vente AS ve, personne AS pe

WHERE (vo.NumVoit=ve.NulVoit) AND

(pe.NumAch=ve.NumAch);

ou

SELECT vo.Marque, vo.Couleur, ve.Prix, pe.Nom, pe.Age

FROM voiture AS vo JOIN vente AS ve JOIN personne AS

pe

ON (vo.NumVoit=ve.NumVoit) AND (pe.NulAch=ve.NumAch)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

27

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Jointure externe (OUTER JOIN)

�L'opération de jointure interne ne permet pas de répondre à des questions du type: « Quelles sont les voitures qui n'ont pas été vendues ? »

� Il faut utiliser la jointure externe !

�L'opérateur SQL de jointure externe s'exprime par le mot clé OUTER JOIN

�Cette opération n'est pas symétrique: soit on inclut toutes les lignes d'une table, soit toutes celles de l'autre.

�On précise cela à l'aide des mots clés LEFT et RIGHT.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

28

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Jointure externe (OUTER JOIN)

�Dans la requête qui suit, toutes les lignes de la table 'voiture' seront affichées, y compris celles pour lesquelles la colonne 'NumVoit' n'a pas de correspondance dans 'vente'

�Les colonnes issues de 'vente' ne pourront alors être mise en correspondance et auront la valeur NULL.

SELECT voiture.NumVoit, vente.NumVoit, voiture.Marque,

voiture.Couleur, vente.Prix

FROM voiture LEFT OUTER JOIN vente ON

voiture.NumVoit=vente.NumVoit

NumVoit NumVoit Marque Couleur Prix1 1 Peugeot Rouge 100002 2 Citroen Noire 700003 NULL Opel Blanche NULL4 4 Peugeot Blanche 300005 5 Renault Rose 450006 NULL Renault Bleue NULL

Page 8: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

29

Opérations relationnelles avec SQL

� Requêtes sur plusieurs tables

�Jointure externe (OUTER JOIN)

�« Quelles sont les voitures qui n'ont pas été vendues ? »

� Il faut sélectionner les lignes dont l'une des colonnes issues de la table 'vente' n'a pas pu être mise en correspondance avec une ligne de la table 'voiture'.

SELECT voiture.NumVoit, voiture.Marque,

voiture.Couleur, vente.Prix

FROM voiture LEFT OUTER JOIN vente ON

voiture.NumVoit=vente.NumVoit

WHERE vente.Prix IS NULL

NumVoit Marque Couleur Prix3 Opel Blanche NULL6 Renault Bleue NULL

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

30

Opérations relationnelles avec SQL

� Tri du résultat d'une requête

�On utilise le mot clé ORDER BY pour spécifier la (les) colonne(s) sur laquelle (lesquelles) on souhaite trier le résultat.

SELECT Marque, Type

FROM voiture

ORDER BY Marque

� Il est possible de préciser l'ordre de tri par les mots clés ASC (croissant par défaut) ou DESC (décroissant).

SELECT Prix, DateVente

FROM vente

ORDER BY Prix DESC;

�On peut indiquer plusieurs critères de tri, qui sont lus et traités de gauche à droite (ici par ville et par âge)

SELECT Nom, Age, Ville

FROM personne

ORDER BY Ville, Age;

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

31

Gestion de tables et de vues

� Tables

�SQL possède une partie manipulation des données (LMD) pour gérer les tables.

�Les opérations de création, de suppression et de modification des tables mettent à jour le dictionnaire des données du SGBD.

�Le dictionnaire des données est une structure propre au SGBD qui contient la description des objets du SGBD (base de données ,tables, colonnes, etc.).

�Pour pouvoir gérer une table, il faut disposer des droits sur la base de données qui la contient.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

32

Gestion de tables et de vues

� Tables

�Création

�C'est lors de cette étape que l'on définit:

� le type de données,

� la clé,

� les index éventuelles

� les contraintes de validation

�La forme générale de l'instruction de création:

CREATE TABLE <Nom de la table> (liste des colonnes

avec leur type séparé par , );

�Le nom de la table ou d'une colonne ne doit pas dépasser 128 caractères.

Page 9: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

33

Gestion de tables et de vues

� Tables

�Création

�Création de la table 'voiture'

CREATE TABLE voiture (

NumVoit INT,

Marque CHAR(40),

Type CHAR(30),

Couleur CHAR(20)

);

�Création de table temporaire

CREATE TEMPORARY TABLE temporaire (Identifiant INT,

Jour DATE,

Valide BOOLEAN

);Université de Corse - IUT LPTAIS � Bases de Données Multimédia

a

34

Gestion de tables et de vues

� Tables

�Création

�Table issu du résultat d'une requête en utilisant AS

CREATE TEMPORARY TABLE resultat

AS

(SELECT Vo.Marque, Vo.Couleur

FROM voiture AS Vo);

�Type de données

� Le type des données est choisi essentiellement en fonction des opérations qui sont effectuées sur la colonne.

� Le choix du type permet de mettre un premier niveau de restriction sur le contenu des données.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

35

Gestion de tables et de vues

� Tables

�Création

�Type de données numériques

�Type de données chaînes de caractères

�Type de données date

�Type de données binaires

INT Entier standard (32 bits)SMALLINTREAL Réel (taille spécifique au SGBD)FLOAT Réel (représenté sur 'n' bits)

Entier « petit » (16 bits)

CHAR(n) Chaîne de caractères de longueur 'n' (codage ASCII 1 octet)VARCHAR(n) Chaîne de caractères de longueur maximale 'n' (codage ASCII 1 octet)NCHAR(b) Chaîne de caractères de longueur 'n' (codage Unicode 2 octets)NVARCHAR(b) Chaîne de caractères de longueur maximal 'n' (codage Unicode 2 octets)

BOOLEAN BooléenBLOB Binary Large Object: permet de stocker tout type bianaire (photo,..)

DATE DateTIME[(n)] Heure, n (optionnel) est le nombre de décimales représentant la fraction de secondes

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

36

Gestion de tables et de vues

� Tables

�Suppression

�La commande DROP TABLE permet de supprimer une table.

�Si une table est dans une autre table (contrainte d'intégrité référentielle), le SGBD refuse en générale de la supprimer.

� Il utilise l'option RESTRICT par défaut

�L'option CASCADE permet de la supprimer !

�Dans l'exemple de la casse, la table 'vente' utilise la table 'voiture' comme table de référence pour le contenu de la colonne 'NumVoit'

�On ne peut pas supprimer la table 'voiture' avant 'vente'

DROP TABLE voiture CASCADE

Page 10: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

37

Gestion de tables et de vues

� Tables

�Modification

�La commande ALTER TABLE permet de modifier la structure de la table:

� Ajouter des colonnes,

� Supprimer des colonnes,

� Modifier des colonnes,

�Ajout de la colonne en plus dans la table 'voiture':

ALTER TABLE voiture

ADD COLUMN enplus INT;

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

38

Gestion de tables et de vues

� Tables

�Modification

SELECT * FROM voiture;

ALTER TABLE voiture

DROP COLUMN Couleur;

SELECT * FROM voiture;

NumVoit Marque Type Couleur Enplus1 Peugeot 404 Rouge NULL2 Citroen SM Noire NULL3 Opel GT Blanche NULL4 Peugeot 403 Blanche NULL5 Renault Alpine A310 Rose NULL6 Renault Floride Bleue NULL

voiture

NumVoit Marque Type Enplus1 Peugeot 404 NULL2 Citroen SM NULL3 Opel GT NULL4 Peugeot 403 NULL5 Renault Alpine A310 NULL6 Renault Floride NULL

voiture

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

39

Gestion de tables et de vues

� Tables

�Modification

� Il n'est pas possible de modifier directement le nom d'une colonne ou son type.

� Il faut pour cela écrire une série d'opérations, en utilisant par exemple des colonnes temporaires.

�Voici la suite d'instruction pour modifier le nom de la colonne 'Couleur' de la table 'voiture' en 'Teinte' en changeant son type.

ALTER TABLE voiture

ADD COLUMN Teinte CHAR(60);

UPDATE voiture

SET Teinte=Couleur;

ALTER TABLE voiture

DROP COLUMN Couleur;

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

40

Gestion de tables et de vues

� Contraintes d'intégrité

�Le domaine définit l'ensemble des valeurs que peut prendre un attribut.

�Au niveau SQL, une première approche est établit par le choix du type de la colonne mais cela n'est pas assez restrictif.

�SQL permet de définir des conditions de validité plus fines que l'on nome contrainte d'intégrité.

�C'est le SGBD qui applique ces conditions au moment de l'insertion, de la modification ou de la suppression des données.

�Cette étape est fastidieuse mais elle garantit la cohérence des données et évite de se retrouver avec des bases de données, conceptuellement correcte, mais inutilisable fautes de données valides.

Page 11: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

41

Gestion de tables et de vues

� Contraintes d'intégrité

�Différents type de contraintes sur les colonnes:

�Les propriétés générales de contraintes sur les colonnes.

�Les restrictions d'appartement à un ensemble.

�Les dépendances entre plusieurs colonnes.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

42

Gestion de tables et de vues

� Contraintes d'intégrité

�Propriétés générales

�La valeur de la colonne doit être renseignée (NOT NULL)

�La valeur doit être unique comparée à toutes les valeurs de la colonne de la table (UNIQUE)

�Lorsque ces deux conditions sont réunis, la colonne peut contenir une clé candidate qui est spécifié par PRIMARY KEY.

� Ici, on indique que la colonne 'NumAch' est choisie comme clé et que la colonne 'Nom' doit toujours être renseignée:

CREATE TABLE personne(

NumAch INT PRIMARY KEY,Nom CHR(20) NOT NULL,

Age INT

);

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

43

Gestion de tables et de vues

� Contraintes d'intégrité

�Propriétés générales

�Si aucune mention n'est précisée (comme 'Age'), elle peut être renseignée ou non.

�Attention une colonne non renseignée (ie contient NULL pour SQL) signifie qu'elle ne contient aucune données, et non pas qu'elle contient 0 pour une colonne de type entier.

�On indique la liste des colonnes constitutives de la clé à la suite du mot PRIMARY KEY:

CREATE TABLE vente (

DateVente DATE,

Prix INT,

NumArch INT,

NumVoit INT,

PRIMARY KEY (NumAch, NumVoit));

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

44

Gestion de tables et de vues

� Contraintes d'intégrité

�Condition d'appartenance à un ensemble

�Description du domaine dans lequel la colonne pourra prendre ses valeurs.

�En donnant la liste de tous ces éléments constitutifs (IN)

� Exemple: on vérifie que la colonne 'Couleur' ne peut prendre que des valeurs « normalisées »: 'Rouge', 'Vert' ou 'Bleue'

CREATE TABLE voiture (

NumVoit INT PRIMARY KEY,

Marque CHAR(30) NOT NULL,

Type CHAR(20),

Couleur CHAR(40),

CHECK Couleur IN ('Rouge','Vert','Bleue')

);

Page 12: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

45

Gestion de tables et de vues

� Contraintes d'intégrité

�Condition d'appartenance à un ensemble

�Description du domaine dans lequel la colonne pourra prendre ses valeurs.

�Par une expression (<,>,BETWEEN,...)

� Exemple: l'age est compris entre 1 et 80.

CREATE TABLE personne (

NumAch INT PRIMARY KEY,

Nom CHAR(20) NOT NULL,

Ville CHAR(40),

Age INT NOT NULL,

CHECK (Age BETWEEN 1 AND 80)

);

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

46

Gestion de tables et de vues

� Contraintes d'intégrité

�Condition d'appartenance à un ensemble

�Description du domaine dans lequel la colonne pourra prendre ses valeurs.

�Par une référence aux valeurs d'une colonne d'une autre table (REFERENCES)

� Exemple: les valeurs identifiantes des personnes 'NumAch' et des voitures 'NumVoit' de la table 'vente' existent bien dans les tables de référence 'personne' et 'voiture':

CREATE TABLE vente (

DateAch DATE,

Prix INT,

NumAch INT NOT NULL REFERENCES personne (NumAch),

NumVoit INT NOT NULL REFERENCES voiture (NumVoit),PRIMARY KEY (NumAch, Numvoit)

);

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

47

Gestion de tables et de vues

� Contraintes d'intégrité

�Condition sur plusieurs colonnes (contrainte de table)

�On utilise le mot clé CONSTRAINTE.

�Exemple: on vérifie que les colonnes 'Age' et 'ville' doivent être renseignées ou vides en même temps.

CREATE TABLE personne (

NumAch INT PRIMARY KEY,

Nom CHAR(20) NOT NULL,

Ville CHAR(40),

Age INT,

CONSTRAINT la_contrainte CHECK ((Age IS NOT NULL AND

Ville IS NOT NULL) OR (Age IS NULL AND Ville IS NULL))

);

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

48

Gestion de tables et de vues

� Vues (CREATE VIEW)

�Une vue est le résultat d'une requête que l'on peut manipuler de la même façon qu'une table.

�On peut considérer une vue comme une table dynamique dont le contenu est recalculé à chaque utilisation.

�On utilise les vues pour des raisons de commodité ou encore de sécurité/confidentialité en renseignant l'accès à certaines données.

CREATE VIEW personne_bis (NumAch, Nom, Age) AS

SELECT NumAch, nom, Age

FROM personne;

Page 13: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

49

Gestion des données

� Trois opérations pour gérer les données d'une table:

�Insertion: enregistrement par enregistrement ou à partir d'un fichier accepté par le SGBD.

�Suppression: à partir de critère de sélection des enregistrements (lignes).

�Mise à jours.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

50

Gestion des données

� Insertion (INSERT INTO)

�Différentes manières:

�Enregistrement par enregistrement.

�En insérant la réponse à une requête SQL.

�Forme générale:

INSERT INTO <nom de la table> [liste des colonnes]

VALUES <liste des valeurs>

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

51

Gestion des données

� Insertion (INSERT INTO)

�Exemple: insertion, d'un enregistrement dans la table 'voiture'.

INSERT INTO voiture

(NumVoit, Marque, Couleur)

VALUES (10, 'Triumph', 'Bleue');

SELECT * FROM voiture;

�Si certaines données sont omises elles prendront la valeur NULL.

�Si la liste des colonnes est omise, on considère qu'il s'agit de la liste de celles prises dans l'ordre défini lors de la création de la table.

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

52

Gestion des données

� Insertion (INSERT INTO)

�Exemple: insertion, d'enregistrements à partir du résultat d'une requête.

INSERT INTO voiture

SELECT NumVoit, Marque, Type, Couleur

FROM voitureBis

WHERE Numvoit>10;

�La table dans laquelle on insère les données doit avoir le même nombre de colonnes que la table « résultat » de la requête (et le même type)

Page 14: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

53

Gestion des données

� Suppression (DELETE FROM)

�Permet de supprimer un ensemble d'enregistrements (lignes) que l'on identifiera avec une expression identique aux conditions de sélection vues précédemment:

DELETE FROM voiture

WHERE Couleur='Rouge';

SELECT * FROM voiture;

�Attention si aucune condition spécifiée, tous les enregistrements sont supprimés:

DELETE FROM personne;

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

54

Gestion des données

� Modification (UPDATE)

� Il faut préciser:

�Le (les) colonne(s) concernée(s);

�La (les) nouvelle(s) valeur(s);

�Les enregistrements pour lesquels on modifiera ces valeurs

UPDATE personne

SET Ville='Paris-centre'

WHERE Ville='Paris';

SELECT * FROM personne;

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

55

Résumé

�Le langage SQL permet:

�La gestion de tables et de vues munies des contraintes associé (LDD):

�Création CREATE TABLE/VIEW <nom_table>

�Destruction DROP TABLE/VIEW <nom_table>

�Modification ALTER TABLE/VIEW <nom_table>

�La manipulation des données (LMD):

�Insertion INSERT INTO <nom_table>

(<liste_colonnes> <liste_valeurs>)

�Modification UPDATE <nom_table> SET <colonne=valeur> WHERE <critère>

�Destruction DELETE FROM <nom_table> WHERE <critère>

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

56

Résumé

�L'interrogation et la recherche dans les tables

SELECT <liste_colonnes>

FROM <nom_table>

WHERE <critère>

ORDER BY <liste_champs>

GROUP BY <liste_champs> HAVING <liste_critères>

AS, DISTINCT

+,-,*,/,%

AVG, MAX,MIN

SUM, COUNT

JOIN ON

(LEFT/RIGHT) JOIN

=,<,>,LIKE

IS NULL, IN, BETWEEN

OR,AND,NOT

Page 15: Multimédia - portailweb.universita.corsica€¦ · Université de Corse - IUT LPTAIS – Bases de Données Multimédia a 9 Opérations relationnelles avec SQL Projection (SELECT)

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

57

Résumé

�La création et la modificationde tables:

CREATE TABLE <table>

(liste_champs + Type)

DROP TABLE <table>

ALTER TABLE <table>

(liste_champs + Type)

INSERT INTO <table>

(liste_champs) (liste_valeurs)

DELETE FROM <table>

WHERE <liste_critère>

UPDATE <table> SET <champ=valeur>

WHERE <liste_critère>

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

58

Exercices

� Feuilles TD !

Université de Corse - IUT LPTAIS � Bases de Données Multimédiaa

59

Bibliographie et Webographie

� Création de bases de donnéesNicolas Larrousse, Pearson Education, 2006.