DUT Génie Biologique Option Bioinformatique Les bases de

publicité
DUT Génie Biologique
Option Bioinformatique
Les bases de données relationnelles
avec MySQL
Éric Pipard
Travaux Pratiques n° 1
Prise en main du SGBDR MySQL
Objectifs :
Se familiariser avec les instructions de bases de SQL en utilisant le moteur MySQL : ­ créer et gérer une base,
­ créer et gérer les tables SQL,
­ sélectionner des enregistrements.
Table des matières
Travail demandé......................................................................................................................................3
1 – Le serveur et le moteur MySQL........................................................................................................4
1.1 – Démarrage et arrêt du serveur....................................................................................................4
1.2 – Démarrage du moteur MySQL..................................................................................................4
2 – Création et gestion d'une base de données........................................................................................4
2.1 – Création d'une base de données : CREATE DATABASE <uneBase>;.....................................4
2.2 – Utilisation d'une base de données : USE <uneBase>;...............................................................4
3 – Création et gestion d'une table d'une base de données......................................................................5
3.1 – Création d'une table d'une base : CREATE TABLE <...>;........................................................5
3.2 – Description d'une table d'une base : DESC <uneTable>;..........................................................5
3.3 – Valeur NOT NULL d'une colonne.............................................................................................6
3.4 – Valeur DEFAULT d'une colonne...............................................................................................6
3.5 – Suppression d'une table d'une base : DROP TABLE <uneTable>;...........................................7
3.6 – Ajouter des données : INSERT INTO <uneTable> (...) VALUES (...);.....................................7
3.7 – Visualiser le contenu d'une table : SELECT * FROM <uneTable>;.........................................7
4 – Quelques types de données................................................................................................................8
5 – L'instruction SELECT <liste d'attributs> FROM <nom de table> WHERE <prédicat>;.................9
5.1 – Sélectionner certaines lignes.....................................................................................................9
5.2 – Sélectionner certaines lignes et certaines colonnes...................................................................9
5.3 – Sélectionner avec AND et OR...................................................................................................9
5.4 – Sélectionner avec des comparateurs..........................................................................................9
5.5 – Les valeurs NULL et le prédicat IS NULL...............................................................................9
5.6 – Le prédicat LIKE.......................................................................................................................9
5.7 – Les prédicats BETWEEN et IN...............................................................................................10
5.8 – Les prédicats NOT, NOT IN, IS NOT NULL .........................................................................10
6 – Sélectionner des enregistrements selon l'ordre alphabétique : ORDER BY....................................10
6.1 – Enregistrements ordonnés selon une colonne..........................................................................10
6.2 – Enregistrements ordonnés selon une colonne et l'ordre descendant : DESC...........................11
6.3 – Enregistrements ordonnés selon plusieurs colonnes................................................................11
7 – Quelques fonctions de colonnes.......................................................................................................11
7.1 – La fonction somme : SUM(<nom_de_colonne>).....................................................................11
7.2 – La clause : GROUP BY <nom_de_colonne>...........................................................................11
7.3 – La fonction moyenne : AVG(<nom_de_colonne>)..................................................................11
7.4 – Les fonctions : MIN(<nom_de_colonne>) et MAX(<nom_de_colonne>)..............................11
7.5 – La fonction : COUNT(<nom_de_colonne>)............................................................................11
7.6 – L'instruction : SELECT DISTINCT <nom_de_colonne>........................................................12
7.7 – Les clauses : LIMIT <nb_de_ligne> et LIMIT <nième_ligne> <nb_de_ligne>......................12
7.8 – La clause : HAVING................................................................................................................12
Annexe...................................................................................................................................................13
2
Travail demandé
1. Tout d'abord, vous devez lire attentivement les paragraphes suivants et comprendre les exemples.
2. À partir des données en annexe :
2.1. Créer une base de données nommée Liste, une table de nom mes_contacts, décrivez la table. Ne vous souciez pas pour l'instant ni des valeurs NULL, ni des valeurs de défaut.
2.2. Ajouter une colonne sexe en 4ème position ; pour ce faire vous devez supprimer la table et la recréer.
2.3. Ajouter les données se trouvant en annexe.
3. Visualiser le contenu de votre table. Que remarquez­vous ? La correction de la table se fera au second TP.
4. Donner le centre d'intérêt et ce que recherche Mr Gros.
5. Donner toutes les informations de Mme Neveu.
6. Chercher le nom et prénom des personnes qui habitent à Nice.
7. Chercher le nom et prénom des personnes qui habitent à Nice et qui soient célibataires.
8. Exécuter ces requêtes :
a) INSERT INTO mes_contacts (nom, prenom, sexe, anniversaire, profession, lieu, centres_interet,cherche) VALUES ('Souba', 'Delphine', 'F', '1986­06­25','Ingénieur', 'Grenoble, 38', 'Ski', 'Rien');
b) SELECT * FROM mes_contacts WHERE nom='Souba'; c) Que remarquez­vous ?
9. Quels sont les personnes célibataires ou mariés ? Pour quelle raison Melle Neveu n'apparait­il pas ?
10. Quels sont les personnes dont la première lettre du nom est compris entre 'A' et 'F' ?
11. Quels sont les personnes avec un email NULL ? Quels sont les personnes avec un email non NULL ?
12. Quels sont les personnes habitant Grenoble ?
13. Quels sont les personnes dont le second caractère du nom est 'e' ?
14. Quels sont les personnes nées en 1962 et 1964 ?
15. Idem que 14 mais on désire le résultat ordonné sur les prénoms.
16. Combien de personnes ont une adresse email ?
3
1 – Le serveur et le moteur MySQL
1.1 – Démarrage et arrêt du serveur
[root@aldebaran Desktop]# /etc/init.d/mysqld start
[root@aldebaran Desktop]# mysqld_safe &
[root@aldebaran Desktop]# /etc/init.d/mysqld restart
[root@aldebaran Desktop]# /etc/init.d/mysqld stop
[root@aldebaran Desktop]# mysqladmin shutdown ­p
[root@aldebaran Desktop]# /etc/init.d/mysqld status
1.2 – Démarrage du moteur MySQL
[pipard@aldebaran Desktop]$ mysql ­p ­h crick2
// ­h 194.214.236.16
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 5.0.24a­log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> 2 – Création et gestion d'une base de données
2.1 – Création d'une base de données : CREATE DATABASE <uneBase>;
Les espaces ne sont pas autorisés dans les noms de bases de données.
mysql> CREATE DATABASE ma_base;
Query OK, 1 row affected (0.38 sec)
mysql> 2.2 – Utilisation d'une base de données : USE <uneBase>;
La commande USE permet de charger une base et de travailler sur celle­ci.
mysql> USE ma_base;
Database changed
mysql> 4
3 – Création et gestion d'une table d'une base de données
3.1 – Création d'une table d'une base : CREATE TABLE <...>;
Les espaces ne sont pas autorisés dans les noms de tables.
La commande CREATE TABLE de création d'une table prend en paramètre le nom de la table ainsi que la liste des colonnes à créer. Cette liste comprend le nom et le type des données.
mysql> CREATE TABLE uneTable
­> (
­> nom VARCHAR(30),
­> anniversaire DATE,
­> courriel VARCHAR(50)
­> );
Query OK, 0 rows affected (0.06 sec)
mysql> CREATE TABLE uneTable
­> (
­> nom VARCHAR(30) NOT NULL,
­> anniversaire DATE NOT NULL,
­> courriel VARCHAR(50)
­> );
Query OK, 0 rows affected (0.06 sec)
// NULL est interdite comme valeur
// NULL est interdite comme valeur
mysql> Classez vos données par catégorie (nom de colonne) avant de créer une table; déterminer bien le type des données de chaque colonne.
3.2 – Description d'une table d'une base : DESC <uneTable>;
5
3.3 – Valeur NOT NULL d'une colonne
mysql> CREATE TABLE uneAutreTable
­> (
­> nom VARCHAR(10) NOT NULL,
­> prenom VARCHAR(10) NOT NULL,
­> age INT
­> );
Query OK, 0 rows affected (0.02 sec)
mysql>
3.4 – Valeur DEFAULT d'une colonne
mysql> CREATE TABLE uneAutreTable
­> (
­> nom VARCHAR(10) NOT NULL,
­> prenom VARCHAR(10) NOT NULL,
­> age INT DEFAULT 39);
6
3.5 – Suppression d'une table d'une base : DROP TABLE <uneTable>;
DROP TABLE supprime une table vide ou avec des données.
mysql> DROP TABLE uneTable;
Query OK, 0 rows affected (0.00 sec)
mysql> DESC uneTable;
ERROR 1146 (42S02): Table 'ma_base.uneTable' doesn't exist
mysql> 3.6 – Ajouter des données : INSERT INTO <uneTable> (...) VALUES (...);
Les valeurs doivent être dans le même ordre que les noms de colonnes spécifiés. Les noms de colonnes ne suivent pas nécessairement l'ordre des colonnes donnés à la création de la table. Tous les noms des colonnes peuvent être ommis ; dans ce cas, toutes les valeurs des colonnes doivent être spécifiées dans l'ordre des colonnes données lors de la création de la table. Des noms de colonnes peuvent être ommis ; dans ce cas, les valeurs correspondantes sont à NULL ou à une valeur de DEFAULT précisée lors de la création de la table. mysql> INSERT INTO uneTable
­> (courriel, anniversaire, nom)
­> VALUES
­> ('[email protected]', '1959­27­06', 'Pipard');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> INSERT INTO uneTable
// omission des noms de colonne
­> VALUES
­> ('[email protected]', '1959­27­06', 'Pipard');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> INSERT INTO uneTable
­> (nom)
­> VALUES
­> ('Toto');
Query OK, 1 row affected (0.00 sec)
// omission de certaines colonnes
mysql> Une colonne sans valeur assignée par INSERT contient NULL.
3.7 – Visualiser le contenu d'une table : SELECT * FROM <uneTable>;
Permet de sélectionner toutes (*) des données de la table.
7
mysql> INSERT INTO uneAutreTable
­> (nom, prenom)
­> VALUES
­> ('rt', 'uty');
Query OK, 1 row affected (0.00 sec)
4 – Quelques types de données
VARCHAR(n)
CHAR (n)
BLOB
DATE
TIME
DATETIME
DEC(n, p)
INT
'azerty'
'aerty'
'gdhjdhsskjdkd'
'YYYY­MM­DD'
'HH:MM:SS'
DATE+TIME
3.5
17
chaîne longueur variable
chaîne longueur fixe
objet binaire
255 caractères
255 caractères
65535
8
5 – L'instruction SELECT <liste d'attributs> FROM <nom de table> WHERE <prédicat>;
5.1 – Sélectionner certaines lignes
mysql> SELECT * FROM uneTable
­> WHERE age = 39;
5.2 – Sélectionner certaines lignes et certaines colonnes
mysql> SELECT nom, prenom FROM uneTable
­> WHERE age = 39;
5.3 – Sélectionner avec AND et OR
mysql> SELECT nom, prenom FROM uneTable
­> WHERE age = 39 AND nom = 'Pipard';
mysql> SELECT nom, prenom FROM uneTable
­> WHERE age = 39 OR nom = 'Pipard';
5.4 – Sélectionner avec des comparateurs
Les comparateurs permettent des comparaisons numérique et alphabétique.
mysql> SELECT nom, prenom FROM uneTable
­> WHERE age > 39 OR nom = 'Pipard';
Liste des comparateurs : =, <>, <, >, <=, >=
mysql> SELECT nom, prenom FROM uneTable
­> WHERE age > 39 OR nom < 'P';
5.5 – Les valeurs NULL et le prédicat IS NULL
Les valeurs NULL correspondent à des valeurs indéfinies; elles ne peuvent pas être sélectionnées directement.
mysql> SELECT nom, prenom FROM uneTable
­> WHERE nom IS NULL;
5.6 – Le prédicat LIKE
Le prédicat LIKE permet de comparer avec des sous­chaînes de caractères; il est utilisé avec deux caractères joker :
­ % pour substituer n'importe quelle chaîne,
­ _ pour substituer un unique caractère.
mysql> SELECT * FROM uneTable
­> WHERE ville LIKE 'Saint%';
9
mysql> SELECT * FROM uneTable
­> WHERE ville LIKE '%Saint%';
mysql> SELECT * FROM uneTable
­> WHERE ville LIKE 'Saint_Malo';
5.7 – Les prédicats BETWEEN et IN
Le prédicat BETWEEN permet de sélectionner sur une plage de valeurs; les bornes sont comprises pour les entiers et exclues pour les caractères ; les bornes sont lues de la gauche vers la droite ; ainsi BETWEEN 30 AND 20 retournera rien.
Le prédicat IN permet d'énumérer les valeurs d'une plage.
mysql> SELECT * FROM uneTable
­> WHERE age BETWEEN 40 AND 50;
mysql> SELECT * FROM uneTable
­> WHERE ville BETWEEN 'D' AND 'G';
mysql> SELECT * FROM uneTable
­> WHERE ville IN ('D' , 'G');
5.8 – Les prédicats NOT, NOT IN, IS NOT NULL Le prédicat NOT exprime la négation. Il s'écrit juste après WHERE.
mysql> SELECT * FROM uneTable
­> WHERE NOT age BETWEEN 40 AND 50;
mysql> SELECT * FROM uneTable
­> WHERE ville NOT IN ('D' , 'G');
mysql> SELECT * FROM uneTable
­> WHERE ville IS NOT NULL;
6 – Sélectionner des enregistrements selon l'ordre alphabétique : ORDER BY
Le classement est effectué selon l'ordre ascendant sur les valeurs d'une (des) colonne(s) donnée(s). L'ordre descendant est indiqué par l'instruction DESC.
6.1 – Enregistrements ordonnés selon une colonne
mysql> SELECT titre, genre
­> FROM uneTable
­> WHERE genre = 'familial'
­> ORDER BY titre;
10
6.2 – Enregistrements ordonnés selon une colonne et l'ordre descendant : DESC
mysql> SELECT titre, genre
­> FROM uneTable
­> WHERE genre = 'familial'
­> ORDER BY titre DESC;
6.3 – Enregistrements ordonnés selon plusieurs colonnes
Les colonnes sont triées dans l'ordre où elles apparaissent dans la clause ORDER BY.
mysql> SELECT titre, genre, achat
­> FROM uneTable
­> ORDER BY genre, achat;
7 – Quelques fonctions de colonnes
7.1 – La fonction somme : SUM(<nom_de_colonne>)
Cette fonction somme toutes les valeurs d'une colonne.
mysql> SELECT SUM(vente)
­> FROM uneTable
­> WHERE nom = 'Pipard';
7.2 – La clause : GROUP BY <nom_de_colonne>
GROUP BY permet de regrouper les résultat par rapport à une colonne donnée; élimine les duplicata.
mysql> SELECT nom, SUM(vente)
­> FROM uneTable
­> GROUP BY nom;
7.3 – La fonction moyenne : AVG(<nom_de_colonne>)
La moyenne se calcule par rapport aux nombres de lignes d'une colonne donnée.
mysql> SELECT nom, AVG(vente)
­> FROM uneTable
­> GROUP BY nom;
7.4 – Les fonctions : MIN(<nom_de_colonne>) et MAX(<nom_de_colonne>)
Calculent la plus petite et la plus grande valeur d'une colonne donnée.
mysql> SELECT nom, MAX(vente)
­> FROM uneTable
­> GROUP BY nom;
7.5 – La fonction : COUNT(<nom_de_colonne>)
Calcule le nombre de lignes d'une colonne donnée sans prendre en compte les valeurs nulles.
mysql> SELECT COUNT(date_vente)
­> FROM uneTable;
11
7.6 – L'instruction : SELECT DISTINCT <nom_de_colonne>
Cette fonction sélectionne des valeurs distinctes d'une colonne donnée (donc élimine les duplicata).
mysql> SELECT DISTINCT date_vente
­> FROM uneTable;
mysql> SELECT COUNT(DISTINCT date_vente)
­> FROM uneTable;
7.7 – Les clauses : LIMIT <nb_de_ligne> et LIMIT <nième_ligne> <nb_de_ligne>
LIMIT <nb_de_ligne> limite le résultat d'une requête à un nombre de lignes nb_de_ligne en commençant par les premières.
mysql> SELECT nom, SUM(vente)
­> FROM uneTable
­> GROUP BY nom
­> ORDER BY SUM(vente) DESC
­> LIMIT 2;
LIMIT <nième_ligne> <nb_de_ligne> limite le résultat d'une requête à un nombre de lignes nb_de_ligne en commençant par la nième (la numérotation des lignes commence à 0).
mysql> SELECT nom, SUM(vente)
­> FROM uneTable
­> GROUP BY nom
­> ORDER BY SUM(vente) DESC
­> LIMIT 12, 2;
7.8 – La clause : HAVING
La clause HAVING spécifie un critère de recherche pour un groupe ou une fonction d'agrégation (SUM, AVG, ...). mysql> SELECT nom, SUM(vente)
­> FROM uneTable
­> GROUP BY nom
­> HAVING SUM(vente) > 123;
12
Annexe
nom
Neveu
Gros
Souk
Mendoza
prenom
Anne
Etienne
Alain
Lucie
email
anne@
nessayepas@
souk@
lucie@
planchesagogo.com pizzaprestissima.com pizzaprestissima.com cafestarbuzz.com
anniversaire
7­1­1962
10­9­1964
1­7­1966
19­8­1979
profession
Ingénieur Informatique
Administrateur Système
Ingénieur Aéronautique
Administrateur Système Unix
lieu
Grenoble, 38
Nice, 06
Orléans, 45
Nice, 06
statut
Célibataire mais à un copain
Célibataire
Marié
Marié
centres_interet
Collection de livres, fabrication de la bière, équitation
cherche
Nouveau boulot
Randonnée, écriture Java, programmation
amis, rdv
Rien
Théâtre, danse
Nouveau boulot
13
Téléchargement