AIDE-MÉMOIRE MINIMAL DU LANGAGE SQL DE MYSQL

Dimension: px
Commencer à balayer dès la page:

Download "AIDE-MÉMOIRE MINIMAL DU LANGAGE SQL DE MYSQL"

Transcription

1 AIDE-MÉMOIRE MINIMAL DU LANGAGE SQL DE MYSQL Michel Cartereau, 10 avril 2013 Ce document présente l'essentiel à connaître afin d'utiliser le langage SQL (structured query language) au sein du système de gestion de bases de données (SGBD) MySQL dans sa version 5.1. L'accent est mis sur la compatibilité avec la norme SQL dans sa version SQL 2 de 1992, avec quelques compléments sur la norme SQL 3 de I - LE LANGAGE SQL DE MYSQL Cette présentation du langage SQL comprend en premier les règles générales d'écriture, puis détaille les instructions pour chaque grande classe de manipulations. Cette présentation est focalisée sur les principales manipulations (création, mise à jour et interrogation d'une base). Il n'est pas abordé certains aspects plus avancés de SQL, dont notamment la gestion des droits (privileges), les transactions, les assertions, les déclencheurs (triggers) et les procédures. I.1 SYNTAXE GÉNÉRALE Cette section précise les règles générales d'écriture dans le langage SQL. I.1.1 IDENTIFICATEUR Un nom ou «identificateur» (désignation de base, table, champ, etc.) est constitué de lettres, chiffres ou trait de souligné («_») tout en commençant par une lettre. Il n'y a pas a priori différenciation des lettres minuscules et majuscules (CODE, Code, code identiques). Exemples : coop detail QSTOCK code_postal type1mobilier Contre-exemples : _coop 2N net&euro H-T h.t type1 Mobilier t_réf - Il est fortement conseillé d'éviter les lettres accentuées, tout signe diacritique (cédille etc.) et bien sûr proscrire les espaces au sein des noms. - La taille maximale est fixée à 64 caractères dans MySQL et 128 par la norme SQL. Cependant, on n'utilise généralement pas plus de 30 caractères afin de garantir une compatibilité entre différents SGBD. De plus dans MySQL, les noms de bases et de tables correspondent à des fichiers et donc il faut être très prudent sur leur nommage (taille réduite, ni espaces ni lettres accentuées ni ponctuation). - Il est possible de délimiter un nom par l'ajout d'un accent grave («`») au-début et à la fin. Ce mécanisme sert dans des cas particuliers où le nom correspond à un mot-clef du langage SQL, ou quand un nom a été défini sans respecter les règles, ou aussi pour imposer la casse des lettres (différenciation des lettres minuscules et majuscules). La norme SQL utilise à cet effet le guillemet («"»). I.1.2 MOT-CLEF Un mot-clef est un nom défini dans le langage SQL. Il n'y a pas de différenciation des lettres minuscules et majuscules. La plupart des mots-clefs sont réservés à SQL, c'est-à-dire qu'il n'est pas possible de les réutiliser comme identificateur. Une liste de ces mots-réservés figure en annexe (cf. II.5). Exemples : create option null NULL Null I.1.3 NOTATION DE CHAÎNES DE CARACTÈRES Une chaîne de caractères correspond à un morceau de texte noté entre apostrophes («'»). Exemples : '01530' 'Carotte Du JARDIN' 'Gaia d''agroparistech' 'Švejk' - Une véritable apostrophe au sein du texte se note dédoublée («''», et non pas par un guillemet «"»). - L'alphabet utilisable dans le texte se définit lors de la création de la base ; c'est généralement l'alphabet universel Unicode codé sur un octet («utf8» ou «utf-8»). Il est possible d'indiquer un alphabet particulier en préfixant la chaîne par un trait de souligné («_») suivi de son nom, ou de la faire suivre par le mot-clef collate suivi du nom de l'aphabet. MySQL utilise la notation simplifiée au préfixe «N» définie dans la norme SQL comme équivalent de l'alphabet Unicode. Exemples : _latin1'été' 'été' collate latin1 N'Švejk' - Une chaîne longue peut aussi être découpée en plusieurs morceaux : il suffit de noter chaque morceau entre apostrophes et de les séparer par un ou plusieurs espaces, retours à la ligne ou commentaires. - MySQL permet aussi d'utiliser le guillemet («"») comme délimitateur du texte mais il est déconseillé de Aide-mémoire minimal de SQL dans MySQL - Page 1

2 l'utiliser car hors norme SQL ainsi que les notations spécifiques à MySQL pour quelques caractères particuliers au sein d'une chaîne : «\'» pour une apostrophe, «\"» pour un guillemet, «\\» pour une contre-oblique, «\b» pour un retour-en-arrière (code ASCII n 8 «BS»), «\t» pour une tabulation (code ASCII n 9 «HT»), «\r» pour un retour-en-début-de-ligne (code ASCII n 10 «LF») et «\n» pour un passage-à-la-ligne (code ASCII n 13 «CR»). I.1.4 NOTATION DE VALEURS NUMÉRIQUES Les valeurs numériques correspondent essentiellement à des nombres entiers ou réels. Il est possible d'utiliser la notation scientifique à puissance de dix en préfixant l'exposant par «E» ou «e». Exemples : E3 1.7e-7 - Selon le type utilisé pour représenter la donnée, des valeurs maximales et minimales sont définies, ainsi qu'une précision (cf. I.3.1.1). - Attention aux intervalles de valeurs possibles définis selon chacun des types numériques car une valeur trop grande peut dans certains cas être silencieusement transformée en une toute autre valeur. I.1.5 NOTATION DE VALEURS TEMPORELLES Les informations temporelles comprennent la date, l'heure, une horodate et aussi une durée. Une date se note comme un texte préfixé par le mot-clef date, en utilisant la notation internationale «année-mois-jour» où l'année est indiquée sur 4 chiffres, le mois et le jour sur 1 ou 2 chiffres, tous séparés par un trait d'union («-»). Une heure se note comme un texte préfixé par le mot-clef time, en utilisant la notation internationale «heure:minutes:secondes» où l'heure est comprise entre 0 et 23, et les secondes éventuellement notées avec une partie décimale introduite par un point («.») pour exprimer des fractions de seconde. Heure, minutes et secondes sont séparées par un deux-points («:»). Il est possible de combiner une date avec une heure en une horodate (timestamp) ; elle se note comme un texte préfixé par le mot-clef timestamp, contenant la date puis l'heure séparées par une espace. Une durée se note sous la forme générale : interval 'durée' unité où la durée est indiquée abrégée ou selon les notations précédentes, et où l'unité est au choix : second, minute, hour, day, month, ou year. Il est possible d'exprimer une durée remontant dans le temps : interval - 'durée' unité Exemples : date ' ' date ' ' time '12:00:00' time'0:5:12.25' timestamp ' :00:00' timestamp ' :5:12.25' interval '3' day interval '8:30' hour interval - '6' month - Dans la norme SQL, une date doit être valide relativement au calendrier grégorien ; autrement dit, les jour, mois et année ne peuvent pas valoir zéro et une date comme ' ' est invalide. MySQL permet d'utiliser la valeur ' ' comme valeur manquante en place de la notation null dans certains cas (selon l'option SQL NO_ZERO_DATE, cf. II.6.2), mais cela est déconseillé car hors norme. - Dans certaines expressions, MySQL reconnaît une date même quand sa notation ne respecte pas les modèles ci-dessus (par exemple sans mot-clef en préfixe ou sans séparateur). En outre, une année notée avec seulement deux chiffres est classée par MySQL comme suit : dans le 21 ème siècle (2000) si comprise en 00 et 69, le 20 ème siècle (1900) sinon entre 70 et 99. Ces notations sont cependant déconseillées car hors norme. - De même qu'une date, MySQL reconnaît une heure même quand sa notation ne respecte pas les modèles ci-dessus (par exemple sans mot-clef en préfixe ou sans séparateur). En outre, une heure notée de manière incomplète est interprétée différemment par MySQL selon les cas ; par exemple : '10:45' correspond à 10 h 45 mn tandis que '1045' à 10 mn 45 s. Ces notations sont cependant déconseillées car hors norme. - MySQL reconnaît mais ignore les fractions de seconde. - La norme SQL permet de préciser le fuseau horaire (time zone) mais cela n'est pas possible dans MySQL. I.1.6 NOTATION DE VALEURS BINAIRES ET LOGIQUES Une valeur logique correspond à true ou false (introduites en SQL 1999). Une valeur binaire se note sous la forme d'une suite de bits notée comme du texte et immédiatement préfixée par «B». Il est aussi Aide-mémoire minimal de SQL dans MySQL - Page 2

3 possible d'utiliser une notation similaire en hexadécimal avec le préfixe «X». Exemples : true False FALSE B' ' X'FA' - Comme tout mot-clef, les valeurs true et false s'écrivent indifféremment en minuscules ou majuscules. - Les valeurs binaires sont de fait en voie d'abandon (disparition dans la norme SQL 2003). I.1.7 NOTATION DE VALEUR MANQUANTE L'absence de valeur se note par le mot-clef «null». - Comme tout mot-clef, il n'y a pas de différenciation des lettres minuscules et majuscules («NULL», «Null», «null» etc. identiques). - Ne pas confondre avec une valeur nulle comme zéro («0») pour un nombre, ou la chaîne vide («''»). - MySQL autorise la notation synonyme «\N» (en majuscule) mais cela est déconseillé car hors norme. I.1.8 INSTRUCTION Une instruction dans le langage SQL s'écrit sur une ou plusieurs lignes. Il est possible d'ajouter espaces ou retours à la ligne dans la notation afin de l'aérer, voire d'y insérer des commentaires. Exemples : select count(nom) from personne -- nombre total de personnes select NOM, NCOM from client, commande where client.ncli = commande.ncli Remarque : - Dans le cas où une instruction figure avec d'autres dans un programme écrit en SQL, il faut alors la terminer par un point-virgule («;»). - Ne pas hésiter à répartir une instruction longue sur plusieurs lignes car cela facilite la lecture et permet de détecter plus facilement des erreurs. I.1.9 COMMENTAIRE Un commentaire sert à placer du texte libre dans une instruction. il se note par deux tirets («--») suivi d'aumoins une espace puis du texte libre jusqu'à la fin de la ligne. Exemple : -- Fait par Michel Cartereau en XI Dans le cas d'un commentaire long s'étalant sur plusieurs lignes, il faut répéter le double-tiret à chaque ligne. Cependant MySQL permet d'entourer le texte d'un commentaire long entre les symboles «/*» et «*/» au lieu d'utiliser le double-tiret, mais ceci n'a été normalisé que dans la version 1999 de SQL. - La norme SQL n'impose pas une espace immédiatement après les tirets. - MySQL permet aussi de préfixer une ligne de commentaire par un dièse («#») mais ceci est fortement déconseillé car hors norme SQL. Aide-mémoire minimal de SQL dans MySQL - Page 3

4 I.2 MANIPULATIONS D'UNE BASE Voici la présentation des instructions permettant de manipuler une base regroupant des tables de données, correspondant de manière simplifiée à un «schéma» dans la norme SQL. I.2.1 CRÉATION D'UNE BASE : CREATE SCHEMA OU CREATE DATABASE Syntaxe simplifiée : create schema nom option ou create database nom option avec comme option : default character set alphabet Exemples : create database client_commande create schema coop default character set latin1 - La norme SQL ne reconnaît que le mot-clef schema et non pas database. - Le nom de la base correspond en fait à un dossier créé par MySQL dans l'espace de stockage. Il faut donc être très prudent lors du choix de ce nom. - Le mot-clef default est en fait facultatif. - Il existe une instruction spécifique à MySQL permettant d'obtenir l'instruction de création à réutiliser pour une base existante : show create database nom ou show create schema nom - MySQL possède des variantes spécifiques, hors norme SQL, de cette instruction create : i. Option supplémentaire du mode d'interclassement (cf. II.2) : default collate interclassement ii. Dans les options, mot-clef default facultatif, et possibilité d'introduction du signe égal («=») avant la valeur de l'alphabet (cf. II.2) ou de l'interclassement ; exemple : character set = latin1 iii. Condition optionnelle de non existence préalable à la création de la base placée juste avant le nom ; exemple : create database if not exists coop I.2.2 SUPPRESSION D'UNE BASE : DROP SCHEMA OU DROP DATABASE Syntaxe simplifiée : drop schema nom Exemples : drop schema client_commande drop database coop ou drop database nom - La norme SQL ne reconnaît que le mot-clef schema et non pas database. Elle impose aussi la présence d'un mot-clef, placé après le nom de la base, conditionnant la suppression : restrict imposant que le schéma soit complétement vide ou cascade provoquant la suppression de ses objets (tables etc.). MySQL supprime automatiquement tout le contenu de la table. - MySQL possède une option spécifique, hors norme SQL : condition optionnelle d'existence préalable à la suppression de la base, placée juste avant le nom ; exemple : drop database if exists coop I.2.3 AUTRE OPÉRATION SUR UNE BASE SPÉCIFIQUE À MYSQL : ALTER SCHEMA OU ALTER DATABASE Retouche d'une base: alter schema nom retouche ou alter database nom retouche avec comme retouches : default character set alphabet et-ou default collate interclassement Exemple : alter database coop default collate latin1_general_ci - Cette instruction n'existe pas dans la norme SQL. - Le mot-clef default est en fait facultatif. Aide-mémoire minimal de SQL dans MySQL - Page 4

5 I.3 MANIPULATIONS D'UNE TABLE Voici la présentation des instructions permettant de manipuler une table de données dans une base. Elle est incomplète car elle n'aborde pas notamment certains aspects avancés de SQL : le mode transactionnel (set transaction, commit, rollback), les assertions (create assertion), les tables temporaires (create table... temporary) ainsi que la création d'index spécifique à MySQL (create index). I.3.1 TYPES DE DONNÉES Les types de données se regroupent dans les familles suivantes : valeurs numériques, chaînes de caractères, valeurs temporelles ou valeurs binaires. MySQL ne gère pas les types personalisés de valeurs (domain) définis dans la norme SQL. Voici un sommaire de ces types de données : Famille Norme SQL Spécifique à MySQL numérique chaîne de caractère int, integer, smallint, bigint decimal, dec, numeric float, double precision, real character, char, national chararacter, nchar character varying, char varying, varchar, national character varying character large object, char large object, clob smallint fixed enum, set, binary varbinary temporel date, time, timestamp datetime binaire et logique binary large object, blob boolean longtext, mediumtext, text, tinytext longblob, mediumblob, tinyblob I TYPES DE VALEURS NUMÉRIQUES Les types de valeurs numériques se répartissent dans deux catégories selon que la conservation de la valeur est garantie au chiffre près ou non. La première catégorie, à valeur exacte, correspond aux nombres entiers sans partie décimale et au nombres décimaux avec une quantité limitée de chiffres après la virgule (typiquement des valeurs financières où la précision doit être garantie au centime près). La seconde à valeur approchée, recouvre des nombres réels à usage scientifique où la précision est garantie pour une certaine quantité de chiffres quelle que soit l'amplitude des valeurs (très grandes ou très petites, généralement notées en puissance de dix) et pour lesquels les calculs sont effectués plus rapidement. Les différentes notations d'une valeur numérique sont indiquées en I.1.4. a) Types de nombres entiers - Nombre entier ordinaire : integer ou int - Petit nombre entier : smallint - Grand nombre entier (SQL 2003) : bigint Exemples : numero integer age smallint - Il existe aussi dans MySQL un type pour des nombres entiers très petits, codés sur un octet et de valeur comprise entre et 128 : tinyint ; cela n'est pas dans la norme SQL. - Dans MySQL, les caractéristiques numériques de ces différents types sont les suivantes : Type Intervalle Nombre d'octets int à ( ± 2 31 ) 4 smallint à ( ± 2 15 ) 2 bigint ± 9,2 miliards de milliards ( ± 2 63 ) 8 tinyint à MySQL permet d'indiquer une quantité maximale de chiffres au sein de la définition d'un nombre entier : type entier (quantité de chiffres) ; cependant, cela n'est pas dans la norme SQL, et ne concerne que l'affichage et pas le stockage de la valeur ; exemple : int(11) - MySQL offre aussi la possibilité de définir un entier sans signe selon la notation : type entier unsigned ; Aide-mémoire minimal de SQL dans MySQL - Page 5

6 la plage des valeurs s'étend alors de zéro au double de la valeur maximale du type, incrémenté de un ; exemple : int unsigned pour un intervalle de 0 à (2 x ) ; cela n'est pas dans la norme SQL. b) Type de nombres décimaux exacts - Nombre décimal (fixed-point type) : decimal(précision, décimales) ou dec(précision, décimales) avec Indication de la quantité maximale de chiffres (précision) dont ceux après la virgule décimale (décimales) Exemples : prix decimal(7,2) taux dec(5,4) - La précision maximale s'élève à 64 chiffres dans MySQL. La quantité de chiffres situés après la virgule ne peut pas évidemment dépasser celle des chiffres de la précision. Quand une valeur contenant plus de chiffres après la virgule que ceux du type de la colonne est stockée, il survient alors une approximation généralement réalisée par élimination des chiffres en trop. - En fait, l'indication de la quantité de décimales est facultative mais cela correspond alors à une quantité nulle et de fait revient à un nombre entier sans chiffre après la virgule ; exemple : dec(11) - MySQL propose le synonyme fixed pour decimal mais cela n'est pas dans la norme SQL. - La norme SQL définit un autre type de nombre décimal, numeric, quasiment similaire au type decimal ; il est aussi disponible dans MySQL mais il n'y a pas de différence entre les deux. c) Types de nombres réels scientifiques - Nombre réel ordinaire : float - Nombre réel à double précision : double precision Exemples : coefficient float mesure double precision - Dans MySQL, les caractéristiques de ces différents types (floating-point type) sont les suivantes : Type Précision Etendue Nombre d'octets float ±38 4 double precision ± Il existe aussi le type real synonyme dans MySQL de double precision ; ce type existe dans la norme SQL mais celle-ci ne spécifie pas sa précision. - MySQL offre la possibilité d'indiquer la quantité maximale de chiffres dont ceux situés après la virgule décimale afin de mettre en forme l'affichage du nombre (et incidemment arrondir les valeurs) ; cela n'est pas en fait dans la norme SQL qui autorise seulement l'indication d'une précision (en chiffres binaires). I TYPES DE CHAÎNES DE CARACTÈRES - Texte à taille fixe : character(taille) ou char(taille) - Texte réduit à un seul caractère : character(1) ou char(1) ou character ou char - Texte à taille variable : character varying(taille) ou char varying(taille) ou varchar(taille) Exemples : code char(3) nom varchar(40) - Les différentes notations d'une chaîne de caractères sont indiquées en I Caractéristiques dans MySQL des différents types de chaînes de caractères (string type) : Type Taille maximale * Particularités char 255 remplissage complété à droite par des espaces mais élimination de ces espaces lors de l'extraction de la valeur (en fait cela dépend de l'option SQL PAD_CHAR_TO_FULL_LENGTH de MySQL, cf II.6) varchar depuis la version 5.0 de MySQL, les espaces initiaux et finaux sont conservés lors du stockage de la valeur * : en fait, il s'agit de la taille maximale exprimée en octets pour la représentation en mémoire ; selon l'alphabet utilisé (cf. II.2), un caractère de texte peut occuper un ou plusieurs octets ; de plus, dans le cas du type varchar, un à deux octets sont réservés pour représenter la taille réelle de la chaîne. Aide-mémoire minimal de SQL dans MySQL - Page 6

7 La prise en compte des espaces initiaux et finaux variant selon les types, il est sage de les éliminer systématiquement dès la saisie de texte. Par ailleurs, dans le cas où une valeur est trop longue par rapport à la taille maximale de la colonne, il survient une anomalie ou un avertissement lors du remplissage de la colonne (sauf s'il s'agit d'espaces et d'une colonne de texte à taille fixe). - Dans le cas d'un jeu limité de valeurs, MySQL propose deux types supplémentaires hors norme SQL : 1. Valeur parmi une liste de possibilités : enum(liste) La colonne peut uniquement prendre une seule des valeurs énumérées dans la liste indiquée sous la forme des libellés possibles séparés par une virgule («,») et au nombre maximal de Exemple : direction enum('nord','est','sud','ouest') et la valeur 'nord' 2. Ensemble de valeurs prédéfinies : set(liste) La colonne peut uniquement prendre une ou plusieurs des valeurs énumérées dans la liste indiquée sous la forme des textes de chaque libellé possible séparés par une virgule («,», 64 au maximum). Une valeur multiple est codée par un texte regroupant les libellés séparés par une virgule sans espaces autour ; lors du remplissage de la colonne, les répétitions sont éliminées et les libellés multiples rangés selon l'ordre de la définition dans la liste. Exemple : accessoires set('rétroviseur','panier','sacoches','compteur') la valeur 'sacoches,panier,compteur,panier' devient 'panier,sacoches,compteur' - Il existe dans MySQL la possibilité de manipuler des textes très grands (jusqu'à plusieurs giga-octets) sur le modèle du type character large object ou char large object ou clob introduit dans la norme SQL 1999 : il s'agit des types longtext (taille maximale 4,3 milliard caractères), mediumtext ( 16,7 millions), text (65 535) et tinytext (255) ; au-delà des capacités augmentées, la principale différence avec le type varchar consiste en un stockage indépendant de celui de la table. - MySQL permet aussi de manipuler des chaînes de caractères sous forme d'octets binaires sans considération d'alphabet ; cela se concrétise par les types binary et varbinary, équivalents à char et varchar ; cela n'est pas dans la norme SQL. - Il est possible de préciser un alphabet (cf. II.2) particulier en l'indiquant à la fin de la définition du type par : character set alphabet ; exemple : nom varchar(40) character set utf8 - La norme SQL (1992 et 1999) définit aussi une variante dite «national» des types de chaînes de caractères avec un alphabet prédéfini : national chararacter ou nchar, national character varying ou nchar varying, national character large object ou nclob ; les deux premières paires existent dans MySQL et correspondent à l'alphabet Unicode («utf8»). I TYPES DE VALEURS TEMPORELLES - Date (AAAA-MM-JJ) : date - Heure (HH:MM:SS) : time - Horodate (AAA-MM-JJ HH:MM:SS) : timestamp Exemples : anniversaire date passage timestamp - Les dates et heures se notent selon la notation internationale et leurs valeurs doivent correspondre à la réalité et respecter le calendrier grégorien (cf. I.1.5). - La norme SQL permet de manipuler les fractions de seconde avec un nombre maximal de chiffres décimaux indiqué lors de la définition des types time(précision)et timestamp(précision) mais pas MySQL (5.1) ; de même, l'indication d'un fuseau horaire est possible dans SQL, mais pas dans MySQL (5.1), avec les types suivants : time with time zone et timestamp with time zone. - Attention aux horodates en MySQL : le type timestamp peut dans certains cas comporter un mécanisme de mise à jour automatique de la colonne avec les date et heure courantes ; afin d'éviter cela, MySQL dispose du type équivalent datetime. Par ailleurs, une horodate ne peut pas être antérieure à l'année 1970, bien que cela soit possible pour une simple date. - MySQL ne dispose pas du type interval défini dans SQL pour représenter des durées ; cependant, il est tout à fait possible d'utiliser une valeur représentant une durée (cf. I.1.5). Aide-mémoire minimal de SQL dans MySQL - Page 7

8 I TYPES DE VALEURS BINAIRES ET LOGIQUES - Suite de bits de taille fixe : bit(taille) - Bit unique : bit - Valeur logique (SQL 1999) : boolean - Suite d'un grand nombre d'octets (SQL 1999) : binary large object ou blob Exemples : image blob jeune boolean - Dans MySQL, la taille maximale d'une suite de bits est fixée à 64. La norme SQL définit aussi le type bit varying pour une suite de bits à taille variable, qui n'existe pas tel que dans MySQL mais sous la forme d'une suite d'octets à taille variable : varbinary. En fait, les types bit et bit varying se sont avérés peu utilisés et ils ont disparu dans la norme SQL MySQL représente en fait une valeur logique comme un entier codé sur un octet (tinyint), avec les valeurs true et false associées respectivement à 1 et 0 ; la norme SQL 1999 indique seulement que la valeur true est plus grande que false (sans fixer de valeur numérique).. - MySQL décline le type blob en plusieurs variantes selon la taille maximale d'octets : types longblob ( 4,3 milliard), mediumblob ( 16,7 millions), blob (65 535) et tinyblob (255) ; contrairement aux types équivalents longtext, mediumtext, text et tinytext, aucun alphabet n'est associé ici en cas de stockage de texte car les valeurs sont considérées sous leur simple forme binaire. La norme SQL permet de fixer la taille en indiquant une valeur entre parenthèses, éventuellement exprimée avec un suffixe pour des kilo-octets («K»),des méga-octets («M») ou des giga-octets («G») : blob(taille) ; MySQL reconnaît partiellement cette indication de taille en choisissant automatiquement sa variante correspondante du type blob, mais il ne reconnaît pas les suffixes d'unités. I.3.2 DÉFINITION DE CLEF La définition de clef s'applique au cas de la clef primaire, d'une clef secondaire ou d'une clef étrangère. Elle se définit sous la forme d'une contrainte de table ou de colonne. Un index est associé à chaque type de clef dans MySQL, automatiquement ou manuellement. I CLEF PRIMAIRE Toute table doit normalement posséder une clef primaire, indiquée : - soit sous la forme d'une contrainte de table, syntaxe : primary key(colonne ou liste de colonnes) - soit à l'intérieur de la définition d'une colonne (quand elle forme la clef à elle tout seule) : primary key Exemples : primary key (ncli) primary key (genre, espece) numero integer not null primary key - La clef primaire est unique dans une table mais elle peut porter sur une ou plusieurs de ses colonnes. - Le(s) colonne(s) d'une clef primaire possède(nt) toujours une valeur unique ; autrement dit, il ne peut pas y avoir de valeur manquante (not null) et de doublons. - MySQL autorise une notation simplifiée à l'intérieur de la définition d'une colonne, hors norme : key. Par ailleurs, MySQL y associe automatiquement un index baptisé avec le nom PRIMARY. I CLEF SECONDAIRE Une table peut comporter une ou plusieurs clefs secondaires, aussi appelées candidates, subrogées, alternées ou de rechange ; une telle clef se note : - soit sous la forme d'une contrainte de table, syntaxe : unique (colonne ou liste de colonnes) - soit à l'intérieur de la définition d'une colonne (quand elle forme la clef à elle toute seule) : unique Exemples : unique (courriel) unique (entrepot, num_inventaire) nom varchar(40) unique Aide-mémoire minimal de SQL dans MySQL - Page 8

9 - Il peut y avoir absence de valeur (null) dans le(s) colonne(s) d'une clef secondaire mais pas de doublons. - MySQL associe automatiquement à la clef secondaire un index baptisé avec le nom de la colonne (ou de la première dans le cas d'une clef sur plusieurs colonnes). I CLEF ÉTRANGÈRE Une contrainte d'intégrité référentielle, sur la table liée à une table de référence, se traduit par la définition d'une clef étrangère : - sous la forme d'une contrainte de table, syntaxe : foreign key (colonne ou liste de colonnes) references table de référence (colonne de référence) options avec en option une ou plusieurs clauses associées à l'application de l'intégrité référentielle : - cas d'opération de modification (update) dans la table de référence : on update action - cas d'opération de suppression (delete) dans la table de référence : on delete action - action vaut l'une des valeurs suivantes : no action : l'opération est refusée (en fin de transaction) restrict : variante du cas précédent où l'opération est aussi refusée, mais immédiatement et non pas en fin de transaction (cas introduit dans la norme SQL 1999), cascade : l'opération est répercutée dans la table liée par la suppression ou la mise à jour des enregistrements liés à ceux de la table de référence concernés par l'opération, set null : annulation du lien par suppression de(s) valeur(s) de clef étrangère dans la table liée set default : remplacement de(s) valeur(s) de clef étrangère dans la table liée par la valeur par défaut d'indication respective à chaque colonne concernée. Exemple : foreign key(acheteur) references personne(numero) on delete cascade - Attention! MySQL (5.1) ne gère l'intégrité référentielle que dans le cas du moteur de stockage InnoDB avec certaines contraintes et limitations ; ainsi, les colonnes des clefs étrangères doivent être indexées (voir en I ; les autres limitations sont présentées ci-après). - Il peut y avoir absence de valeur (null) dans le(s) colonne(s) d'une clef secondaire. - En l'absence d'indication d'une clause pour l'application de l'intégrité référentielle, il s'applique alors par défaut le refus d'opération (no action). - La norme SQL permet l'indication de clef étrangère au niveau de définition d'une colonne formant la clef à elle toute seule : foreign key references table de référence (colonne de référence) options mais MySQL (5.1) ne la reconnaît pas (même avec le moteur de stockage «InnoDB»). - La norme SQL contient une clause supplémentaire du mode de validation lors d'une nouvelle valeur ou d'une modification d'une clef étrangère composée de plusieurs colonnes ; celui-ci précise les conditions du déclenchement du contrôle d'intégrité référentielle lorsque il y a une ou plusieurs valeurs manquantes parmi les colonnes de la clef étrangère : match mode où mode vaut simple, partial ou full mode condition de déclenchement colonnes vérifiées simple toutes les colonnes ont une valeur toutes partial au-moins une colonne avec une valeur celles avec une valeur présente full au-moins une colonne avec une valeur toutes MySQL (5.1) autorise la présence de cette clause mais l'ignore en fait en appliquant le mode simple I INDEX Dans MySQL un index est automatiquement associé à une clef primaire et une clef secondaire, mais il faut le gérer manuellement dans le cas d'une clef étrangère. A cet effet, il y est possible de créer un index : - soit sous la forme d'un élément de création de la table : index (colonne ou liste de colonnes) ou index nom d'index (colonne ou liste de colonnes) - soit par retouche de la table : alter table nom de table add index (colonne ou liste de colonnes) Aide-mémoire minimal de SQL dans MySQL - Page 9

10 ou alter table nom de table add index nom d'index (colonne ou liste de colonnes) - soit par une instruction spéciale : create index nom d'index on table(colonne ou liste de colonnes) Exemples : create table commande ( ncom char(4) not null primary key, ncli char(4) not null, datecom date, index (ncli), ncli foreign key references client (ncli) ) engine=innodb create index index_acheteur on vente(acheteur) alter table vente add index (acheteur) - Tout index est identifié dans MySQL par un nom. Celui d'une clef primaire s'appelle automatiquement PRIMARY, et celui d'une clef secondaire porte le nom de la colonne (ou la première) associée. Pour une index créé manuellement, le nom est facultatif dans le cas de définition via un élément de création de la table (c'est alors automatiquement le nom de la colonne, ou la première, associée). - Au sein de la spécification d'un index via un élément de création ou une retouche de table, le mot-clef index peut être remplacé par key. - MySQL permet de supprimer un index par les commandes : drop index nom d'index on table ou alter table nom de table drop index nom d'index - Il existe dans MySQL des options complémentaires de définition d'un index, non décrites ici. - La norme SQL ne spécifie pas les index. I.3.3 CRÉATION D'UNE TABLE : CREATE TABLE Syntaxe simplifiée : create table identification (liste des éléments de la table) La table est a priori identifiée par son simple nom, mais il est possible en cas d'ambiguité de préfixer son nom par celui de la base (ou schéma) en les séparant par un point («.») ; exemple : coop.personne La liste contient au-minimum les définitions des colonnes séparées par une virgule («,»). Il peut aussi y figurer des contraintes de table (définitions de clef). Exemples : create table client ( ncli char(4) not null, nom char(18) not null, adresse char(24) not null, localite char(20) not null, cat char(2) default null, compte decimal(9,2) not null, primary key (ncli) ) create table coop.personne ( numero integer primary key, nom varchar(40) not null, code_postal char(5) ) - Cette présentation est incomplète car elle n'aborde pas certains aspects avancés de SQL : les transactions (contrainte différée avec deferred) et les tables temporaires (create table... temporary). - MySQL ne gère pas les contraintes de vérification (check) définies dans la norme SQL ; par contre MySQL permet l'association d'un commentaire à la table (comment) mais cela est hors norme. - MySQL offre la variante suivante : create table if not exists identification (liste) qui n'effectue pas la création si une table de même nom existe déjà ; attention! cette variante est hors norme et de plus, ell ne vérifie pas que la structure de la table existante correspond celle décrite dans la commande. - MySQL permet de reconstituer une instruction de création à partir d'une table existante par la commande suivante (hors norme) : show create table nom ; exemple : show create table client. Il est Aide-mémoire minimal de SQL dans MySQL - Page 10

11 aussi possible d'obtenir une liste détaillée des colonnes avec leurs caractéristiques par des commandes spécifiques aussi hors norme : show columns from table ou describe table ; exemple : show columns from client ou describe client - Il est possible dans MySQL de spécifier à la fin de la commande le type de moteur de stockage (cf. II.4) utilisé sous la forme : engine=nom du moteur. Cela sert notamment à activer le moteur «InnoDB» afin de disposer d'un réel contrôle des intégrités référentielles ; exemple : create table commande ( ncom char(4) not null primary key, ncli char(4) not null, datecom date, index (ncli), ncli foreign key references client (ncli) ) engine=innodb I DÉFINITION D'UNE COLONNE Une colonne est définie par son identificateur suivi du type de donnée : nom type Cette définition minimale peut être éventuellement complétée par une ou plusieurs des options suivantes dans l'ordre : la fixation de valeur par défaut, une contrainte de valeur ou une indication d'interclassement. MySQL permet l'association d'un commentaire à la colonne (comment) mais cela est hors norme. Fixation d'une valeur par défaut Option de fixation de la valeur stockée en absence d'indication à l'enregistrement : default valeur Exemples : code integer default 0 type char(1) default 'A' - Cette option figure immédiatement après le nom de la colonne dans sa définition. - La valeur peut être soit notée explicitement, soit une fonction temporelle ou d'identification de l'utilisateur, soit l'indication de valeur manquante (null). - Si la valeur par défaut n'est pas fixée, il est alors enregistré null dans la colonne en l'absence de valeur sauf dans le cas d'une colonne à incrémentation automatique (auto_increment, voir ci-après). Contrainte de valeur dans la définition d'une colonne - Contrainte de valeur obligatoire : not null - Contrainte d'absence de doublons : unique Exemples : nom_produit varchar(40) unique numero integer not null - Comme dans la norme SQL, il est possible d'attribuer un nom particulier à une contrainte en la préfixant par : constraint nom ; exemple : numero integer constraint verif_numero not null - La notation null désigne l'absence de valeur et non pas une valeur nulle (0) ; a priori toute colonne n'a pas obligatoirement une valeur. - La contrainte d'absence de doublons correspond à une clef secondaire (cf. I.3.2). - La norme SQL permet l'indication d'une contrainte d'intégrité référentielle pour une colonne formant la clef à elle toute seule : foreign key references table de référence (colonne de référence) options mais MySQL (5.1) l'ignore (même avec le moteur de stockage InnoDB). - La contrainte de validation existant dans la norme SQL est acceptée mais ignorée par MySQL (5.1) : check(condition) - MySQL fournit une contrainte d'incrémentation automatique, dans le cas d'une valeur numérique (entière ou réelle) : auto_increment. Lors de l'enregistrement MySQL attribue automatiquement un numéro d'ordre à la colonne) à partir du rang 1 et à la suite du dernier numéro utilisé si la valeur indiquée est vide (null) ; MySQL prend en compte aussi une valeur indiquée nulle (0) mais seulement si l'option NO_AUTO_VALUE_ON_ZERO n'est pas active. Cependant, dans la table, il ne peut y avoir qu'une seule colonne auto-incrémentée et celle-ci doit être indexée (typiquement c'est la clef primaire). Cela n'est pas dans la norme SQL. Aide-mémoire minimal de SQL dans MySQL - Page 11

12 Indication d'interclassement Option d'indication d'un interclassement (cf. II.2) pour un type de caractères : collate interclassement Exemple : reference varchar(30) character set ascii default '?' collate ascii_bin - Cette option figure à la fin de la définition de la colonne. - Si cette option est absente, il s'applique alors l'interclassement par défaut d'indication pour l' alphabet (si défini dans le type de données ou sinon au niveau de la base). I CONTRAINTE DE TABLE - Définition de la clef primaire : primary key(colonne ou liste de colonnes) - Définition d'une clef secondaire : unique (colonne ou liste de colonnes) - Définition d'une clef étrangère : foreign key (colonne ou liste de colonnes) references table de référence (colonne de référence) options Exemples : primary key (genre, espece) unique (courriel) foreign key(acheteur) references personne(numero) on delete cascade - Comme dans la norme SQL, il est possible d'attribuer un nom particulier à une contrainte en la préfixant par : constraint nom ; exemple : constraint verif_courriel unique (courriel) - Les définitions de clefs sont présentées en détail à la partie I MySQL permet aussi de définir un index ; c'est obligatoire pour une clef étrangère mais hors norme : index options (colonne ou liste de colonnes) ou key options (colonne ou liste de colonnes) avec comme options un nom et-ou un type d'index (nons décrits ici). - La norme SQL permet de définir aussi une contrainte de validation (check) mais MySQL l'ignore. I.3.4 RETOUCHE D'UNE TABLE : ALTER TABLE Syntaxe simplifiée : alter table identification retouche de la table La table est a priori identifiée par son simple nom, mais il est possible en cas d'ambiguité de préfixer son nom par celui de la base (ou schéma) en les séparant par un point («.») ; exemple : coop.personne Une retouche de la table consiste soit en l'ajout ou la suppression d'une colonne, soit en l'ajout ou la suppression d'une contrainte de la table, soit en la modification de la valeur par défaut d'une colonne. Exemples : alter table client alter localite set default 'PARIS' alter table client add constraint unique (nom) alter table coop.personne add prenom varchar(40) alter table client drop column telephone cascade - MySQL permet d'indiquer une liste de retouches dans une seule instruction, séparées par une virgule à l'intérieur de parenthèses, mais cela est hors norme. - MySQL fournit aussi des possibilités de retouche d'index (cf. I.3.2.4) et d'autres non présentées ici et hors norme, notamment sur le nom, le type de donnée ou la position d'une colonne, les alphabets, les interclassements, le nom de la table. I AJOUT D'UNE COLONNE Syntaxe : add column nom de colonne définition de la colonne ou add nom de colonne définition de la colonne Exemples : alter table client add column tel varchar(20) alter table coop.personne add prenom varchar(40) Remarque : MySQL permet d'indiquer une liste de noms et définitions de colonne dans une seule instruction, séparées par une virgule à l'intérieur de parenthèses, ainsi que de choisir la position de la colonne ; cela n'est pas dans la norme SQL. I SUPPRESSION D'UNE COLONNE Syntaxe : drop column nom de colonne mode ou drop nom de colonne mode Aide-mémoire minimal de SQL dans MySQL - Page 12

13 et en MySQL : drop column nom de colonne ou drop nom de colonne où mode précise les modalités de la suppression vis-à-vis des références externes à cette table (contraintes d'intégrité référentielle, vues, etc.) : restrict imposant l'absence de références externes ou cascade provoquant la suppression de celles-ci. Exemple : alter table client drop column tel ou alter table client drop tel - MySQL ignore en fait le mode de suppression et permet de ne pas l'indiquer (hors norme). - On ne peut pas supprimer l'unique colonne d'une table. I AJOUT D'UNE CONTRAINTE DE TABLE Syntaxe : add constraint nom contrainte de table ou add contrainte de table Exemples : alter table client add constraint verif_nom unique (nom) alter table coop.lot add primary key(numero) - Les contraintes de table sont présentées en détail à la partie I Le nom de contrainte est indispensable pour pouvoir la supprimer ultérieurement. I SUPPRESSION D'UNE CONTRAINTE DE TABLE Syntaxe : drop constraint nom de contrainte mode et en MySQL : drop constraint nom de contrainte de table où mode précise les modalités de la suppression vis-à-vis des références externes à cette table (contraintes d'intégrité référentielle, vues, etc.) : restrict imposant l'absence de références externes ou cascade provoquant la suppression de celles-ci. Exemples : alter table client drop constraint verif_no cascade alter table coop.lot drop constraint verif_producteur - MySQL ignore en fait le mode de suppression et permet de ne pas l'indiquer (hors norme). - Les contraintes de table sont présentées en détail à la partie I Le nom de la contrainte doit avoir été attribué lors de sa création. I MODIFICATION DE LA VALEUR PAR DÉFAUT Syntaxe : alter column nom de colonne set default valeur ou alter nom de colonne set default valeur Exemples : alter table client alter column localite set default 'PARIS' alter table coop.personne alter prenom set default '?' Remarque : MySQL permet aussi de supprimer une valeur par défaut précédemment définie, selon la notation suivante, hors norme : alter column nom de colonne drop default ; après l'opération, une nouvelle valeur par défaut s'applique selon le type de donnée de la colonne : null si possible, sinon zéro (0) pour un type numérique, la chaîne vide ('') pour du texte, etc. I.3.5 SUPPRESSION D'UNE TABLE : DROP TABLE Syntaxe simplifiée : drop table nom mode et en MySQL : drop table nom où mode précise les modalités de la suppression vis-à-vis des références externes à cette table (contraintes d'intégrité référentielle, vues, etc.) : restrict imposant l'absence de références externes ou cascade provoquant la suppression de celles-ci. Exemples : drop table client restrict drop table produit - MySQL ignore en fait le mode de suppression et permet de ne pas l'indiquer (hors norme). - MySQL possède une option spécifique, hors norme : condition optionnelle d'existence préalable à la suppression de la table, placée juste avant le nom ; exemple : drop table if exists produit Aide-mémoire minimal de SQL dans MySQL - Page 13

14 I.3.6 AUTRES OPÉRATIONS SUR UNE TABLE SPÉCIFIQUES À MYSQL : RENAME TABLE ET TRUNCATE TABLE MySQL fournit quelques instructions complémentaires de manipulations de table, hors norme : - Changement du nom : rename table nom actuel to nouveau nom - Suppression de tout le contenu : truncate table table ou truncate table Exemples : rename nouveaux_produits to produits_nouveaux truncate table coop.produit I.4 MANIPULATION D'UNE VUE Voici la présentation des instructions permettant de manipuler une vue sur les données (view). I.4.1 CRÉATION D'UNE VUE : CREATE VIEW Syntaxe simplifiée : create view nom de la vue as expression de recherche ou create view nom de la vue (colonne ou liste de colonnes) as expression de recherche La vue est a priori identifiée par son simple nom, mais il est possible en cas d'ambiguité de préfixer son nom par celui de la base (ou schéma) en les séparant par un point («.») ; exemple : coop.legumes La liste des colonnes contient les noms séparés par une virgule («,»). Une expression de recherche est décrite en I.5.4. Exemples : create view clients_riches as select ncli, nom from client where compte >= create view coop.legumes(nom_legume, prix_legume) as select nom, prix from produit where type = 'LEGUME' witch cascaded check option - L'instruction comporte une clause finale optionnelle qui vérifie la conformité d'une mise à jour d'une table sous-jacente au travers de la vue. Le contrôle vérifie que les nouvelles données correspondent bien à l'interrogation spécifique à la vue, soit seulement au niveau de cette vue (local), soit aussi pour toutes celles la réutilisant (cascaded) : with check local option ou witch cascaded check option ou équivalent au cas de cascaded : with check option - Si la liste des noms de colonnes de la vue est absente, MySQL prend en compte tous les noms des colonnes en résultat de l'interrogation mais cela est figé au moment de la création de la vue ; autrement dit, la vue peut devenir invalide si la structure d'une table impliquée dans la vue est modifiée après la création de cette vue. - L'expression de recherche ne peut pas contenir en MySQL une sous-recherche. - MySQL offre la possibilité de retrouver le texte de la création d'une vue existante via la commande hors norme show create view nom de la vue - MySQL propose des variantes hors norme de cette instruction, notamment : remplacement de la vue si préexistante (create or replace...), mode optionnel de prise en charge (algorithm = mode). I.4.2 SUPPRESSION D'UNE VUE : DROP VIEW Syntaxe simplifiée : drop view nom mode et en MySQL : drop view nom où mode précise les modalités de la suppression vis-à-vis des références externes à cette vue (contraintes d'intégrité référentielle, vues, etc.) : restrict imposant l'absence de références externes ou cascade provoquant la suppression de celles-ci. Exemples : drop view clients_riches restrict drop view coop.legumes - MySQL ignore en fait le mode de suppression et permet de ne pas l'indiquer (hors norme). - MySQL possède une option spécifique, hors norme SQL : condition optionnelle d'existence préalable à la suppression de la vue, placée juste avant le nom ; exemple : drop view if exists coop.legumes I.4.3 AUTRE OPÉRATION SUR UNE VUE SPÉCIFIQUE À MYSQL : ALTER VIEW Syntaxe simplifiée : alter view nom de la vue (colonne ou liste de colonnes) as interrogation Aide-mémoire minimal de SQL dans MySQL - Page 14

15 ou alter view nom de la vue as interrogation Exemples : alter view clients_riches as select ncli, nom from client where compte >= 5000 alter view coop.legumes(nom_legume, prix_legume) as select nom, prix from produit where type = 'LEGUME' and prix > 0 witch cascaded check option Remarque : cette instruction est similaire à celle de création de vue (create view) et plus particuièrement sa variante (create or replace view) ; elle est par ailleurs hors norme. I.5 MANIPULATIONS DE DONNÉES Cette section présente les principales instructions (ou «requêtes», request) de manipulations des données dans les tables d'une base : ajout, mise à jour, suppression et interrogation. La notion de table recouvre ici aussi a priori les éventuelles vues existantes dans la base. I.5.1 AJOUT DE DONNÉES : INSERT Syntaxe simplifiée : insert into table (liste de colonnes) values (liste de valeurs) ou insert into table (liste de colonnes) expression de recherche Exemples : insert into detail (ncom, npro, qcom) values (3001, 'PV489', 30) insert into coop.produit (nom, type, prix) values ('KIWI', 'FRUIT', null) insert into coop.produit (nom, type, prix) select nom, type, prix from coop.nouveaux_produits where validation = 'fait' - Il est possible de ne pas indiquer la liste des colonnes et ses parenthèses ; c'est alors toutes les colonnes de la table qui sont implicitement prises en compte et remplies selon l'ordre de leur position dans la table ; exemple : insert into produit values (null, 'kiwi', 'FRUIT', null) - La notation default comme valeur permet d'obtenir la valeur par défaut fixée pour la colonne considérée ; exemple : insert into entrepot (code, lieu) values ('Z08', default) - La norme SQL permet aussi d'utiliser la notation default values à la place de la liste des valeurs et ses parenthèses pour obtenir un enregistrement avec les valeurs par défaut respectives de chaque colonne ; exemple : insert into produit default values. MySQL ne reconnaît pas cette notation mais elle peut être remplacée par une liste vide ; exemple : insert into produit values() - Plusieurs lignes de données peuvent être insérées en une seule instruction ; il suffit d'indiquer les listes de valeurs correspondant à chaque ligne de données, à la suite et séparées par une virgule («,») ; exemple : insert into entrepot (code, lieu) values ('G01', 'grenier'), ('J01', 'jardin') - Quand la valeur ajoutée ne correspond pas exactement au type de donnée de la colonne correspondante, il peut survenir une conversion (cf. I.5.7). - MySQL permet de simplifier l'écriture de l'instruction en omettant le mot-clef into, et aussi en remplaçant values par value ; cela n'est pas dans la norme. - L'insertion est refusée si la nouvelle valeur de clef primaire, ou unique, existe déjà dans la table ; afin de forcer l'insertion dans ce cas par suppression de l'enregistrement avec la même clef, MySQL propose une instruction de syntaxe similaire (hors norme) : replace into table (liste de colonnes)... I.5.2 MISE À JOUR DE DONNÉES : UPDATE Syntaxe : update table set liste des mises à jour where condition ou sur toutes les lignes de la table : update table set liste des mises à jour les mises à jour sont séparées dans la liste par une virgule, et sous la forme : colonne = valeur une valeur est soit une expression, soit null, soit default la condition est présentée en I Exemples : update coop.produit set type = 'fruit', nom = 'kiwi' where numero = 1 update client set cat = 'A1' where cat is null update client set compte = compte update table1 set table1.col1 = (select table2.col2 from table2 where table1.id1 = table2.id2) Aide-mémoire minimal de SQL dans MySQL - Page 15

16 - Dans le cas où une modification réutilise une valeur mise à jour lors d'une modification précédente dans la même liste, la norme SQL stipule que c'est la valeur initiale avant toute modification qui est prise en compte alors que MySQL au contraire prend en compte la nouvelle valeur modifiée précédemment ; exemple : update promotion set prix = prix * 0.8, prix_ancien = prix - Quand la valeur ne correspond pas exactement au type de donnée de la colonne mise à jour par celle-ci, il peut survenir une conversion (cf. I.5.7). - MySQL fournit des clauses complémentaires à l'instruction de mise à jour : tri des lignes avant la mise à jour (order by), application à un nombre limité de lignes (limit) ; ces clauses sont hors norme. I.5.3 SUPPRESSION DE DONNÉES : DELETE Suppression de lignes particulières : delete from table where condition ou de toutes les lignes de la table : delete from table la condition est présentée en I Exemples : delete from coop.produit where numero = 2 delete from nouveaux_produits - Pour le cas de la suppression complète des lignes d'une table, MySQL contient une autre instruction généralement plus rapide mais hors norme (truncate, cf. I.3.6) - MySQL fournit des éléments complémentaires à l'instruction de suppression, hors norme, notamment : non prise en compte des anomalies (delete ignore from), tri des lignes avant la suppression (order by), application à un nombre limité de lignes (limit). - Il est aussi possible avec MySQL de combiner la suppression avec une jointure mais cela est hors norme : delete from liste de tables using jointure... ou delete liste de tables from jointure... I.5.4 INTERROGATION : SELECT Une instruction d'interrogation regroupe toutes les possibilités d'extraire de l'information à partir des tables de données et d'effectuer des calculs. Les informations obtenues en résultat sont soit une table, soit une valeur ; en cas d'absence de résultat, on obtient la valeur null. La syntaxe générale est : expression de recherche option de tri (voir les diagrammes syntaxiques en II.3) L'option de tri s'applique sur les lignes obtenues : order by spécification du tri où la spécification du tri correspond à un ou plusieurs critères séparés par une virgule («,») ; un critère étant un résultat désigné par son nom ou son rang (compté à partir de 1), et éventuellement complété par le sens de tri : asc pour croissant (appliqué par défaut d'indication) ou desc pour décroissant. Une expression de recherche peut être composée de manière plus ou moins structurée sous la forme d'une interrogation élémentaire ou d'une combinaison d'interrogations. Une expression de recherche peut être réutilisée dans une instruction pour y fournir une table de données, voire une simple colonne ou une valeur (cf. I.5.6.5). Dans ce cas, il s'agit soit de remplissage d'une table dans une instruction d'insertion (cf. I.5.1), soit sinon d'une sous-recherche (subquery). Une sous-recherche délivre soit une valeur simple (type «scalaire»), soit une liste de valeurs (type «colonne»), soit un ensemble de colonnes (type «table»). Elle se note sous la forme d'une interrogation élémentaire mise entre parenthèses : ( interrogation élémentaire ) Exemples : select nom, prix from produit order by prix desc select personne.nom, count(lot.numero) as nb from personne join lot on lot.producteur = personne.numero group by producteur having nb >= 10 order by personne.nom insert into coop.produit (nom, type, prix) select nom, type, prix from coop.nouveaux_produits where validation = 'fait' select avg(type_produit.total) from ( select sum(prix) as total from produit group by type ) as type_produit I INTERROGATION ÉLÉMENTAIRE Syntaxe simplifiée : select doublons résultats from données options où la gestion des doublons s'indique explicitement par l'ajout d'un mot-clef immédiatement après select, soit distinct pour une élimination, soit all pour leur conservation (cas appliqué par défaut d'indication), Aide-mémoire minimal de SQL dans MySQL - Page 16

17 où les résultats correspondent à : - Soit toutes les colonnes de la table, noté par une astérique, «*» - Soit une ou plusieurs identifications de valeurs séparées par une virgule («,»), correspondant chacune à une colonne désignée par son nom ou plus généralement à une expression éventuellement assortie d'un surnom («alias») : valeur ou valeur as surnom et où les données correspondent à un ou plusieurs éléments séparés par une virgule («,») : - Soit une table désignée par son nom, éventuellement assortie d'un surnom : nom ou nom as surnom - Soit l'expression d'une jointure de tables (cf. I.5.5) - Soit une table dite «dérivée» résultat d'une sous-recherche de type «table» identifiée explicitement par un surnom : ( interrogation élémentaire ) as surnom et où options est l'une ou plusieurs, dans l'ordre, des clauses suivantes facultatives : - Restriction sur les données : where condition où la condition est présentée en I Regroupement des lignes obtenues : group by spécification du regroupement où la spécification du regroupement correspond à une ou plusieurs désignations de résultats séparées par une virgule («,») - Filtrage des lignes après une agrégation ou un regroupement : having condition Exemples : select * from client where cat = 'B1' select distinct cat from client select nom, ville from coop.personne order by ville, nom select nom, (prix * 1.196) as prix_ttc from produit select p.type, avg(p.prix) as moyenne from produit as p group by p.type select avg(type_produit.total) from ( select sum(prix) as total from produit group by type ) as type_produit select producteur, count(numero) as nb from lot group by producteur having nb >= 10 select current_date date_du_jour - Il est possible d'attribuer un surnom à une table ou un résultat, en omettant le mot-clef as ; exemple : avg(prix) as moyenne ou avg(prix) moyenne - Au sein des options, un résultat peut être désignée par son nom en cas de colonne, éventuellement préfixé par le nom de la table suivi d'un point («.»), ou par un surnom si défini précédemment. - Un critère de tri de type textuel peut aussi inclure un interclassement introduit par le mot-clef collate ; exemple : select nom from client order by nom collate utf8_bin asc - MySQL propose aussi la limitation du nombre de lignes en résultat, hors norme SQL ; cette option se place tout à la fin, sous deux formes : soit les premières lignes avec limit quantité, soit un certain nombre de lignes au-delà d'un seuil avec limit seuil, quantité ou limit quantité offset seuil ; exemples : select * from client order by nom asc limit 5 (5 premières lignes au maximum) et select * from client order by nom asc limit 5, 10 (lignes de rang 6 à 15 si existantes) I COMBINAISON D'INTERROGATIONS Voici les combinaisons possibles d'interrogation présentées par ordre de priorité décroissant. 1) Elément de recherche, à la base d'une combinaison Soit une interrogation élémentaire (cf. I.5.4.1) Soit une sous-recherche (cf. I.5.4) : ( expression de recherche ) 2) Union des résultats : expression de recherche 1 union doublons expression de recherche 2 La gestion des doublons s'effectue avec élimination par défaut d'indication, ou sinon sans élimination par l'ajout du mot-clef all immédiatement après union. Les résultats de la seconde recherche s'ajoutent à ceux de la première, avec la reprise des noms de colonne issus de la première recherche ; les deux recherches doivent produire des résultats sur des colonnes en même nombre et de même type respectif. Aide-mémoire minimal de SQL dans MySQL - Page 17

18 La norme SQL permet de restreindre l'union aux colonnes de noms identiques à l'aide du mot-clef corresponding placé avant la seconde expression de recherche, éventuellement complété par une liste de nom colonnes (séparés par une virgule) introduite par le mot-clef by : corresponding ou corresponding by(liste de colonnes) ; MySQL ne reconnaît pas cette option. Exemple : select p.nom from personne as p join lot on lot.producteur = p.numero union select p.nom from personne as p join vente on vente.acheteur = p.numero - La norme SQL défini d'autres combinaisons mais inexistantes dans MySQL (5.1) : Intersection : expression de recherche 1 intersect doublons expression de recherche 2 la syntaxe est similaire à celle de l'union ; cela correspond à l'ensemble des résultats communs aux deux recherches. Différence : expression de recherche 1 except doublons expression de recherche 2 la syntaxe est similaire à celle de l'union ; cela correspond à l'ensemble des résultats de la première recherche qui n'apparaissent pas dans ceux de la seconde recherche. I.5.5 JOINTURE DE TABLES Une jointure entre tables dispose de notations spécifiques selon le type de jointure. Dans tous les cas, une jointure lie deux tables désignées par une référence respective, qui peut être : - Un nom de table, éventuellement préfixé par le nom de son schéma ou de sa base, et suivi en option par la définition d'un surnom : nom de table as surnom - Une table «dérivée» résultat d'une sous-recherche de type «table» et identifiée explicitement par un surnom : ( interrogation élémentaire ) as surnom - une autre jointure, éventuellement placée entre parenthèses («( )») la norme SQL permet aussi de définir un surnom pour les colonnes d'une table sous la forme : table as nouveau nom de table ( liste des nouveaux noms de colonne ) Exemples : select cli.nom, cli.compte from client as cli join commande as cmd on cli.ncli = cmd.ncli select p.nom, p.prix, max(j.prix) as max_vente from produit as p join (select prix from vente, produit as v where v.produit = produit.numero) as j select distinct x.nom from personne as x join (vente join produit on vente.produit = produit.numero) on x.numero = acheteur Jointure générale Syntaxe : référence de table 1 type de jointure join référence de table 2 on condition où le type de jointure est au choix : - Interne : inner ; à chaque ligne de la 1 ère table est associée toute ligne de la 2 nde table vérifiant la condition - Externe à gauche : left outer ; une jointure interne est d'abord effectuée, puis il y est ajouté toute ligne de la 1 ère table sans concordance avec la 2 nde table et alors complétées par des manques (null) - Externe à droite : right outer ; une jointure interne est d'abord effectuée, puis il y est ajouté toutes les lignes de la 2 nde table sans concordance avec la 1 ère table et alors complétées par des manques (null) - Externe bilatérale : full outer ; une jointure interne est d'abord effectuée, puis il y est ajouté toutes les lignes de la 1 ère table sans concordance avec la 2 nde table complétées par des manques (null) et enfin toutes celles de la 2 nde table sans concordance avec la 1 ère table complétées par des manques (null) et où la condition (cf. I.5.6.1) définit le critère de concordance des lignes entre les tables Exemples : select p.nom from produit as p join vente as v on v.produit = p.numero select p.nom, p.prix, max(j.prix) as max_vente from produit as p join (select prix from vente, produit as v where v.produit = produit.numero) as j - Le type de jointure peut être omis, c'est alors la jointure interne (inner) qui s'applique. - Dans le cas d'une jointure externe, le mot-clef outer peut être omis. - L'appellation «équi-jointure» correspond au cas où la condition consiste en l'égalité de colonnes. Aide-mémoire minimal de SQL dans MySQL - Page 18

19 - Quand la condition de jointure porte sur l'égalité d'une ou plusieurs colonnes homonymes, elle peut alors être remplacée par une notation spécifique respectivement : using(nom commun de colonne) ou using(liste des noms communs de colonne séparés par une virgule) exemple : select client.nom from client join commande using(ncli) - La norme SQL définit des types complémentaires de jointure : Naturelle : référence de table 1 natural join référence de table 2 ; la concordance s'effectue automatiquement sur l'égalité de toutes les colonnes homonymes et de même type, avec reprise dans la table jointe d'une seule de ces colonnes homonymes ; à éviter car la condition n'est pas explicitée. Union : référence de table 1 union join référence de table 2 ; ajout simple des lignes de chaque table complétées par des manques (null) ; ceci n'existe pas dans MySQL. Jointure croisée Chaque ligne de la première table est jointe à chacune de l'autre table, c'est le «produit cartésien». Syntaxe : référence de table 1 cross join référence de table 2 Exemple : select produit.nom, entrepot.reference from produit cross join entrepot I.5.6 EXPRESSION Les différentes formes d'expression correspondent aux types possibles de la valeur associée. I EXPRESSION LOGIQUE Voici les composants possibles d'une expression logique (ou condition) présentés par ordre de priorité décroissant qui s'appliquent a priori sur une ou des valeurs correspondant à une expression (cf. I.5.6). 1) Prédicat - Comparaison entre deux valeurs avec : =, <> (différence), >, <, >= ou <= MySQL propose, hors norme SQL, une notation synonyme pour la différence :!= exemples : type = 'LEGUME' compte <> 0 age <= 18 - Appartenance ou non d'une valeur à un intervalle donné : valeur between valeur 1 and valeur 2 ou valeur not between valeur 1 and valeur 2 exemples : compte between 500 and Présence ou non dans une liste de valeurs : valeur in liste ou valeur not in liste exemple : cat in ('A01, 'A02', 'A03') - Concordance ou non avec un motif de texte : valeur like motif ou valeur not like motif où le motif peut contenir les symboles, appelés «jokers», «%» pour désigner toute suite de symboles (éventuellement vide), et «_» pour désigner un et un seul symbole quelconque. Dans le cas où un de ces jokers figure dans le texte du motif comme véritable symbole, il est possible d'annuler son effet de joker en le faisant précéder d'un symbole particulier déclaré à la fin du prédicat par : escape symbole ; exemples : code_postal like '750 ' courriel like '%!_%@%' escape '!' - Présence ou absence de la donnée : valeur is null ou valeur is not null exemple : cat is not null - Comparaison avec chaque élément d'un ensemble de valeurs : valeur comparateur mode liste où comparateur correspond à : =, <> (différence), >, <, >= ou <= et liste à une liste de valeurs, ou au résultat d'une sous-recherche (cf. I.5.4) renvoyant une seule colonne et mode à : all (chaque comparaison est vérifiée), any (au-moins une comparaison est vérifiée) la norme SQL définit some comme synonyme de any mais MySQL ne le reconnaît pas. exemple : produit.prix < all (select lot.prix from lot where lot.produit = produit.numero) - Existence de résultats pour une sous-recherche (cf. I.5.4) donnée : exists sous-recherche exemple : exists (select ncom from commande where commande.ncli = client.ncli) - La norme SQL définit aussi d'autres prédicats particuliers mais inexistants dans MySQL : Un seul résultat pour une sous-recherche (cf. I.5.4) : unique Correspondance entre une liste de valeurs et la ligne en résultat d'une sous-recherche (cf. I.5.4) : match Recouvrement de périodes temporelles : overlaps 2) Sous-condition : (condition) exemple : (localite = 'Paris') and (datecom >= ' ') Aide-mémoire minimal de SQL dans MySQL - Page 19

20 3) Terme logique - Une combinaison logique : or (disjonction «ou»), and (conjonction «et»), not (négation) MySQL propose, hors norme SQL, des notations synonymes : (or), && ( and),! (not) ainsi que la conjonction exclusive (l'un ou l'autre mais pas les deux à la fois) : xor Attention au symbole qui correspond soit à la concaténation de texte comme dans la norme SQL, soit à or (disjonction «ou»)! Son attribution dépend en fait de l'option SQL PIPES_AS_CONCAT (cf. II.6) exemple : (type = 'LEGUME') and (prix > 100) - Un test logique : is constante ou is not constante avec les constantes true, false ou unknown correspondant à une logique à trois états : vrai, faux ou indéterminable (donnée manquante généralement) exemple : (produit.prix > client.compte) is not unknown - L'ordre de priorité décroissant de ces opérateurs logiques est : is not and or I EXPRESSION NUMÉRIQUE Voici les composants possibles d'une expression numérique présentés par ordre de priorité décroissant : 1) Une valeur numérique Il s'agit d'un élément d'expression (cf. I.5.6.5), à valeur numérique. 2) Une fonction à valeur numérique - Position d'une sous-chaîne dans une chaîne de caractères : position(sous-chaîne in chaîne) qui renvoie le rang de la sous-chaîne non vide dans chaîne (à partir de 1) si présente, 0 sinon ; exemple : position('@', courriel) - Extraction d'un composant d'une valeur temporelle : extract(champ from valeur temporelle) où champ correspond au choix à l'année (year), le mois (month), le jour (day), l'heure (hour), les minutes (minute) ou secondes (second) ; MySQL autorise d'autres champs hors norme, mais ne permet pas d'obtenir l'heure et les minutes en tenant compte d'un fuseau horaire comme défini dans la norme SQL (timezone_hour, timezone_minute) ; exemple : extract(year from date_arrivee) - Nombre de caractères dans une chaîne : char_length(chaîne) ou character_length(chaîne) à ne pas confondre avec octet_length(chaîne) qui renvoie le nombre d'octets, car selon l'alphabet (cf. II.2) un caractère peut occuper un ou plusieurs octets ; dans MySQL, la fonction hors-norme length(chaîne) est un synonyme de octet_length(chaîne); exemple : char_length(nom) - Nombre de bits dans une chaîne : bit_length(chaîne) - MySQL fournit de nombreuses fonctions complémentaires, hors norme et non présentées ici. 3) La négation : - Exemple : - debit 4) La multiplication ou la division : * / Exemple : prix * ) L'addition ou la soustraction : + - Exemple : solde + report I EXPRESSION TEXTUELLE Voici les composantes possibles d'une expression textuelle présentées par ordre de priorité décroissant : 1) Une valeur textuelle Il s'agit d'un élément d'expression (cf. I.5.6.5), à valeur textuelle. 2) Une fonction à valeur textuelle - Extraction d'une partie d'une chaîne débutant à un rang donné (compté à partir de 1), soit jusqu'à la fin de la chaîne : substring(chaîne from début), soit pour une certaine quantité de caractères donnée : substring(chaîne from début for quantité) ; MySQL fournit le synonyme substr() et la possibilité de remplacer les mots-clefs from et for par une virgule, ce qui est hors-norme ; exemple : substring(code from 1 for 2) - Changement de casse par passage en majuscules : upper(chaîne) ou en minuscules : lower(chaîne) exemple : upper(produit.type) - Elimination des occurences d'un caractère situées à l'une ou aux deux extrémités d'une chaîne : Aide-mémoire minimal de SQL dans MySQL - Page 20

21 trim(mode caractère from chaîne) où mode est au choix : both ou absent (les deux bouts), leading (au début seul) ou trailing (à la fin seule) ; par défaut d'indication le caractère à éliminer est l'espace, et en absence d'indication des mode et caractère, le mot-clef from peut être alors omis ; exemple : trim(both from courriel) ou trim(courriel) - Conversion du texte d'une chaîne dans un alphabet (cf. II.2) donné : convert(chaîne using alphabet) fonction utilisable uniquement dans la spécification d'un résultat d'une instruction d'interrogation (cf. I.5.4) exemple : select convert(nom using utf8) from personne - La norme SQL définit aussi une fonction de remplacement ciblé de certains caractères dans une chaîne mais celle-ci n'existe pas dans MySQL : translate(chaîne using table de conversion) - MySQL fournit de nombreuses fonctions complémentaires, hors norme et non présentées ici. 3) L'application d'un interclassement (cf. II.2) : collate interclassement Exemple : nom collate utf8_bin 4) La concaténation de deux chaînes La norme SQL utilise la notation mais MySQL utilise a priori (cf. II.6.2) celle-ci pour le «ou logique» et propose à la place la fonction concat(liste de valeurs) Exemple : nom ' ' prenom ou concat(nom, ' ', prenom) I EXPRESSION TEMPORELLE Voici les composantes possibles d'une expression temporelle présentées par ordre de priorité décroissant : 1) Une valeur temporelle Il s'agit d'un élément d'expression (cf. I.5.6.5), à valeur temporelle. Exemple : date ' ' 2) Une fonction à valeur temporelle - La date courante : current_date Dans MySQL, la fonctionne retourne la date soit comme un texte de forme normalisée 'AAAA-MM-JJ' dans un contexte textuel, soit comme un nombre AAAAMMJJ dans un contexte numérique ; exemples : ' ' ou L'heure courante : current_time Dans MySQL, la fonctionne retourne l'heure soit comme un texte de forme normalisée 'HH:MM:SS' dans un contexte textuel, soit comme un nombre HHMMSS dans un contexte numérique ; exemples : '12:17:30' ou L'horodate courante : current_timestamp Dans MySQL, la fonctionne retourne l'horodate soit comme un texte de forme normalisée 'AAAA-MM-JJ HH:MM:SS' dans un contexte textuel, soit comme un nombre AAAAMMJJHHMMSS dans un contexte numérique ; exemples : ' :17:30' ou MySQL propose des homonymes hors-norme pour ces fonctions : curdate(), curtime(), now() mais par contre ne permet pas de manipuler des fractions de seconde. En outre, MySQL fournit aussi de nombreuses fonctions complémentaires, hors norme et non présentées ici. 3) L'augmentation ou la diminution temporelle Il s'agit de la combinaison d'une valeur temporelle avec une durée (cf. I.1.5): durée + valeur temporelle ou valeur temporelle + durée ou valeur temporelle - durée Exemple : current_date + interval '3' month I ELÉMENT D'UNE EXPRESSION L'élément de base formant une expression peut être : - Une notation de valeur numérique, textuelle, temporelle, logique, binaire ou hexadécimale Exemples : 1.77 'Carotte' date ' ' true B' ' X'20' - Le nom du compte de l'utilisateur utilisant le SGDB : current_user La norme SQL définit aussi user et session_user, non reconnus tels quels par MySQL. - Le nom d'une variable défine dans l'environnement d'exécution (cf. II.6.1). - Le nom d'une colonne, éventuellement préfixé par le nom de table Aide-mémoire minimal de SQL dans MySQL - Page 21

22 Exemples : produit.prix cat - Un calcul dit «d'agrégation» portant sur l'ensemble de toutes les valeurs de colonnes, ou dans le cas d'un regroupement de lignes au sein d'une interrogation (cf. I.5.4) sur chacun des groupes obtenus, avec en conséquence le remplacement de la liste de ces valeurs par le résultat du calcul ; cela s'exprime de manière générale sous la forme : fonction(doublons expression) où la gestion des doublons s'indique explicitement par soit distinct pour une élimination, soit all ou rien pour leur conservation (cas appliqué par défaut d'indication), et où la fonction de calcul peut correspondre à : Comptage : count() (pas de prise en compte lignes avec une valeur absente, null) Moyenne (average) : avg() Somme : sum() Minimum ou maximum : min() ou max() La notation particulière count(*) désigne le nombre total de lignes Attention! il ne peut pas y avoir d'espace entre le nom de la fonction et la parenthèse ouvrante. Exemples : select type, avg(prix) from produit group by type select count(*) as nb_client, count(distinct cat) as nb_cat from client - Une sous-recherche (cf. I.5.4) dont le résultat est une valeur simple (dite «scalaire») ou null si vide Exemple : ( select max(prix) from produit ) - Une sous-expression notée entre parenthèses : ( expression ) Exemple : (prix * 1.77) - Une conversion de type, ou «transtypage» (cf. I.5.7) : cast(expression as type de donnée) La norme SQL permet d'utiliser un nom de domaine à la place du type de données mais pas MySQL. Exemple : cast('12:20' as time) - Une opération avec un choix : La première valeur définie (non vide) présente dans une liste : coalesce(liste d'expressions) exemple : coalesce(nom_jeune_fille, nom_famille, '?') La valeur d'une expression, remplacée par null dans le cas où elle est égale à une valeur particulière : nullif(expression, valeur) exemple : nullif(nom, '?') Une valeur définie au cas par cas selon les valeurs possibles d'une expression donnée : case expression liste de cas alternative end où la liste est constituée d'un ou plusieurs cas à la suite, chacun noté : when valeur then résultat et où l'alternative, optionnelle, s'applique si aucun cas n'est vérifié : else valeur l'absence d'alternative équivaut au choix de la valeur null par défaut de cas vérifié Exemple : case sexe when 'F' then 'femme' when 'H' then 'homme' else 'inconnu' end Une valeur définie au cas par cas selon des conditions (cf. I.5.6.1) au sein d'une interrogation: case liste de cas alternative end où la liste est constituée d'un ou plusieurs cas à la suite, chacun noté : when condition then résultat et où l'alternative, optionnelle, s'applique si aucun cas n'est vérifié : else valeur l'absence d'alternative équivaut au choix de la valeur null par défaut de cas vérifié Exemple : select code_postal, case when pays = 'FR' then 'France' when pays is null then 'Inconnu' else 'Etranger' end from personne I.5.7 CONVERSION DE VALEURS Quand des opérations s'appliquent à des valeurs de types (ou domaines) différents, il survient généralement une conversion implicite et silencieuse du type de l'une des valeurs vers celui de l'autre valeur, appelée «transtypage» (cast). Il est aussi possible de provoquer une conversion de manière explicite à l'aide de l'opérateur cast (cf. I.5.6.5). Voici ci-après un aperçu des conversions implicites dans MySQL lors d'une comparaison ou d'un calcul. Aide-mémoire minimal de SQL dans MySQL - Page 22

23 Opérandes null numérique texte temporel binaire ou hexadécimal null null null null null null numérique null numérique 1 numérique 2 numérique 3 numérique 5 texte null numérique 2 texte texte 4 texte 6 temporel null numérique 3 texte 4 temporel numérique 3 5 binaire ou hexadécimal null numérique 5 texte 6 numérique 3 5 binaire ou hexadécimal Nota bene 1) Dans le cas du couple composé d'une nombre entier et d'un nombre décimal exact, le résultat est de type décimal exact ; sinon, dès qu'une valeur est un réel approché, le résultat est alors un réel approché. 2) Le texte est interprété autant que possible comme la notation d'une valeur numérique à partir du début : si cela correspond à un nombre, le texte est alors converti à ce nombre, sinon c'est la valeur zéro ; exemples : '123.1' '5a' 5 'carotte' 0 3) La valeur temporelle est considérée comme du texte, puis convertie vers un nombre ; attention aux cas des fonctions temporelles (cf. I.5.6.4) dans MySQL qui renvoient alors un nombre exemples : date ' ' current_date ) La valeur temporelle est considérée comme du texte ; exemple : concat('le ', current_date ) 'le ' 5) La valeur binaire (ou hexadécimale) est convertie en un nombre (exprimé en base décimale) exemple : 12 + B'0011' 15 6) La valeur binaire (ou hexadécimale) est convertie en un texte, caractère par caractère exemple : concat('a', X'7c', 'b') 'a b' Aide-mémoire minimal de SQL dans MySQL - Page 23

24 II - ANNEXE : SPÉCIFICITÉS DE MYSQL Cette section décrit les principales spécificités de MySQL, liées à cette présentation du langage SQL. II.1 AIDE EN LIGNE MySQL fournit une instruction d'aide en ligne (en anglais) : help 'sujet' Celle-ci affiche des indications extraites de l'aide en ligne de MySQL. Le sujet peut être notamment un concept général, une instruction de SQL ou un mot-clef. Une liste des principales têtes de chapitres s'obtient par le sujet contents. Exemples : help 'data types' help 'create table' help 'using' help 'contents' II.2 ALPHABETS (CHARSET) ET INTERCLASSEMENTS (COLLATION) MySQL propose un grand nombre d'alphabets avec souvent plusieurs modes d'interclassement. Leurs listes respectives s'obtiennent par les commandes show character set et show collation. L'interclassement définit une méthode de comparaison et de tri des symboles, en considérant les variantes accentuées ou de casse (minuscule ou majuscule) d'une lettre et éventuellement les variantes d'écriture d'un symbole ; par exemple : égalité entre «u», «U», «ù» et «Ù». Par convention, un code à la fin du nom du mode d'interclassement indique s'il est sensible à la casse («_cs») ou non («_ci»). Il prend tout son sens lors de la recherche d'un mot quelques soient ses écritures possibles ; exemple : érable, Erable, Érable, ERABLE sont toujours égaux dans un interclassement insensible à la casse et prenant en compte les accentuations d'une lettre. Un alphabet, avec un interclassement associé par défaut d'indication, est fixé pour le serveur et s'applique a priori à toutes ses bases. Il peut être redéfini au niveau d'une base de données (create database, alter database), ou d'une colonne (create table, alter table). Voici les principaux alphabets avec leurs interclassements respectifs : Alphabet Interclassement Commentaire ascii latin1 utf8 ascii_general_ci * ascii_bin latin1_general_ci latin1_general_cs latin1_swedish_ci * utf8_general_ci * utf8_unicode_ci utf8_bin alphabet informatique élémentaire (US ASCII, lettres anglaises) pas de différence de casse différence entre tous les symboles dont notamment les minuscules et majuscules alphabet de l'europe de l'ouest (ISO ), dont le français lettres accentuées identiques à la lettre sans accent, pas de différence de casse lettres accentuées identiques à la lettre sans accent, différence de casse variante nordique (lieu d'origine des concepteurs de MySQL), lettres accentuées identiques à la lettre sans accent, sans différence entre lettres minuscules et majuscules alphabet universel (Unicode) lettres accentuées identiques à la lettre sans accent, sans différence entre lettres minuscules et majuscules prise en compte supplémentaire de notations multiples d'une même lettre (exemples en français et allemand : «œ» et «oe», «ß» et «ss») différence entre tous les symboles (dont minuscules et majuscules) * : mode d'interclassement appliqué par défaut à l'alphabet en l'absence d'indication. Aide-mémoire minimal de SQL dans MySQL - Page 24

25 II.3 DIAGRAMMES SYNTAXIQUES Ces diagrammes syntaxiques ont été créés à l'aide de l'outil RailRoad diagram generator 1. II.3.1 DIAGRAMME SYNTAXIQUE POUR UNE INTERROGATION (SELECT) 1 Outil disponible gratuitement en ligne à : Aide-mémoire minimal de SQL dans MySQL - Page 25

26 Aide-mémoire minimal de SQL dans MySQL - Page 26

27 Aide-mémoire minimal de SQL dans MySQL - Page 27

28 Aide-mémoire minimal de SQL dans MySQL - Page 28

29 Aide-mémoire minimal de SQL dans MySQL - Page 29

30 II.3.2 DIAGRAMME SYNTAXIQUE POUR UNE EXPRESSION Aide-mémoire minimal de SQL dans MySQL - Page 30

31 Aide-mémoire minimal de SQL dans MySQL - Page 31

32 Aide-mémoire minimal de SQL dans MySQL - Page 32

33 Aide-mémoire minimal de SQL dans MySQL - Page 33

34 Aide-mémoire minimal de SQL dans MySQL - Page 34

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

Le langage SQL pour Oracle - partie 1 : SQL comme LDD Le langage SQL pour Oracle - partie 1 : SQL comme LDD 1 SQL : Introduction SQL : Structured Query Langage langage de gestion de bases de donn ees relationnelles pour Définir les données (LDD) interroger

Plus en détail

Olivier Mondet http://unidentified-one.net

Olivier Mondet http://unidentified-one.net T-GSI Ch.4 Le Langage SQL LDD, LCD Cet exercice guidé reprend le plan suivis lors de l intervention de formation faite pour l académie de Versailles. L objectif principal visait en la présentation du langage

Plus en détail

Le Langage De Description De Données(LDD)

Le Langage De Description De Données(LDD) Base de données Le Langage De Description De Données(LDD) Créer des tables Décrire les différents types de données utilisables pour les définitions de colonne Modifier la définition des tables Supprimer,

Plus en détail

Création et Gestion des tables

Création et Gestion des tables Création et Gestion des tables Version 1.0 Z Grégory CASANOVA 2 Sommaire 1 Introduction... 3 2 Pré-requis... 4 3 Les tables... 5 3.1 Les types de données... 5 3.1.1 Les types de données Sql Server... 5

Plus en détail

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

Pour les débutants. langage de définition des données Pour les débutants SQL : langage de définition des données Les bases de données sont très utilisées dans les applications Web. La création, l interrogation et la manipulation des données de la base sont

Plus en détail

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

1. Qu'est-ce que SQL?... 2. 2. La maintenance des bases de données... 2. 3. Les manipulations des bases de données... 5 1. Qu'est-ce que SQL?... 2 2. La maintenance des bases de données... 2 2.1 La commande CREATE TABLE... 3 2.2 La commande ALTER TABLE... 4 2.3 La commande CREATE INDEX... 4 3. Les manipulations des bases

Plus en détail

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

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2 SQL Sommaire : COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2 COMMANDES DE MANIPULATION DE DONNEES... 2 COMMANDES DE CONTROLE TRANSACTIONNEL... 2 COMMANDES DE REQUETE DE DONNEES... 2 COMMANDES

Plus en détail

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

Bases de Données relationnelles et leurs systèmes de Gestion III.1- Définition de schémas Bases de Données relationnelles et leurs systèmes de Gestion RAPPELS Contraintes d intégrité sous Oracle Notion de vue Typage des attributs Contrainte d intégrité Intra-relation

Plus en détail

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

PHP 5. La base de données MySql. A. Belaïd 1 PHP 5 La base de données MySql A. Belaïd 1 Base de données C est quoi une base de données? Une base de données contient une ou plusieurs tables, chaque table ayant un ou plusieurs enregistrements Exemple

Plus en détail

1/ Présentation de SQL Server :

1/ Présentation de SQL Server : Chapitre II I Vue d ensemble de Microsoft SQL Server Chapitre I : Vue d ensemble de Microsoft SQL Server Module: SQL server Semestre 3 Année: 2010/2011 Sommaire 1/ Présentation de SQL Server 2/ Architerture

Plus en détail

TP3 : Creation de tables 1 seance

TP3 : Creation de tables 1 seance Universite de Versailles IUT de Velizy - Algorithmique 2005/2006 TP3 : Creation de tables 1 seance Objectif : Creation et modication de tables dans une base de donnees. Avant de commencer ce TP, terminer

Plus en détail

Les BASES de DONNEES dans WampServer

Les BASES de DONNEES dans WampServer Les BASES de DONNEES dans WampServer 1 Définitions Générales Une base de données (BDD) permet d'enregistrer, de stocker, de ranger des données de façon organisée et hiérarchisée. SQL est le langage qui

Plus en détail

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

Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes Langage SQL (1) Sébastien Limet Denys Duchier IUT Orléans 4 septembre 2007 Notions de base qu est-ce qu une base de données? SGBD différents type de bases de données quelques systèmes existants Définition

Plus en détail

CREATION WEB DYNAMIQUE

CREATION WEB DYNAMIQUE CREATION WEB DYNAMIQUE IV ) MySQL IV-1 ) Introduction MYSQL dérive directement de SQL (Structured Query Language) qui est un langage de requêtes vers les bases de données relationnelles. Le serveur de

Plus en détail

MySQL / SQL EXEMPLES

MySQL / SQL EXEMPLES MySQL_exemples_janv04_mpT EXEMPLES 1 MySQL / SQL EXEMPLES Typologie du langage Il est possible d'inclure des requêtes SQL dans un programme écrit dans un autre langage (en langage C par exemple), ainsi

Plus en détail

Langage SQL : créer et interroger une base

Langage SQL : créer et interroger une base Langage SQL : créer et interroger une base Dans ce chapitre, nous revenons sur les principales requêtes de création de table et d accès aux données. Nous verrons aussi quelques fonctions d agrégation (MAX,

Plus en détail

Cours: Administration d'une Base de Données

Cours: Administration d'une Base de Données Bases de Données Avancées Module A IUT Lumière, License CE-STAT 2006-2007 Pierre Parrend Cours: Administration d'une Base de Données Table of Contents Principes...1 Structure d'un Base de Données...1 Architecture...1

Plus en détail

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

Le langage SQL (première partie) c Olivier Caron Le langage SQL (première partie) 1 Plan Le S.G.B.D. postgres Le langage SQL Langage de manipulation de données Langage de requêtes 2 Quelques mots sur Postgres (1/2) Travaux de Stonebraker (Univ. Berkeley)

Plus en détail

Bases de données relationnelles

Bases de données relationnelles Bases de données relationnelles Système de Gestion de Bases de Données Une base de données est un ensemble de données mémorisé par un ordinateur, organisé selon un modèle et accessible à de nombreuses

Plus en détail

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

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

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

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable : BES WEBDEVELOPER - SYSTEME DE GESTION DE BASES DE DONNEES - 5XBDR-1 1 WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable : dans le cadre de mise en situations simples et

Plus en détail

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

Bible MySQL! La première version de MySQL est apparue en 1995. Cette première version est créée pour un usage personnel à partir de msql. Bible MySQL! Bref historique de MySQL 1. MySQL MySQL est le Système de Gestion de Base de Données Relationnelle (SGBDR) Open Source le plus répandu dans le monde. Il est développé par MySQL AB, une entreprise

Plus en détail

Historisation des données

Historisation des données Historisation des données Partie 1 : mode colonne par Frédéric Brouard, alias SQLpro MVP SQL Server Expert langage SQL, SGBDR, modélisation de données Auteur de : SQLpro http://sqlpro.developpez.com/ "SQL",

Plus en détail

I. MySQL : Serveur et SGBD

I. MySQL : Serveur et SGBD Le Système de Gestion de Base de Données MySQL I. MySQL : Serveur et SGBD Menu I. MySQL : Serveur et SGBG II. Création d'une base de données avec MySQL MySQL est un système de gestion et conception de

Plus en détail

Stockage du fichier dans une table mysql:

Stockage du fichier dans une table mysql: Stockage de fichiers dans des tables MYSQL avec PHP Rédacteur: Alain Messin CNRS UMS 2202 Admin06 30/06/2006 Le but de ce document est de donner les principes de manipulation de fichiers dans une table

Plus en détail

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

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR Système de Gestion de Bases de Données Relationnelles MySQL Youssef CHAHIR 1 PLAN Introduction Démarrer MySQL Syntaxe de MySQL Types des attributs Identificateurs Effectuer des requêtes Fonctions de MySQL

Plus en détail

Bases de données relationnelles & SQL

Bases de données relationnelles & SQL Bases de données relationnelles & SQL Objectifs Appréhender les concepts du modèle relationnel. Etre capable de concevoir un schéma relationnel. Etre capable de créer une base de données relationnelle

Plus en détail

Le Langage SQL version Oracle

Le Langage SQL version Oracle Université de Manouba École Supérieure d Économie Numérique Département des Technologies des Systèmes d Information Le Langage SQL version Oracle Document version 1.1 Mohamed Anis BACH TOBJI anis.bach@isg.rnu.tn

Plus en détail

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

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013 NFA 008 Introduction à NoSQL et MongoDB 25/05/2013 1 NoSQL, c'est à dire? Les bases de données NoSQL restent des bases de données mais on met l'accent sur L'aspect NON-relationnel L'architecture distribuée

Plus en détail

Optimisations des SGBDR. Étude de cas : MySQL

Optimisations des SGBDR. Étude de cas : MySQL Optimisations des SGBDR Étude de cas : MySQL Introduction Pourquoi optimiser son application? Introduction Pourquoi optimiser son application? 1. Gestion de gros volumes de données 2. Application critique

Plus en détail

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL) Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL) Un modèle de données définit un mode de représentation de l information selon trois composantes : 1. Des structures de données. 2. Des contraintes qui permettent

Plus en détail

SQL Historique 1982 1986 1992

SQL Historique 1982 1986 1992 SQL Historique 1950-1960: gestion par simple fichier texte 1960: COBOL (début de notion de base de données) 1968: premier produit de sgbdr structuré (IBM -> IDMS) 1970-74: élaboration de l'outil d'analyse

Plus en détail

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

Ecole Industrielle et Commerciale de la ville de Namur. Structure et application des bases de données. Y. Mine Ecole Industrielle et Commerciale de la ville de Namur Structure et application des bases de données 2è graduat en informatique et systèmes * technologie de l information 2008 2009 Y. Mine Table des matières

Plus en détail

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

Introduction au Système de Gestion de Base de Données et aux Base de Données Introduction au Système de Gestion de Base de Données et aux Base de Données Formation «Gestion des données scientifiques : stockage et consultation en utilisant des bases de données» 24 au 27 /06/08 Dernière

Plus en détail

FileMaker 13. Guide de référence SQL

FileMaker 13. Guide de référence SQL FileMaker 13 Guide de référence SQL 2013 FileMaker, Inc. Tous droits réservés. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, Californie 95054 FileMaker et Bento sont des marques commerciales de

Plus en détail

Notes de cours : bases de données distribuées et repliquées

Notes de cours : bases de données distribuées et repliquées Notes de cours : bases de données distribuées et repliquées Loïc Paulevé, Nassim Hadj-Rabia (2009), Pierre Levasseur (2008) Licence professionnelle SIL de Nantes, 2009, version 1 Ces notes ont été élaborées

Plus en détail

SQL sous SqlServer OLIVIER D. DEHECQ Olivier http://www.entraide-info.fr 0

SQL sous SqlServer OLIVIER D. DEHECQ Olivier http://www.entraide-info.fr 0 2013 SQL sous SqlServer OLIVIER D. DEHECQ Olivier http://www.entraide-info.fr 0 Table des matières Signalétique... 2 1 Les bases du SQL... 3 2 SQL server... 6 2 Références des exercices...21 DEHECQ Olivier

Plus en détail

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes donsez@univ-valenciennes.

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes donsez@univ-valenciennes. Les Triggers SQL Didier DONSEZ Université de Valenciennes Institut des Sciences et Techniques de Valenciennes donsez@univ-valenciennes.fr 1 Sommaire Motivations Trigger Ordre Trigger Ligne Condition Trigger

Plus en détail

Introduction à JDBC. Accès aux bases de données en Java

Introduction à JDBC. Accès aux bases de données en Java Introduction à JDBC Accès aux bases de données en Java Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Introduction JDBC : Java Data Base Connectivity

Plus en détail

Exercices sur SQL server 2000

Exercices sur SQL server 2000 Exercices sur SQL server 2000 La diagramme de classe : Exercices sur SQL server 2000 Le modèle relationnel correspondant : 1 Créer les tables Clic-droit on Tables et choisir «New Table» Créer la table

Plus en détail

Auto-évaluation Oracle: cours de base

Auto-évaluation Oracle: cours de base Auto-évaluation Oracle: cours de base Document: F0475Test.fm 14/01/2008 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION ORACLE: COURS DE

Plus en détail

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Partie 0 : Gestion des tablespace et des utilisateurs... 3 Sommaire Partie 0 : Gestion des tablespace et des utilisateurs... 3 1- Créer deux TableSpaces votre_nom-tbs et Votre_nom-TempTBS :... 3 2. Créer un utilisateur qui porte votre nom :... 3 3. Attribuer à

Plus en détail

I4 : Bases de Données

I4 : Bases de Données I4 : Bases de Données Passage de UML au modèle relationnel Georges LOUIS Département Réseaux et Télécommunications Université de La Rochelle Module I4 2008-2009 1 G.Louis Sommaire 1 Des classes aux tables

Plus en détail

Introduction aux Bases de Données 2004/2005

Introduction aux Bases de Données 2004/2005 Introduction aux Bases de Données 2004/2005 Chapitre 6: Le langage SQL Ecole Nationale Supérieur de Physique de Strasbourg Christian Wolf christian.wolf@ensps.u-strasbg.fr 6.1 Stockage physique Film numfil

Plus en détail

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche (sebastien@nameche.fr)

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche (sebastien@nameche.fr) Support de cours Introduction à SQL et MySQL 2003, Sébastien Namèche (sebastien@nameche.fr) Licence de Libre Diffusion des Documents -- LLDD version 1 (Par Bernard Lang, http://pauillac.inria.fr/~lang/licence/lldd.html)

Plus en détail

Modélisation et Gestion des bases de données avec mysql workbench

Modélisation et Gestion des bases de données avec mysql workbench Modélisation et Gestion des bases de données avec mysql workbench par novembre 2011 Table des matières 1 Installation 3 1.1 Ecran de chargement 3 1.2 Page d accueil 3 2 Réalisation d une base de données

Plus en détail

Gestion des utilisateurs et de leurs droits

Gestion des utilisateurs et de leurs droits Gestion des utilisateurs et de leurs droits Chap. 12, page 323 à 360 Lors de la création d'un utilisateur vous devez indiquer son nom, ses attributs, son profil, la méthode d'authentification (par le SE

Plus en détail

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010 ORACLE 10G DISTRIBUTION ET REPLICATION Distribution de données avec Oracle G. Mopolo-Moké prof. Associé UNSA 2009/ 2010 1 Plan 12. Distribution de données 12.1 Génération des architectures C/S et Oracle

Plus en détail

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

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL Cours PL/SQL Langage propre à Oracle basé sur ADA Offre une extension procédurale à SQL PL/SQL permet d utiliser un sous-ensemble du langage SQL des variables, des boucles, des alternatives, des gestions

Plus en détail

Gestion de base de données

Gestion de base de données Université Libre de Bruxelles Faculté de Philosophie et Lettres Département des Sciences de l Information et de la Communication Gestion de base de données Projet : Take Off ASBL Cours de M. A. Clève STIC-B-505

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail

Bases de données et sites WEB

Bases de données et sites WEB Bases de données et sites WEB Cours2 : Sécurité et contrôles d accès Anne Doucet 1 Authentification Autorisation Privilèges Rôles Profils Limitations de ressources Plan Audit Contrôle d accès via les vues

Plus en détail

Procédures Stockées WAVESOFT... 12 ws_sp_getidtable... 12. Exemple :... 12. ws_sp_getnextsouche... 12. Exemple :... 12

Procédures Stockées WAVESOFT... 12 ws_sp_getidtable... 12. Exemple :... 12. ws_sp_getnextsouche... 12. Exemple :... 12 Table des matières Les Triggers... 2 Syntaxe... 2 Explications... 2 Les évènements déclencheurs des triggers... 3 Les modes de comportements des triggers... 4 Les pseudo tables... 5 Exemple... 6 Les procédures

Plus en détail

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

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

LES TYPES DE DONNÉES DU LANGAGE PASCAL

LES TYPES DE DONNÉES DU LANGAGE PASCAL LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.

Plus en détail

ISC21-1 --- Système d Information Architecture et Administration d un SGBD Compléments SQL

ISC21-1 --- Système d Information Architecture et Administration d un SGBD Compléments SQL ISC21-1 --- Système d Information Architecture et Administration d un SGBD Compléments SQL Jean-Marie Pécatte jean-marie.pecatte@iut-tlse3.fr 16 novembre 2006 ISIS - Jean-Marie PECATTE 1 Valeur de clé

Plus en détail

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées ANNEE 2014 / 2015 Désignation de l enseignement : Bases de données Nom du document : TP SQL sous PostgreSQL Rédacteur :

Plus en détail

Cours Bases de données 2ème année IUT

Cours Bases de données 2ème année IUT Cours Bases de données 2ème année IUT Cours Bilan : Des vues à PL/SQL corrigé Anne Vilnat http://www.limsi.fr/individu/anne/cours Plan 1 Cas exemple 2 Les tables... 3 Vues et index 4 Privilèges 5 Fonctions

Plus en détail

TP Contraintes - Triggers

TP Contraintes - Triggers TP Contraintes - Triggers 1. Préambule Oracle est accessible sur le serveur Venus et vous êtes autorisés à accéder à une instance licence. Vous utiliserez l interface d accés SQL*Plus qui permet l exécution

Plus en détail

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES Dossier G11 - Interroger une base de données La base de données Facturation contient tout un ensemble d'informations concernant la facturation de la SAFPB (société anonyme de fabrication de produits de

Plus en détail

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2 Débuter avec EXPRESS Alain Plantec Table des matières 1 Schema 2 2 Entité 2 2.1 Attributs simples................................................ 2 2.2 Attributs collection...............................................

Plus en détail

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

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble. Gaëlle PERRIN SID2 Grenoble Le 10/04/2014 Base de Données (BD) : une grande quantité de données, centralisées ou non, servant pour les besoins d'une ou plusieurs applications, interrogeables et modifiables

Plus en détail

Compétences Business Objects - 2014

Compétences Business Objects - 2014 Compétences Business Objects - 2014 «Mars-Juin 2014. Réf : Version 1 Page 1 sur 34 Sommaire CONTEXTE DE LA REMISE A NIVEAU EN AUTOFORMATION... 3 1. MODELISATION... 4 1.1 DESCRIPTION FONCTIONNEL DE L'APPLICATION

Plus en détail

Optimisation de MySQL

Optimisation de MySQL Olivier DASINI Optimisation de MySQL http://dasini.net/blog/ 1 Votre conférencier Olivier DASINI Formateur certifié MySQL Consultant technologies Open Sources olivier@dasini.net 2 Au programme... Introduction

Plus en détail

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

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin Objectifs : Apprendre à l apprenant à lancer un serveur local «Apache» Apprendre à l'apprenant à lancer un serveur MySQL

Plus en détail

OpenPaaS Le réseau social d'entreprise

OpenPaaS Le réseau social d'entreprise OpenPaaS Le réseau social d'entreprise Spécification des API datastore SP L2.3.1 Diffusion : Institut MinesTélécom, Télécom SudParis 1 / 12 1OpenPaaS DataBase API : ODBAPI...3 1.1Comparaison des concepts...3

Plus en détail

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

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles) SGBDR Systèmes de Gestion de Bases de Données (Relationnelles) Plan Approches Les tâches du SGBD Les transactions Approche 1 Systèmes traditionnels basés sur des fichiers Application 1 Gestion clients

Plus en détail

Ora2Pg Performances. (C) 2013 Gilles Darold

Ora2Pg Performances. (C) 2013 Gilles Darold Ora2Pg Performances (C) 2013 Gilles Darold Gilles Darold Consultant @ Dalibo Auteur d'ora2pg Auteur de PgBadger Auteur de pgformatter Et autres => http://www.darold.net/ Cas pratique Migration d'une base

Plus en détail

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

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 Plan Bases de Données L3 Info Céline Rouveirol 2010-2011 Bases de Données 1 / 77 Sources des transparents Bases de Données 2 / 77 Bases de SQL - M.P. Dorville/F. Goasdoué, LRI, Université Paris Sud - V.

Plus en détail

Application web de gestion de comptes en banques

Application web de gestion de comptes en banques Application web de gestion de comptes en banques Objectif Réaliser une application Web permettant à un client de gérer ses comptes en banque Diagramme de cas d'utilisation 1 Les cas d'utilisation Connexion

Plus en détail

Créer une base de données

Créer une base de données Access Créer une base de données SOMMAIRE Généralités sur les bases de données... 3 Création de la base de données... 4 A) Lancement d'access... 4 B) Enregistrement de la base de données vide... 4 Création

Plus en détail

420-PK6-SL Banques de données Avancées UTILISATEURS

420-PK6-SL Banques de données Avancées UTILISATEURS 420-PK6-SL Banques de données Avancées Gestion des UTILISATEURS RÈGLES DE NOMENCLATURE Un UTILISATEUR Oracle est : Une connexion à Oracle Un nom de connexion"login" Un détenteur de droits et privilèges

Plus en détail

Informatique Générale

Informatique Générale Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) guillaume.hutzler@ibisc.univ-evry.fr Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html

Plus en détail

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste Christian Soutou Avec la participation d Olivier Teste SQL pour Oracle 4 e édition Groupe eyrolles, 2004, 2005, 2008, 2010, is BN : 978-2-212-12794-2 Partie III SQL avancé La table suivante organisée en

Plus en détail

Mejdi BLAGHGI & Anis ASSÈS

Mejdi BLAGHGI & Anis ASSÈS Ministère de l Enseignement Supérieur, de la Recherche Scientifique et de la Technologie Direction Générale des Etudes Technologiques Institut Supérieur des Etudes Technologiques de Djerba Support de Cours

Plus en détail

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

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 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 IRI IUT A / Département GEII 2 TABLE DES MATIÈRES A)

Plus en détail

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

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications P.-A. Sunier, HEG-Arc Neuchâtel avec le concours de J. Greub pierre-andre.sunier@he-arc.ch http://lgl.isnetne.ch/

Plus en détail

Les bases de données

Les bases de données Les bases de données Introduction aux fonctions de tableur et logiciels ou langages spécialisés (MS-Access, Base, SQL ) Yves Roggeman Boulevard du Triomphe CP 212 B-1050 Bruxelles (Belgium) Idée intuitive

Plus en détail

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

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS 1. Introduction Nous allons aborder la notion de surcouche procédurale au sein des SGBDS relationnels tels que Oracle (PLSQL)

Plus en détail

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

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Présentation du module Base de données spatio-temporelles

Présentation du module Base de données spatio-temporelles Présentation du module Base de données spatio-temporelles S. Lèbre slebre@unistra.fr Université de Strasbourg, département d informatique. Partie 1 : Notion de bases de données (12,5h ) Enjeux et principes

Plus en détail

LE LANGAGE SQL2 1. INTRODUCTION

LE LANGAGE SQL2 1. INTRODUCTION LE LANGAGE SQL2 1. INTRODUCTION Les serveurs de données relationnels présentent aujourd hui une interface externe sous forme d un langage de recherche et mise à jour, permettant de spécifier les ensembles

Plus en détail

1. Base de données SQLite

1. Base de données SQLite Dans ce TP, nous allons voir comment créer et utiliser une base de données SQL locale pour stocker les informations. La semaine prochaine, ça sera avec un WebService. On repart de l application AvosAvis

Plus en détail

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres. INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES Durée : 1h30 Date : 17/05/2006 Coordonnateurs : Amel Bouzeghoub et Bruno Defude Documents autorisés : ceux distribués en cours Avertissements

Plus en détail

Traitement de texte : Quelques rappels de quelques notions de base

Traitement de texte : Quelques rappels de quelques notions de base Traitement de texte : Quelques rappels de quelques notions de base 1 Quelques rappels sur le fonctionnement du clavier Voici quelques rappels, ou quelques appels (selon un de mes profs, quelque chose qui

Plus en détail

Mysql. Les requêtes préparées Prepared statements

Mysql. Les requêtes préparées Prepared statements Mysql Les requêtes préparées Prepared statements Introduction Les prepared statements côté serveur sont une des nouvelles fonctionnalités les plus intéressantes de MySQL 4.1 (récemment sorti en production

Plus en détail

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

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Contenu de ce cours : 1. Stockage de données. Supports, fonctionnement d un disque, technologie RAID 2. Organisation

Plus en détail

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

Intégrité sémantique dans les bases de données relationnelles Intégrité sémantique dans les bases de données relationnelles 1 - Intégrité sémantique Bernard ESPINASSE Professeur à Aix-Marseille Université (AMU Ecole Polytechnique Universitaire de Marseille Fev. 2013

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW Groupe : 322 Exploitation des Banques de données 420-PK6-SL (1-2-1) Étape : 3 Professeur Nom: Marcel Aubin Courriel : maubin@cegep-st-laurent.qc.ca

Plus en détail

MODE OPERATOIRE OPENOFFICE BASE

MODE OPERATOIRE OPENOFFICE BASE MODE OPERATOIRE OPENOFFICE BASE Openoffice Base est un SGBDR : Système de Gestion de Base de Données Relationnelle. L un des principaux atouts de ce logiciel est de pouvoir gérer de façon efficace et rapide

Plus en détail

SOMMAIRE. Travailler avec les requêtes... 3

SOMMAIRE. Travailler avec les requêtes... 3 Access Les requêtes SOMMAIRE Travailler avec les requêtes... 3 A) Créer une requête sélection en mode QBE... 3 B) Exécuter une requête à partir du mode Modifier (QBE)... 3 C) Passer du mode Feuille de

Plus en détail

Intégrité des données

Intégrité des données . Contraintes d intégrité : Définition et objectif Intégrité des données Définition des contraintes Vérification des contraintes Contrainte d'intégrité : propriété sémantique que doivent respecter les

Plus en détail

Table des matières 1 DISASTER RECOVERY... 2 1.1 SAUVEGARDER... 4 1.2 RESTAURER... 21 1.3 BASE DE DONNÉS "SUSPECT"... 28

Table des matières 1 DISASTER RECOVERY... 2 1.1 SAUVEGARDER... 4 1.2 RESTAURER... 21 1.3 BASE DE DONNÉS SUSPECT... 28 Table des matières 1 DISASTER RECOVERY... 2 1.1 SAUVEGARDER... 4 1.2 RESTAURER... 21 1.3 BASE DE DONNÉS "SUSPECT"... 28 2011 Hakim Benameurlaine 1 1 DISASTER RECOVERY Physiquement, les bases de données

Plus en détail

A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES? BASE DE DONNÉES OBJET Virginie Sans virginie.sans@irisa.fr A QUOI SERVENT LES BASES DE DONNÉES? Stockage des informations : sur un support informatique pendant une longue période de taille importante accès

Plus en détail

Bases de données Cours 4 : Le langage SQL pour ORACLE

Bases de données Cours 4 : Le langage SQL pour ORACLE Cours 4 : Le langage SQL pour ORACLE POLYTECH Université d Aix-Marseille odile.papini@univ-amu.fr http://odile.papini.perso.esil.univmed.fr/sources/bd.html Plan du cours 1 Introduction 2 Identificateurs

Plus en détail

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

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012 Initiation à SQL Le langage de communication avec une base de données relationnelles Application avec PostgreSQL Nathalie Camelin 2011/2012 Université du Maine Institut Claude Chappe D'après Levy Estève

Plus en détail

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS) PHP et mysql php_mysql PHP et mysql Code: php_mysql Originaux url: http://tecfa.unige.ch/guides/tie/html/php-mysql/php-mysql.html url: http://tecfa.unige.ch/guides/tie/pdf/files/php-mysql.pdf Auteurs et

Plus en détail

SQL Server 2000, Analysis Services et DTS

SQL Server 2000, Analysis Services et DTS SQL Server 2000, Analysis Services et DTS Cyril Gruau 4 mars 2004 Résumé Ce support de cours regroupe quelques notions concernant la l implémentation et le développement de bases de données avec le langage

Plus en détail