Insia Ing1 BD 02 2
Insia Ing1 BD 02 2
Insia Ing1 BD 02 2
Bases de données
ING 1
MySQL – Cours et TP 02
LA BIBLE : MySQL 5.0 Reference Manual
http://dev.mysql.com/doc/refman/5.0/fr/index.html
SOMMAIRE
SOMMAIRE 1
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 1/18 - Bertrand LIAUDET
PRESENTATION DE LA « CALCULETTE » SQL
PRINCIPALES NOTIONS
Algèbre relationnelle SQL
manuel de référence de MySQL Calculette SQL
L’AR permet de :
1. Créer, modifier, détruire des tables (et donc des attributs)
2. Créer, modifier, détruire des tuples
3. Consulter les tuples.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 2/18 - Bertrand LIAUDET
• Quels sont les employés qui gagnent plus que la moyenne des salaires de l’entreprise ?
(calcul statistique avec regroupements).
Le SQL
Le SQL est le langage qui permet d’appliquer l’algèbre relationnelle dans les SGBD-R.
Le SQL applique les principes de l’AR
AR ou SQL ?
L’AR est un langage mathématique tandis que le SQL est le langage de programmation implanté
dans les SGBD-R.
Conclusion
On travaillera surtout le langage SQL.
La calculette SQL
Le SQL n’est pas un langage de programmation qui permet d’écrire des programmes composés
d’une suite d’opérations élémentaires (comme le langage PHP, par exemple, et comme tous les
langage dit « impératif » : C, C++, Pascal, VB, PHP, erc.).
Le SQL est un langage qui permet d’écrire des opérations élémentaires qui sont indépendantes
les unes des autres.
L’application cliente du serveur MySQL qui permet de créer, modifier, détruire et consulter une
BD (le CLC-mysql, mysql.exe), peut donc être vue comme une machine à calculer au même
titre que les machines à calculer de l’algèbre des nombres (calculettes).
Les calculettes permettent de faire des additions, multiplications, etc. sur des nombres. La
calculette SQL permet de faire des créations de tables et de tuples, des filtres, des tris et des
calculs statistiques sur des tables.
On va apprendre à se servir de cette calculette SQL
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 3/18 - Bertrand LIAUDET
Ce sont les opérateurs qui vont permettre de créer, modifier, supprimer les tables.
http://dev.mysql.com/doc/refman/5.0/fr/index.html
C’est la bible !
On fait les recherches dans le « Search manuel ».
Quand on passe plusieurs mots (logique de « et »), il faut mettre des « + » devant chaque mot.
Pour chercher une phrase, il faut la mettre entre guillemets.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 4/18 - Bertrand LIAUDET
SQL : CONSULTATION DE LA BASE DE DONNÉES
PRINCIPALES NOTIONS
Projection Select / From / Where
Restriction year / month / day
Tri length / substr / concat
Attribut calculé in, between, like
Projection primaire distinct
Order by / asc / desc
Présentation
La consultation des tuples passe toujours par l’opérateur select.
De même que les opérations de l’algèbre des nombres portent sur des nombres et produisent des
nombres comme résultats, la consultation des tuples est une opération qui par d’une ou plusieurs
tables et dont le résultat est toujours une table.
2. La projection
Présentation
La projection d'une table est une nouvelle table constituée de tous les tuples et de certains
attributs de la table de départ.
tuple n
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 5/18 - Bertrand LIAUDET
En gris : les colonnes sélectionnées.
Syntaxe AR
Tres = Proj(table ; liste d'attributs)
Syntaxe SQL
La syntaxe d'une projection est la suivante1 :
Select liste d'attributs 2 from table
Exemples
Présentation
Il est possible de créer des attributs qui soient le résultat d'une opération arithmétique ou autre
faite à partir d'autres attributs.
Exemples
tous les salaires, commissions et salaires totaux des salariés :
Select NE, nom, sal, comm, sal + comm
from emp;
1 Remarques sur le métalangage utilisé : il ne prétend pas être parfaitement formel! Son objectif est d'associer
pédagogie et rigueur formelle. Les mots clés du langage SQL sont en gras (Select). Les expressions générales sont
en italiques (liste d'attributs). Les explications concernant ces expressions générales sont données soit en note, soit
dans le texte, soit à travers des exemples. Les cas particuliers des exemples sont au format standard (NE, nom).
2 Les attributs de la liste d'attributs sont séparés par une virgule.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 6/18 - Bertrand LIAUDET
nombre de lettres du nom de chaque employé :
Select NE, nom, length(nom)
from emp;
année d’embauche de chaque employé
Select NE, nom, year(datemb)
from emp;
Présentation
On peut renommer les attributs projetés : le nouveau nom s'affichera à la place du nom de
l'attribut. Ce nouveau nom n'est valable que le temps de la requête.
Select ancien_nom nouveau_nom from table;
Si le nouveau nom contient des espaces, on écrira :
Select ancien_nom "nouveau nom" from table;
Remarques
On peut mettre des apostrophes à la place des guillemets
On peut mettre « as » entre l’ancien nom et le nouveau nom
Select ancien_nom as nouveau_nom from table;
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 7/18 - Bertrand LIAUDET
3. Restriction = filtre des lignes : certains tuples, tous les attributs
Présentation
La restriction d'une table est une nouvelle table constituée de certains tuples et de tous les
attributs de la table de départ.
tuple n
Syntaxe AR
Tres = Rest(table ; formule logique de sélection des tuples)
Syntaxe SQL
La syntaxe d'une restriction est la suivante :
Select * from table
where formule logique de sélection des tuples ;
La formule de sélection des tuples fait intervenir les opérateurs habituels de l'algèbre booléenne:
=, !=, >, >=, <, <=, or, and, not
Cf. paragraphe 3.6 sur les opérations sur les opérateurs de comparaison
Exemples
Tous les employés du département 30 avec tous leurs attributs :
Select * from emp
where ND = 30;
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 8/18 - Bertrand LIAUDET
4. Restriction et projection = filtre des lignes et des colonnes :
La restriction- projection
Présentation
La restriction-projection d'une table est une nouvelle table constituée de certains tuples et de
certains attributs de la table de départ.
On fait d'abord la restriction, puis on projette.
C'est l'opération la plus courante.
tuple n
2 types de restriction-projection
Quand on crée une nouvelle table, il faut éviter qu'il y ait des tuples en double. Il y a deux
manières d'éviter les doubles qui correspondent à trois types de restriction-projection :
• la restriction-projection primaire (avec projection de la clé primaire)
• la restriction-projection avec élimination des tuples en doubles
Syntaxe AR
T1 = Rest (table ; formule logique de sélection des tuples)
Tres = Proj ( T1 ; liste d'attributs)
Les deux opérations sont faites l’une après l’autre : d’abord la restriction, puis la projection.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 9/18 - Bertrand LIAUDET
Restriction-projection primaire
Présentation
La syntaxe restriction-projection primaire est :
Select clé primaire, liste d'attributs from table
where formule logique de sélection des tuples ;
La restriction-projection avec clé projette la clé de la table de départ. Conceptuellement, elle
produit donc des tuples qui sont des objets restreints (ayant moins d'attributs) et appartenant à la
table de départ.
Exemple
tous les employés dont le salaire est compris entre 1200 et 1400
Select NE, nom, sal from emp
where sal between 1200 and 1400 ;
Le résultat est une table d'employés avec moins d'attributs.
Remarques
1) Puisqu'on veut les employés, il faut aussi projeter l'attribut donnant le nom (nom), c'est-à-dire
l'attribut significatif pour l'utilisateur, qu'on pourrait appeler la "clé" significative (clé entre
guillemets car il peut y avoir des homonymes).
2) Pour vérifier que la condition est bien réalisée, il vaut mieux projeter les attributs de la
restriction : département, salaire et job.
Syntaxe SQL
La clause distinct permet, à partir d'une projection, d'éliminer les tuples en doubles
Select distinct liste d'attributs from table ;
Exemple
Pour obtenir les différents métiers de la société, on écrira :
Select distinct job from emp ;
Pour obtenir les différents métiers de la société par numéro de département, on écrira :
Select distinct ND, job from emp ;
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 10/18 - Bertrand LIAUDET
Remarques
1) A la différence d'un restriction-projection primaire, dans le cas de l'utilisation d'un distinct, on
ne veut pas - et on ne doit pas - projeter la clé primaire. En effet, si on projette la clé primaire,
les tuples produits seront des objets restreints de la table de départ, tandis qu'avec la clause
distinct on produit des objets qui, conceptuellement, n'appartiennent pas à la table de départ. Les
métiers ne sont pas des employés, les couples (numéro de département, métier) non plus.
2) La table est classée dans l’ordre d’apparition de la première occurrence des valeurs projetées.
3) Dans ce cas, à la différence d'une restriction-projection primaire, les tuples obtenus ne
correspondent pas à un et un seul tuple de la table de départ.
4) Si la liste d'attributs projetés contient la clé primaire, alors le distinct ne sert à rien :
Select distinct clé primaire, liste d'attributs
from table ;
équivaut à :
Select clé primaire, liste d'attributs from table ;
Syntaxe AR
Le distinct n’existe pas en algèbre relationnelle car il est considéré comme étant effectué
systématiquement : une table résultat ne contient jamais de doublons, de toute façon.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 11/18 - Bertrand LIAUDET
5. Tri
Présentation
Les tuples d'une table sont présentés dans n'importe quel ordre. On peut choisir de les trier selon
les valeurs de certains attributs avec la clause order by.
Syntaxe AR
Tres = Tri(table ; liste d'attributs)
Syntaxe SQL
La syntaxe du tri est la suivante :
Select liste_1 d'attributs from table
order by liste_2 d'attributs triés ;
Dans la liste 2 d'attributs triés, on peut préciser l'ordre du tri, ascendant ou descendant, par les
mots-clés asc et desc qu'on fait suivre chaque attribut de tri. Par défaut, le tri est ascendant (il
n'est donc pas nécessaire de préciser asc).
Intelligibilité du tri
Pour que le résultat affiché soit aisément compréhensible, on aura tout intérêt à utiliser la forme
syntaxique suivante :
Select liste_1 d'attributs , liste_2 d'attributs from table
order by liste_1 d'attributs triés ;
Exemple
tous les employés classés par jobs, salaires décroissants et ordre alphabétique de noms :
Select job, sal, nom, NE from emp
order by job asc, sal desc, nom;
Remarque
On voit sur cet exemple que cet ordre d'affichage n'est pas forcément le meilleur : ici on
préférerait projeter soit : job, sal, NE, nom; soit : NE, nom, job, sal.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 12/18 - Bertrand LIAUDET
6. Opérateurs et fonctions
Présentation
On peut faire des opérations arithmétiques en utilisant les opérateurs arithmétiques habituels :
'+', '-', '*', '/', '(', ')'
Mais aussi toutes les fonctions mathématiques standards :
sin, cos, log, exp, power, etc.
La calculette arithmétique
A noter que la calculette SQL est aussi une calculette arithmétique.
On peut écrire :
select 4*log(2,8) ;
On obtiendra le résultat du calcul : 12.
Manuel de référence :
http://dev.mysql.com/doc/refman/5.0/fr/mathematical-functions.html
http://dev.mysql.com/doc/refman/5.0/fr/arithmetic-functions.html
Présentation
Quand une valeur NULL intervient dans une opération, quelle qu’elle soit, le résultat de cette
opération vaut NULL
Opérateurs
Pour savoir si une valeur vaut NULL, on utilise les opérateurs :
is
is not
Manuel de référence :
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 13/18 - Bertrand LIAUDET
http://dev.mysql.com/doc/refman/5.0/fr/control-flow-functions.html
Présentation
On peut faire des comparaisons en utilisant les opérateurs de comparaisons habituels :
'=', '<>', ' !=', '<', '<=', '>', '>='
On peut aussi utiliser les opérateurs booléens
‘AND’, ‘OR’, ‘NOT’
Exemples
tous les employés dont le salaire est compris entre 1200 et 1400
Select NE, nom, sal from emp
where sal between 1200 and 1400 ;
Tous les employés travaillant dans les départements 10 ou 30 :
Select NE, nom, ND from emp
where ND in (10, 30) ;
Tous les employés qui ont un E comme troisième lettre de leurs noms :
Select NE, nom from emp
where nom like '_ _ E %' ;
le "_" signifie : n'importe quel caractère. Le "%" signifie n'importe quelle chaîne de caractères,
dont la chaîne vide.
Manuel de référence :
http://dev.mysql.com/doc/refman/5.0/fr/comparison-operators.html
http://dev.mysql.com/doc/refman/5.0/fr/logical-operators.html
Like : http://dev.mysql.com/doc/refman/5.0/fr/pattern-matching.html
http://dev.mysql.com/doc/refman/5.0/fr/operator-precedence.html
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 14/18 - Bertrand LIAUDET
Les opérations de traitement de chaîne
Avec ces trois fonctions, on peut faire tous les traitements possibles sur les chaînes (sauf les
traitements liés à la distinction entre minuscule et majuscule).
Manuel de référence :
http://dev.mysql.com/doc/refman/5.0/fr/string-functions.html
Manuel de référence :
http://dev.mysql.com/doc/refman/5.0/fr/date-calculations.html
http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 15/18 - Bertrand LIAUDET
TP N°2 : PROJECTION, RESTRICTION, DISTINCT ET TRI
Présentation
L’exercice consiste à écrire des requêtes SQL d’interrogation de la BD.
On utilise la base des employés.
Présentation
On travaillera sur la table suivante :
EMP(NE, NOM, JOB, DATEMB, SAL, COMM, ND)
• NE numéro de l’employé. Clé primaire.
• NOM nom de l’employé.
• JOB intitulé du poste occupé.
• DATEMB date d’embauche.
• SAL salaire de l’employé.
• COMM commission (part de salaire variable).
• ND n° du département dans lequel travaille l’employé.
Exercice 2 : interrogation de la BD
Travail à faire
Présentation
Dans un fichier texte à votre nom + TP02, écrire les questions et les réponses les unes à la suite
des autres.
• Les questions, avec leur numéro, sont précédées de : --
Le – est la marque des commentaires dans les scripts sql.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 16/18 - Bertrand LIAUDET
• Les requêtes sql sont terminées par « \p ; »
Le « \p » permet que la requête soit affichée avant son résultat.
• Pour chaque question, on projette : clé primaire, clé significative, attributs demandés,
attributs de restriction.
• Pour chaque requête, on passe à la ligne au FROM, au WHERE, au ORDER BY, \p ;
• Après chaque requête, on met, en commentaire, le nom de l’attribut clé primaire de la table
résultat
• On commence le fichier par :
-- Fichier de Dupond
tee TPSQL.txt \p;
Ca permet que tout ce qui s’affiche à l’écran passe aussi dans le fichier TPSQL.txt
• On termine le fichier par :
notee ;
Ca permet que les commandes suivantes ne passent pas dans le fichier TPSQL.txt
Exemple
-- Fichier de DupondTP02
tee toto.txt \p;
--------------------------------------------------------------------------
-- 1 : Tous les employés avec leurs attributs
Select *
From emp
\p;
-- CP : NE
---------------------------------------------------------------------------
-- 2 : tous les employés avec leurs salaires
Select …
etc.
Méthode de travail
Ouvrir un fichier de test qui contiendra une seule requête. Par exemple : « test.sql ».
Dans ce fichier écrire la requête traitée.
Exécuter ce fichier : source test.sql
Vérifier le résultat.
Quand le résultat est bon : construire le fichier à votre nom qui contiendra toutes les requêtes.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 17/18 - Bertrand LIAUDET
Les requêtes
1. Tous les employés avec tous leurs attributs
2. Tous les employés
3. Tous les employés triés par n° de département croissant, ordre alphabétique des jobs,
ancienneté décroissante
4. Tous les employés avec leurs salaires triés par salaire décroissant
5. Tous les employés du département 30 avec tous leurs attributs
6. Tous les employés du département 30 triés par ordre alphabétique
7. Tous les managers des départements 20 et 30
8. Tous les employés qui ne sont pas managers et qui sont embauchés en 1981
9. Tous les jobs de la société
10. Tous les employés ne travaillant pas dans le département 30 et qui soit ont un salaire > à
2800, soit sont manager.
11. Tous les employés dont le salaire est compris entre 1000 et 2000
12. Tous les numéros de département non vides (dans lesquels travaille au moins un employé)
13. Tous les employés ayant ou pouvant avoir une commission
14. Tous les salaires, commissions et totaux (salaire + commission) des vendeurs
15. Tous les salaires, commissions et totaux (salaire + commission) des employés
16. Tous les employés embauchés en 1981
17. Tous les employés avec leur date d’embauche, la date du jour et leur nombre d’années
d’ancienneté (on considérera que toute année commencée vaut pour une année), triés par
ancienneté (on utilisera les fonctions de base de traitement de date et de traitement de
chaîne).
18. Tous les employés ayant un A en troisième lettre de leurs noms.
19. Tous les employés ayant au moins deux A dans leurs noms.
20. Donner les quatre dernières lettres du nom de chaque employé.
INSIA - BASES DE DONNÉES – ING 1 – Piscine Cours 02 - page 18/18 - Bertrand LIAUDET