Université de Corse - IUT LPTAIS Bases de Données Multimédia a
1
Bases de données Multimédia
IUT LPTAIS
http://lcapocchi.free.fr
SQL
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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édia a
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édia a
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édia a
5 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 langage via 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édia a
6 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èque fonctions SQL
SGBD
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
7
Opérations relationnelles avec SQL
Exemple de la « casse »
NumVoit Marque Type Couleur
1 Peugeot 404 Rouge
2 Citroen SM Noire
3 Opel GT Blanche
4 Peugeot 403 Blanche
5 Renault Alpine A310 Rose
6 Renault Floride Bleue
voiture
NumAch Nom Age Ville Sexe
1 Nestor 96 Paris M
2 Irma 20 Lille F
3 Henri 45 Paris M
4 Josette 34 Lyon F
5 Jacques 50 Bordeaux M
personne
DateVente Prix NumVoit NumArch
03/12/85 10000 1 1
30/03/96 70000 2 4
14/06/98 30000 4 1
02/04/00 45000 5 2
vente
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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 Ville Nestor Paris Irma Lille Henri Paris Josette Lyon Jacques Bordeaux
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
9 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 Sexe
1 Nestor 96 Paris M
2 Irma 20 Lille F
3 Henri 45 Paris M
4 Josette 34 Lyon F
5 Jacques 50 Bordeaux M
City Paris Lille Paris Lyon Bordeaux
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
10 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 Couleur
1 Peugeot 404 Rouge
2 Citroen SM Noire
3 Opel GT Blanche
4 Peugeot 403 Blanche
5 Renault Alpine A310 Rose 6 Renault Floride Bleue Voiture
Marque Peugeot Citroen Opel Renault
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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 NumArch
03/12/85 10000 1 1
30/03/96 70000 2 4
14/06/98 30000 4 1
02/04/00 45000 5 2
Vente
Prix DateVentePrix_Euros 10000 03/12/85 1524.483200 70000 30/03/96 10671.382401 30000 14/06/98 4573.449601 45000 02/04/00 6860.174401
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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;
NomMaj NESTOR IRMA HENRI JOSSETTE
JACQUES
Mois 12
3 6 4
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
13 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 table MAX Maximum des éléments d'une colonne MIN Minimum des éléments d'une colonne AVG Moyenne des éléments d'une colonne SUM Somme des éléments d'une colonne
Prix_Moyen 38750.0000
Nombre_Personne 5
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
14 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 intervalle IN <liste de valeurs> Appartient à un ensemble de valeurs
IS NULL Teste si la colonne n'est pas renseignée LIKE Compare des chaînes de caractères
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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 NumArch
30/03/96 70000 2 4
NumVoit Marque Type Couleur
1 Peugeot 404 Rouge
NumAch Nom Age Ville Sexe
3 Henri 45 Paris M
5 Jacques 50 Bordeaux M
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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 Couleur
1 Peugeot 404 Rouge
3 Opel GT Blanche
4 Peugeot 403 Blanche
NumAch Nom Age Ville Sexe
2 Irma 20 Lille F
4 Josette 34 Lyon F
5 Jacques 50 Bordeaux M
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
17 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;
Marque Peugeot Citroen Opel Renault
Marque Compte
Peugeot 2
Citroen 1
Opel 1
Renault 2
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
18 Agrégats ou Groupage (GROUP BY)
SELECT Ville, AVG(Age) AS Moyenne_Age FROM personne
GROUP BY Ville; Ville Moyenne_Age
Bordeaux 50
Lille 20
Lyon 34
Paris 70.5
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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 Compte
Peugeot 2
Renault 2
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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 Compte
Peugeot 1
Citroen 1
Opel 1
Renault 2
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
21 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 Couleur Peugeot Rouge
Citroen Noire Opel Blanche Peugeot Blanche Renault Rose Renault Bleue
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
22 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 Couleur Peugeot Rouge Citroen Noire Opel Blanche Peugeot Blanche Renault Rose Renault Bleue
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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édia a
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 Prix Peugeot Rouge 10000
Citroen Noire 70000 Peugeot Blanche 30000
Renault Rose 45000
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
25 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édia a
26 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édia a
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édia a
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 Prix
1 1 Peugeot Rouge 10000
2 2 Citroen Noire 70000
3 NULL Opel Blanche NULL
4 4 Peugeot Blanche 30000
5 5 Renault Ros e 45000
6 NULL Renault Bleue NULL
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
29 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 Prix
3 Opel Blanche NULL
6 Renault Bleue NULL
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
30 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édia a
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édia a
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édia a
33 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 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édia a
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) SMALLINT
REAL 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éen
BLOB Binary Large Object: permet de stocker tout type bianaire (photo,..)
DATE Date
TIME[(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édia a
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édia a
37 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édia a
38 Tables
Modification
SELECT * FROM voiture;
ALTER TABLE voiture DROP COLUMN Couleur;
SELECT * FROM voiture;
NumVoit Marque Type Couleur Enplus
1 Peugeot 404 Rouge NULL
2 Citroen SM Noire NULL
3 Opel GT Blanche NULL
4 Peugeot 403 Blanche NULL
5 Renault Alpine A310 Rose NULL
6 Renault Floride Bleue NULL
voiture
NumVoit Marque Type Enplus
1 Peugeot 404 NULL
2 Citroen SM NULL
3 Opel GT NULL
4 Peugeot 403 NULL
5 Renault Alpine A310 NULL
6 Renault Floride NULL
voiture
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
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édia a
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édia a
41 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édia a
42 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édia a
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édia a
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édia a
45 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édia a
46 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édia a
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édia a
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édia a
49 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édia a
50 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édia a
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édia a
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édia a
53 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édia a
54 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édia a
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édia a
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édia a
57 La création et la modification
de 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édia a
58 Feuilles TD !
Université de Corse - IUT LPTAIS Bases de Données Multimédia a
59
Bibliographie et Webographie
Création de bases de données Nicolas Larrousse, Pearson Education, 2006.