INSIA - ING 1 Bases de données Piscine MySQL Cours et TP n 09



Documents pareils
Olivier Mondet

Le Langage SQL version Oracle

FileMaker 13. Guide de référence SQL

Le Langage De Description De Données(LDD)

Introduction aux Bases de Données 2004/2005

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Présentation Windows Azure Hadoop Big Data - BI

Bases de Données relationnelles et leurs systèmes de Gestion

TP Contraintes - Triggers

Pour les débutants. langage de définition des données

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

PHP 5. La base de données MySql. A. Belaïd 1

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

I. MySQL : Serveur et SGBD

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Création et Gestion des tables

Cours: Administration d'une Base de Données

Historisation des données

Langage SQL : créer et interroger une base

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

TP Bases de données réparties

Devoir Data WareHouse

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

TP 1. Prise en main du langage Python

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

MySQL / SQL EXEMPLES

Exercices sur SQL server 2000

Les dates SAS expliquées à ma fille

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

MYSQLDUMP & ZRM COMMUNITY

MS SQL Express 2005 Sauvegarde des données

Codage d information. Codage d information : -Définition-

Les BASES de DONNEES dans WampServer

Bases de données et sites WEB

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

Le langage SQL Rappels

1 Introduction et installation

SQL Historique

Optimisations des SGBDR. Étude de cas : MySQL

1/ Présentation de SQL Server :

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Le langage SQL (première partie) c Olivier Caron

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions


1. Base de données SQLite

Manuel de référence réduit de mysql (version 4.1.1) + "The MySQL C API" par Paul Dubois Licence Professionnelle Réseaux et Télécommunications Option

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Informatique Générale

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Sybase Adaptive Server Enterprise 15

INTRODUCTION AU DATA MINING

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Bases de données relationnelles

Bases de programmation. Cours 5. Structurer les données

Logiciel de Base. I. Représentation des nombres

CREATION WEB DYNAMIQUE

Mysql avec EasyPhp. 1 er mars 2006

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

Optimisation de MySQL

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Les chaînes de caractères

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

Algorithmique et Programmation, IMA

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

Cours 4 : Agrégats et GROUP BY

Les bases de données

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Mejdi BLAGHGI & Anis ASSÈS

Introduction au Système de Gestion de Base de Données et aux Base de Données

Algorithmique et programmation : les bases (VBA) Corrigé

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

MariaDB/MySQL Avancé. Pierre Mavro Creative Commons License

Ecole Industrielle et Commerciale de la ville de Namur. Structure et application des bases de données. Y. Mine

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Utilisation d objets : String et ArrayList

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Auto-évaluation Oracle: cours de base

Intégrité sémantique dans les bases de données relationnelles

Cours SQL. Base du langage SQL et des bases de données

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Bases de données élémentaires Maude Manouvrier

Optimisation SQL. Quelques règles de bases

Transcription:

INSIA - ING 1 Bases de données Piscine MySQL Cours et TP n 09 Notions spécifiques LA BIBLE : MySQL 5.0 Reference Manual http://dev.mysql.com/doc/refman/5.0/fr/index.html Site officiel MySql : http://www-fr.mysql.com/ Bertrand LIAUDET SOMMAIRE SOMMAIRE 1 MYSQL NOTIONS SPECIFIQUES 3 Commandes systèmes MySQL 3 Les fonctions de la calculette 3 La commande SHOW 3 Présentation des résultats : limit et \G 3 Rand() et limit 3 Types et transtypage 3 Les types numériques 3 Les types date 4 Type chaîne 4 Type chaine : enum et set 4 Cast et convert 4 Les fonctions 5 Fonctions mathématiques 5 Fonctions de chaînes 5 Fonctions de date 5 Agrégations avancées 7 Group by et only Full Group By 7 Fonctions d agrégation 7 Count (distinct attribut) 7 INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 1/20 - Bertrand LIAUDET

Group concat 8 With Rollup 8 Les opérateteurs de test : CASE-WHEN, IF, IFNULL 9 CASE - WHEN 9 IF 10 IF NULL 10 Questions de caractères 11 Jeu de caractère : character set 11 Collation: character set 12 5 niveaux de définition : Serveur, Client, Base, Table, Colonne 13 Conversion : CONVERT 13 Usages 14 Regexp : expression régulière 15 Sauvegarde 16 shell > mysql dump 16 Exporter les données : SELECT INTO OUTFILE 17 Importer les données : LOAD DATA INFILE 18 Exercices 19 Première édition : novembre 2009 INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 2/20 - Bertrand LIAUDET

MYSQL NOTIONS SPECIFIQUES Commandes systèmes MySQL Les fonctions de la calculette http://dev.mysql.com/doc/refman/5.0/fr/entering-queries.html Select database(); Select user() ; Select version() ; Select found_rows( ), row_count( ) La commande SHOW http://dev.mysql.com/doc/refman/5.0/fr/show.html help show Show databases, Show tables, Show create table, Show grants, Show variables Show table status from nombd ; // synthèse sur les tables de la BD Select table_schema, table_name, table_row from tables where table_schema= mabd ; Présentation des résultats : limit et \G Limit 5 ; // les 5 premiers Limit 5, 10 // 10 tuples à partir du 5+1ème \G // affichage en mode page. Rand() et limit Select rand( ) ; Order by rand( ) limit 1 : 1 au hasard; Order by rand( ) limit 5 : 5 au hasard; Types et transtypage Les types numériques INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 3/20 - Bertrand LIAUDET

http://dev.mysql.com/doc/refman/5.0/fr/numeric-type-overview.html BOOL, BOOLEAN, BIT INT (M), INTEGER (M), TINYINT (M), SMALLINT (M), MEDIUMINT (M), BIGINT (M) FLOAT(precision), FLOAT (M,D), DOUBLE (M,D), DOUBLE PRECISION (M,D), REAL (M,D) DECIMAL (M,D), DEC (M,D) avec M : taille de l affichage, D: nombre de décimal, M>=D, si M=D alors 1 < n < 1. Les types date http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-type-overview.html DATE, DATETIME, TIME TIMESTAMP : pour gérer automatiquement la date de création ou de mise à jour. YEAR(2 4) Type chaîne http://dev.mysql.com/doc/refman/5.0/fr/string-type-overview.html CHAR(M), NCHAR(M), CHARACTER : taille statique, 255 max. VARCHAR(M), NATIONAL VARCHAR(M) : taille dynamique, 255 max. BLOB, TEXT, TINYBLOB, TINYTEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT : taille dynamique, jusqu à 4GO. Type chaine : enum et set ENUM('value1','value2',...) : une valeur parmi une liste SET('value1','value2',...) : zéro, une ou plusieurs valeurs parmi une liste Cast et convert http://dev.mysql.com/doc/refman/5.0/fr/cast-functions.html cast Select cast( 19.4 as signed ); // 19 Select cast( 4/3 as decimal(2,1) ); // 1.3 Convert Select convert ( 4/3, decimal(3,2) ); // 1.33 Select convert ( 4/3, decimal(2,2) ); // 0.99!!! ATTENTION!!! Select convert ( 4/3, decimal(1,2) ); // ERREUR!!! INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 4/20 - Bertrand LIAUDET

Les fonctions Fonctions mathématiques http://dev.mysql.com/doc/refman/5.0/fr/mathematical-functions.html abs (nb), ceil (nb) : arrondi vers le haut ; floor (nb) : arrondi vers le bas ; round (nb ) arrondi au plus proche ; power (nb, puissance) : élévation à la puissance ; sqrt (nb) : racine ; truncate (nb, nbdécimales) : arrondi en vers le bas en précisant le nombre de décimales conservées ; pi( ) : renvoie PI. Fonctions de chaînes http://dev.mysql.com/doc/refman/5.0/fr/string-functions.html http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html Les constantes chaînes de caractères sont entre guillemets, apostrophes ou accents grave (altgr+7, espace). Like, length(attribut) ; substring(attribut from déb for lgr) : sous-chaîne commençant en déb de longueur lgr ; substring(att from 11) : la sous-chaîne à partir du 11 ème caractère ; strcmp(texte1, texte2) : renvoie 0 si les deux textes sont identiques, -1 si le premier est premier en ordre alphabétique, 1 sinon ; trim(texte) : élimine les espaces au début et à la fin ; upper(texte) ; lower(texte) ; replace(texte, ancien, nouveau) ; locate(mot, texte) : position d un mot dans un texte ; locate(mot, texte, début) : position d un mot dans un texte à partir de début ; concat(text1, text2, etc.) ; concat_ws(séparateur, text1, text2, etc.) : concaténation avec un séparateur ; binary : opérateur unaire qui rend un texte sensible à la casse : paris = binary PARIS est faux. Fonctions de date http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html to_days(date), from_days(entier) : conversion d une date en jours. from_days démarre à 366 : 1 janvier de l année 1. To_days démarre au 1 janvier 0. date_diff(date1, date2) : nb jours entre 2 dates ; date_add(date, interval nb type) : ajout d un nombre de mois, jours, heures, etc.(type : year, month, day, week, hour, minute, second, microsecond, etc.) ; + interval nb type : augmente ou diminue directement une date, ou date et heure. Ne marche pas pour les heures seules ; exemple : select now + interval -1 month ; extract (type from date ) : extraction d une année, mois, jour, heure, etc. (type : year, month, etc. + year_month, hour_minute, etc.) year(date) ; month(date) ; day(date) ; hour(date) ; minute(date) ; second(date) ; curdate() : date ; curtime() : heure ; now() : date et heure ; current_date : date ; current_time : heure ; current_timestamp : date et heure ; utc_date : date ; utc_time : heure ; utc_timestamp : date et heure ; date et heure de greenwich («universel») INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 5/20 - Bertrand LIAUDET

Gestion des formats d affichage : date_format( ) Exemple date_format( now( ), '%W %d %M %H heures %i minutes %s sec.') Friday 27 February 16 heures 12 minutes 23 sec. Formats %k : heure sur 1 chiffre si possible ; %w : jour de 0 à 6, 0 pour dimanche ; %a : jour abrégé ; %e : numéro du jour du mois sur 1 chiffre si possible ; %m : mois sur deux chiffres ; %c : mois sur 1 chiffre si possible ; %Y : année sur 4 chiffres ; %y : année sur 2 chiffres. Quelques conversions Date vers secondes et réciproquement Nombre de secondes depuis le 1 er janvier 1970 : unix_timestamp (date) Inverse : from_unixtime( nb secondes ) Remarque : unix_timestamp ( ) unix_timestamp (now() ) Heure vers seconde et réciproquement Nombre de seconde depuis minuit : time_to_sec ( heure ) Inverse : sec_to_time ( nb secondes ) Conversion d une date en nombre et réciproquement Curdate( ) + 0 = 20090220 ; Date(20090220) = 20 février 2009 Conversion d une heure en nombre et réciproquement Curtime( ) + 0 = 161055 ; Time(161055) = 16 heures 10 minutes et 55 secondes Date de création et date de modification Create table test ( datecrea timestamp default now( ), ) L attribut sera affecté automatiquement à «now» à la création d un tuple. Create table test ( datemodif timestamp default now( ) on update current_timestamp default now( ), ) L attribut sera affecté automatiquement à «now» à la création d un tuple puis remis à now à chaque update. INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 6/20 - Bertrand LIAUDET

Agrégations avancées Group by et only Full Group By Permissivité du group by MySQL : on peut projeter d autres attributs que ceux du group by. Les attributs du group by forment la clé primaire. Les nouveaux attributs projetés doivent être déterminés fonctionnellement par cette clé primaire pour que l opération soit significative. set @@sql_mode=concat(@@sql_mode,"only_full_group_by"); Fonctions d agrégation http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html variance( ), var_samp( ), std( ), std_samp( ) (écart-type) select t1.no_commande, t2.tot, t1.fous from ( select dc.no_commande, group_concat(p.no_fournisseur) fous from details_commandes dc, produits p where dc.ref_produit=p.ref_produit group by dc.no_commande ) t1, select no_commande, ceil(prix_unitaire*quantite*(1-remise))as tot from details_commandes group by tot having tot > 30000 order by tot ) t2 where t1.no_commande=t2.no_commande; Count (distinct attribut) Count (distinct attribut) dans un group by Exemple Combien d employés et de départements par fonction Select job, count(ne) nbemp, count(distinct nd) nbdept from emp group by job; job nbemp nbdept Ingé 5 3 Com 2 2 Etc. 5 ingénieurs répartis dans 3 départements 2 commerciaux répartis dans 2 départements, etc. INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 7/20 - Bertrand LIAUDET

Group concat http://dev.mysql.com/doc/refman/5.0/fr/group-by-functions.html#function_group-concat Pour une valeur du group by, on regroupe toutes les valeurs d un attribut : Select attributgb, group_concat(liste d attributs) from table group by attributgb; On peut trier et choisir son séparateur : group_concat(attribut order by attribut separator et ) Exemple Liste des employés par fonction : Select job, group_concat(ne order by ne) from emp group by job; Ingé 1, 4, 5, 10 Com 2, 7 Boss 3 Secrétaire 6, 8, 9 With Rollup http://dev.mysql.com/doc/refman/5.0/fr/group-by-modifiers.html Le with rollup permet de faire les totaux par catégorie après un group by. Select. Group by (au moins deux attributs) WITH ROLLUP ; Exemple Les employés travaillent dans un département et ont une fonction. On veut connaître le nombre d employés par fonction et par département avec le total par fonction. Select job, nd, count(*) nb from emp group by job, nd with rollup; JOB ND NB Ingé dept10 4 Ingé dept20 2 Ingé NULL 6 Com dept10 1 Com NULL 1 INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 8/20 - Bertrand LIAUDET

Les opérateteurs de test : CASE-WHEN, IF, IFNULL http://dev.mysql.com/doc/refman/5.0/fr/control-flow-functions.html Les opérateurs de test permettent de produire un nouvel attribut dont on pourra utiliser les valeurs en projection ou en restriction. CASE - WHEN Première syntaxe : case classique La première syntaxe permet de calculer le nouvel attribut à partir d une succession de comparaison d égalité entre une expression unique de départ et différentes valeur : c est un «case» ou un «switch» algorithmique classique. CASE expression WHEN valeur THEN résultat1 [* WHEN THEN ] [ELSE résultat] END Valeur et résultat sont des expressions (constantes littérales, attributs, expressions arithmétiques, etc.) Remarque Le ELSE permet de garantir que tous les tuples seront pris en compte. Si il n y a pas de ELSE et que tous les cas ne sont pas pris en compte dans les alternatives du ELSE, le tuple ne sera pas éliminé (seul le WHERE peut faire ça), mais la valeur de l attribut calculé vaudra NULL. Deuxième syntaxe : else-if La seconde syntaxe permet de calculer le nouvel attribut à partir d une succession de tests distincts les uns des autres. C est un «else if» algorithmique classique. Exemple CASE WHEN expression opérateur valeur THEN résultat [* WHEN THEN ] [ELSE résultat] END On veut classer les employés en 3 catégories de salaire : 1 :bas, 2 :moyen, 3 :fort. Un salaire moyen est compris entre 1200 et 2500. Select NE, nom, case when sal <1200 then 1:bas when sal <2500 then 2:moyen else 3:gros end as categorie from emp order by categorie, nom; INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 9/20 - Bertrand LIAUDET

IF Exemple Le IF est un cas particulier du CASE qui réduit les valeurs possibles à 2 : IF(expr1,expr2,expr3) : retourne expr2 si expr1 est différent de 0 et de null, expr3 sinon. On reprend l exemple du CASE : Select NE, nom, if(sal <1200, 1:bas,if(sal <2500, 2:moyen, 3:gros )) as categorie from emp order by categorie, nom; IF NULL Le IFNULL est un cas particulier du IF : IFNULL(expr1,expr2) : retourne expr2 si expr1 est null. INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 10/20 - Bertrand LIAUDET

Questions de caractères Jeu de caractère : character set Définition d un jeu de caractères Ensemble de caractères (lettres, ponctuation, chiffres, etc.) auxquels sont associés un numéro de code. Exemple : code ASCII. «A»=65, «,» = 44. 128 caractères sont codés de façon standard. Select ASCII ( A ); Select CHAR(65); Codages ISO (origine ASCII) Principe : 1 octet = 8 bit = 256 codages possibles. Les jeux de caractères normalisés ISO 8859 sont codés sur 1 octet. Le ISO 8859-1 est le «latin-1» ou «occidental» ou «western» Le ISO 8859-6 fournit les caractères arabe. Codages Unicode Principe : un jeu de caractères pour toutes les langues : plus que 256 caractères. Les jeux de caractères Unicode utilisent plusieurs octets. UTF-8 utilise des caractères de taille variable, de 1 à 4 octets. Attention, l utf8 gère mal les accents. Police de caractère : character font La police est une notion différente du jeu de caractères. Elle ne concerne que l apparence graphique. Mysql Variables d environnement Show character set; // jeux de caractères disponibles. Select * from information_schema.character_sets; // état du dictionnaire des données Show variables like %char% ; // état des variables d environnement Set @@character_set_client="latin1"; // modification des variables Signification des variables character_set_client : jeu de caractère utilisé en saisie character_set_connection : jeu de caractères utilisé pour la communication client serveur character_set_results : jeu de caractères utilisé pour l affichage des résultats character_set_database : jeu de caractères de la BD en cours d utilisation INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 11/20 - Bertrand LIAUDET

My.ini character_set_server : jeu de caractère du serveur Show variable like datadir ; // répertoire du fichier my.ini [mysql] default-character-set=latin1 [mysqld] default-character-set=latin1 Collation: character set Définition d une collation Une collation est liée à un jeu de caractères. Elle donne l ordre de classement des caractères et l équivalence éventuelle entre caractère («e» équivalent à «E», «é», «è») Type de collation en fonction du classement _bin : dans l ordre, majuscules d abord, minuscules ensuite, accentuées après, etc. _cs : «case sensitive» _ci : «case insensitive» Collation par défaut latin1_swedish_ci : collation par défaut de latin1, bien adaptée au français. latin1_german_ci : collation mieux adaptée au français. Autres collations : latin1_bin, latin1_general_cs, latin1_general_ci, utf8_bin, utf8_general_ci, utf8_unicode_ci. Mysql Show collation like «latin1%» ; // collations associées au latin1. Select * from information_schema.collations; // état du dictionnaire des données Show variables like %coll% ; // état des variables d environnement Set @@collation_database="latin1_bin"; My.ini [mysql] default-collation=latin1_german_1 [mysqld] default-collation=latin1_german1_ci INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 12/20 - Bertrand LIAUDET

5 niveaux de définition : Serveur, Client, Base, Table, Colonne Serveur et client my.ini show variable like select @@global..character_set_database // niveau serveur select @@local..character_set_database // niveau client Base CREATE DATABASE nomdatabase CHARSET latin1 COLLATE latin1_german1_ci; Show create database nomdatabase; Show variable like character_set_database ; Select @@character_set_database; Show variables like collation_database ; Select @@collation_database; ALTER DATABASE nomdatabase CHARSET latin1 COLLATE latin1_bin; // attention: l alter database modifie les variable @@character_set_database et @@collation_database. Le contraire n est pas vrai. Table Colonnes CREATE TABLE nomtable { } CHARSET latin1 COLLATE latin1_bin; // valeurs par défaut ALTER TABLE nomtable CHARSET latin1 COLLATE latin1_bin; // valeurs par défaut CREATE TABLE nomtable {, att1 varchar(50) CHARSET latin1 COLLATE latin1_bin, }; // valeur par défaut de la colonne ALTER TABLE nomtable ADD COLUMN attx varchar(50) CHARSET latin1 COLLATE latin1_bin; // valeur par défaut de la colonne SHOW FULL COLUMNS FROM nomtable ; SELECT DISTINCT CHARSET(attribute) FROM nomtable; Conversion : CONVERT La conversion pose un problème quand un caractère du jeu de départ n a pas d équivalent dans le jeu d arrivée. Une colonne est convertie quand on change son jeu ou sa collation. Pour convertir une table il faut utiliser la fonction CONVERT Conversion niveau colonne ALTER TABLE nomtable MODIFY attx varchar(50) CHARSET latin1 COLLATE latin1_bin; // conversion de la colonne INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 13/20 - Bertrand LIAUDET

Conversion niveau table ALTER TABLE nomtable CONVERT TO CHARSET latin1 COLLATE latin1_bin ; // conversion de toutes les colonnes et des valeurs par défaut de la table. Conversion dans les SELECT Forcer la sensibilité à la casse : binary, collate SELECT * from table WHERE BINARY attribut = TOTO ; SELECT * from table WHERE attribute COLLATE latin1_bin= TOTO ; Les toto en minuscules ne rentreront pas dans le resultats. Changer de jeu de caractères SELECT WHERE CONVERT(attribut USING utf8) Changer de jeu de caractères et de collation SELECT WHERE CONVERT(attribut USING utf8) collate utf8_unicode_ci Usages Unicode niveau serveur (jeu de caractères le plus large : exemple : utf8) ISO niveau client (jeu de caractères plus restreint et mieux adapté : exemple : latin1) En latin1, la collation par défaut est : latin1_swedish_ci. Il semblerait que la collation : latin1_german1_ci soit plus adapté au français. En théorie, l utf8 n est sensible ni à la casse, ni aux accents. Pour pouvoir regrouper des mots distingués uniquement par leurs accents, on peut passer l attribut en utf8, soit au niveau du select, soit au niveau de l attribut de la table. En pratique, c est moins convaincant INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 14/20 - Bertrand LIAUDET

Regexp : expression régulière http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html «Regexp» est un opérateur du même genre que «Like», mais en plus élaboré. Rappel de l usage du like : Syntaxe du select : WHERE attribut REGEXP expression régulière Syntaxe de l expression régulière Classe de caractères : [1236], [1-4], [^1-4] Nombre de caractères : {5}, {5,6}, {0,1},?, {1,}, +, {0,}, * Début : ^ Fin : $ N importe quel caractère : «.» Caractère «^» : \\^ Caractère «.» : \\. Alternative (ou) : Classes prédéfinies : [ :alpha :], [ :lower :], [ :upper :], [ :alnum :], [ :space :], [ :punct :], Début de mot : [[ :< :]] Fin de mot : [[ :> :]] Exemples ^[BL] [0-9]-?[0-9]{4}$ veut dire : un B ou un L ou un chiffre, suivi d un tiret ou pas, suivi de 4 chiffres. '^[SA][A-Z]*\\.[^0-9]{3}[[:alnum:]]*$ veut dire : un S ou un A, suivi de plusieurs majuscules ou aucune, suivi de un point, suivi de pas de chiffre sur 3 caractères, suivi des chiffres ou des lettres ou rien. Les expressions régulières sont sensibles ou pas à la casse selon la collation utilisée. Elles sont toujours sensibles aux accents. INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 15/20 - Bertrand LIAUDET

Sauvegarde shell > mysql dump http://dev.mysql.com/doc/refman/5.0/fr/mysqldump.html Mysqldump est une commande qui permet de produire le code SQL permettant de recréer entièrement la BD. Sauvegarde d une ou plusieurs BD Sauvegarder des BD shell> mysqldump [options] --databases DB1 [DB2 DB3...] Sauvegarder toutes les BD shell> mysqldump [options] --all-databases Affichage à l écran ou redirection dans un fichier shell> mysqldump uroot p nombd La commande affiche le code SQL de la BD nombd. shell> mysqldump uroot p nombd > nomfichier La commande écrit le code SQL de la BD nombd dans le fichier nomfichier. Usage courant de MYSQLDUMP pour sauvegarder et recharger une BD Commande usuelle de sauvegarde d une BD : shell> mysqldump --opt nombd > backupfile.sql L option --opt inclut l option --quick et l option --lock-tables, entre autres. Pour recharger le fichier de sauvegarde : shell> mysql nombd < backupfile.sql Usage courant de MYSQLDUMP pour sauvegarder toutes les BDs Commande usuelle de sauvegarde de toutes les BD : shell> mysqldump --opt --all-databases > allbd.sql Pour recharger le fichier de sauvegarde de toutes les BD : shell> mysql < allbdql Usage spécial de MYSQLDUMP : ne sauvegarder que le schéma de la BD -- no-data INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 16/20 - Bertrand LIAUDET

Exporter les données : SELECT INTO OUTFILE A partir de mysql Production d un fichier «csv» exploitable sous Excel. Chemin absolu mysql> SELECT * INTO OUTFILE c:/dept.csv fields terminated by, FROM dept; Chemin relatif : DATADIR mysql> SELECT * INTO OUTFILE./dept.csv fields terminated by, FROM dept; Chemin relatif : DATADIR / BDused mysql> SELECT * INTO OUTFILE dept.csv fields terminated by, FROM dept; A partir du SE C: \ > mysql dbname u user p >output.tab On passe en mode batch, l affichage est redirigé dans le fichier output.tab Ou bien C: \ > mysql dbname u user p pager=cat>output.tab Remarque : output.tab est écrasé au début de l opération, mais toutes les commandes de la même session sont executées à la suite Autre usage : C: \ > mysql dbname u user p < fichier.sql > output.tab INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 17/20 - Bertrand LIAUDET

Importer les données : LOAD DATA INFILE http://dev.mysql.com/doc/refman/5.0/fr/load-data.html On peut importer des données en précisant le format de séparation des champs. Par exemple: les fichiers csv produit par Excel utilisent la virgule comme séparateur. Attention : La table correspondant au fichier importé doit avoir le même schéma que celle dans laquelle les tuples sont insérés. Chemin absolu mysql> LOAD DATA INFILE c:/dept.csv INTO TABLE dept fields terminated by, ; Chemin relatif : DATADIR mysql> LOAD DATA INFILE./dept.csv INTO TABLE dept fields terminated by, ; Chemin relatif : DATADIR / BDused mysql> LOAD DATA INFILE dept.csv INTO TABLE dept fields terminated by, ; Chemin relatif : DATADIR / BD au choix mysql> LOAD DATA INFILE./empdept/dept.csv INTO TABLE dept fields terminated by, ; Avec les options REPLACE ou IGNORE, quand une donnée rentre avec une clé primaire existant déjà, elle remplacera l ancienne ou elle sera ignorée. Sinon, l opération s arrête en erreur. LOAD DATA INFILE nomfichier REPLACE INTO TABLE nomtableoutfile INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 18/20 - Bertrand LIAUDET

Exercices Utiliser la BD des ventes. 1) Charger la BD 2) Comprendre l organisation des tables. Faire un graphe des tables. 3) Combien y a-t-il de tuples dans chaque tables? 4) Afficher les produits. Il y en a trop! Afficher une vingtaine de produits. Afficher une dizaine de produits en mode «page» (\G). 5) Afficher 10 produits au hasard. Répéter l opération plusieurs fois. 6) Pour chaque commande, afficher le total de la commande. On mettra 2 chiffres après la virgule. 7) Afficher les commandes avec la mise en forme suivante : 12 % selon la remise et «pas de remise» si c est 0. 8) Afficher les détails de commandes avec l information «cher sans remise» si le prix est supérieur à 400 et qu il n y a pas de remise, «pas cher avec remise» si c est inférieur à 100 et qu il y a une remise, rien sinon. 9) Afficher les commandes avec leur numéro, le nom du client, la date et le nombre de produits dans la commande. 10) Afficher les commandes avec leur numéro, le nom du client, la date et la liste des numéros de produits. 11) Afficher les commandes avec leur numéro, le nom du client, le nombre de produits et la liste des numéros de produits. 12) Afficher les commandes avec leur numéro, le nom du client, la liste des numéros de produits et la quantité pour chaque produit. 13) Afficher les commandes avec leur numéro et la liste des noms de produit. Chaque nom de produit devra être précédé de sa quantité suivie de X («fois»). 14) Afficher la liste des fournisseurs pour chaque commande supérieur à 30 000 avec la date de la commande. On affichera d abord le numéro du fournisseur puis son nom. 15) Compter le nombre produits par fournisseur par catégorie : le fournisseur 1 propose 3 produits de la catégorie 1 et 5 de la catégorie 2. 16) Ajouter le total par fournisseur dans la requête précédente : le fournisseur 1 propose 3 produits de la catégorie 1 et 5 de la catégorie 2, et donc 8 produits en tout. 17) Afficher le nombre de produits par catégorie et par fournisseur et le total par catégorie. 18) Afficher le nombre de lignes de commandes par client et par employé et le total par client. 19) Afficher toutes les quantités avec cartons. 20) Construire l expression régulière correspondant aux quantités avec cartons. Il faut retrouver les résultats de la requêtes précédentes. Pour se faciliter la tâche, on pourra commencer par l expression régulière pour des cartons sans poids. 21) A partir du résultat précédent, construisez l expression régulière de l ensemble des produits. Construisez les expressions régulières des différents code postaux selon les pays en regroupant les pays dont le code postal est de même format. Intégrer les expressions dans un «case when» pour afficher la catégorie de code postal. On pourra commencer par traiter un seul cas, puis deux, puis tous. INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 19/20 - Bertrand LIAUDET

INSIA - BASES DE DONNÉES ING 1 Piscine Cours 09 - page 20/20 - Bertrand LIAUDET