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