Table des matières
Dernière mise-à-jour : 2020/01/30 03:27
105.3 - Gérer des données avec SQL (4/60)
SQL
Chaînes de caractères
Les chaînes de caractères doivent être entourées de ' ou de “.
Exemples
'Linux est incroyable'
“Windows est …….”
“Je lui dit : ”“Je t'aime””“
Nombres
Il existe 3 types de nombres :
Nombres Entiers
Une séquence de chiffres sans espaces
Exemple
999256
0
Nombres Décimaux
Utilisent le point comme séparateur.
Exemple
120.54
5566.8956e+12
Nombres Négatifs
Sont précédés par le signe -.
Exemple
-458
-147.36
Valeurs NULL
Une chaîne sans données.
<note warning> N'est pas la même chose qu'une chaîne vide ou un 0 dans le cas d'un nombre. </note>
Noms de Fichiers
Les noms de bases, tables et colonnes :
- peuvent contenir jusqu'à 64 caractères
- peuvent commencer par un chiffre
- ne peuvent pas contenir que de chiffres
- ne peuvent pas contenir un /, une \ ou un point
Les alias :
- peuvent contenir jusqu'à 255 caractères
- peuvent contenir un /, une \ ou un point
Variables Utilisateurs
Les variables n'ont pas besoin d'être initialisées. Elles sont automatiquement crées avec la valeur NULL.
Commentaires
Les commentaires d'une ligne sont précédés par le caractère # ou - -.
Les commentaires sous plusieurs lignes sont entourés comme suit :
/* Ceci est un commentaire sur plusieurs lignes */
Commandes
SELECT
Obtenir un ensemble de données à partir d'une ou de plusieurs tables.
Syntaxe
SELECT [table.][colonne]|expression [AS nom][,[table.[colonne] FROM nom-table [, nom_table ...] [WHERE condition [AND|OR condition ...] [GROUP BY [table.][colonne],[table].[colonne] ...] [ORDER BY [table.][colonne][Description],[table].[colonne] ...]
Exemples
SELECT nom, prenom FROM familles ORDER BY nom
SELECT nom, prenom FROM familles GROUP BY ville
UPDATE
Mettre à jour des données dans une table.
Syntaxe
UPDATE [LOW_PRIORITY][IGNORE] nom_table SET colonne = expression WHERE expression ORDER BY expression LIMIT valeur
Directive | Description |
---|---|
LOW_PRIORITY | L'opération se fera quand la table n'est pas utilisée par un client |
IGNORE | La mise à jour continue malgré des problèmes éventuels rencontrés. Les enregistrements posant problème ne seront PAS mis à jour |
Exemples
UPDATE familles SET Adresse2='*******', nb_enfants=2;
UPDATE familles SET nb_enfants=8 ORDER BY Nom LIMIT 3;
DELETE FROM
Supprimer des enregistrements d'une table.
Syntaxe
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM nom_table [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]
Exemple
DELETE FROM familles WHERE Nom = Durant;
DROP TABLE
Syntaxe
DROP DATABASE [IF EXISTS] db_name
Supprimer une table d'une base de données.
Exemple
DROP TABLE Test;
INSERT
Syntaxe
INSERT [LOW_PRIORITY] | [DELAYED] [IGNORE] [INTO] nom_table [(nom_colonne ...)] VALUES ((expression | DEFAULT) ...) , (...)
ou
INSERT [LOW_PRIORITY] | [DELAYED] [IGNORE] [INTO] nom_table [(nom_colonne ...)] SELECT ...
Directive | Description |
---|---|
LOW_PRIORITY | L'opération se fera quand la table n'est pas utilisée par un client |
DELAYED | Permet à un client d'utiliser la table sans attendre la fin de l'opération |
IGNORE | La mise à jour continue malgré des problèmes éventuels rencontrés. Les enregistrements posant problème ne seront PAS mis à jour |
INSERT VALUES
Insérer des valeurs dans une table.
Exemple
INSERT INTO familles (Nom, Prenom) VALUES ('Smith', 'John');
INSERT SELECT
Insérer des valeurs en provenance d'une autre table dans la table cible.
Exemple
INSERT INTO familles (Prenom) SELECT enfants.prenom FROM enfants;
ALTER
Ajouter, supprimer ou modifier une colonne, index ou nom de table.
ALTER ADD
Commande | Description |
---|---|
ADD [COLUMN] | Ajouter un champ |
ADD INDEX | Ajouter un index |
ADD PRIMARY KEY | Ajouter une clef primaire |
ADD UNIQUE | Ajouter un index unique |
ADD FULLTEXT | Ajouter une recherche texte entier |
Exemples
ALTER TABLE familles ADD Sports VARCHAR(50) NOT NULL;
ALTER TABLE familles ADD INDEX (Sports);
ALTER CHANGE
Permet de modifier le nom ou le type d'une colonne.
Exemple
ALTER TABLE familles CHANGE PrenomPere Prenom_Pere VARCHAR(45) NOT NULL;
ALTER DROP
Commande | Description |
---|---|
DROP [COLUMN] | Supprimer un champ |
DROP INDEX | Supprimer un index |
DROP PRIMARY KEY | Supprimer une clef primaire |
Exemple
ALTER TABLE familles DROP Sports;
ALTER KEYS
Permet de désactiver la clef primaire momentanément.
Exemples
ALTER TABLE familles DISABLE KEYS;
ALTER TABLE familles ENABLE KEYS;
ALTER RENAME
Permet de renommer une table.
Exemple
ALTER TABLE enfants RENAME familles_enfants;
ALTER ORDER BY
Permet de reclasser physiquement une table.
Exemple
ALTER TABLE familles ORDER BY Prenom_Pere;
MATCH
Permet la recherche d'un mot, d'une phrase ou d'une expression sur un texte entier
Exemple
SELECT * FROM familles WHERE MATCH (Commentaire) AGAINST ('fleuve');
Opérateurs
Mathémathiques
Nom | Description |
---|---|
+ | Addition |
- | Soustraction |
* | Multiplication |
/ | Division |
() | Le calcul entre parenthèses est effectué en priorité |
Logiques
Nom | Description |
---|---|
! | NON |
|| | OU |
&& | ET |
XOR | XOR exclusif |
Comparaison
Nom | Description |
---|---|
= | Egal |
!= ou <> | Non égal |
< | Inférieur |
< = | Inférieur ou égal |
> | Supérieur |
> = | Supérieur ou égal |
< = > | Egal gérant la nullité |
IS NULL | Nullité |
IS NOT NULL | Non nullité |
Fonctions
Mathémathiques
Nom | Description |
---|---|
ABS(nbr) | Valeur absolue de nbr |
SIGN(nbr) | -1 0 ou 1 en fonctionne du signe de nbr |
MOD(nbr1, nbr2) | Indique le reste de la division de nbr1 par nbr2 |
FLOOR(nbr) | Indique le plus grande nombre entier inférieur à nbr |
CEILING(nbr) | Indique la plus petite valeur entière supérieure à nbr |
ROUND(nbr) | Indique l'arrondi entier le plus proche de nbr |
ROUND(nbr,D) | Indique l'arrondi à D décimales plus plus proche de nbr |
EXP(nbr) | Indique l'exponentielle de nbr |
POW(nbr,nbr2) | indique nbr à la puissance nbr2 |
SQRT(nbr) | Indique la racine carrée de nbr |
PI() | Indique la valeur de PI |
COS(nbr) | Indique le cosinus de nbr |
ACOS(nbr) | Indique l'arc cosinus de nbr |
SIN(nbr) | Indique le sinus de nbr |
ASIN(nbr) | Indique l'arc sinus de nbr |
TAN(nbr) | Indique le tangent de nbr |
ATAN(nbr) | Indique l'arc tangent de nbr |
COT(nbr) | Indique la cotangente de nbr |
RAND() | Indique une valeur en virgule flottante entre 0 et 1.0 |
RAND(nbr) | Indique une valeur en virgule flottante entre 0 et 1.0. La valeur de nbr indique la limite haute |
LEAST(nbr1, nbr2 …) | Indique le plus petit des nombres nbr1 à nbrX |
GREATEST(nbr1, nbr2 …) | Indique le plus grand des nombres nbr1 à nbrX |
DEGREES(nbr) | Convertit nbr de gradiants vers degrés |
RADIANS(nbr) | Convertit nbr de degrés vers gradiants |
TRUNCATE(nbr,D) | Indique nbr tronqué à D décimales |
Chaînes
Nom | Description |
---|---|
LIKE | Effectue une comparaison en fonction d'un motif |
NOT LIKE | L'inverse de LIKE |
_ | Remplace un caractère dans le motif d'une chaîne |
% | Remplace un ou plusieurs caractère(s) dans le motif d'une chaîne |
\ | Caractère d'échappement |
BINARY | Rend la comparaison avec un motif sensible à la casse |
STRCMP(chaîne1, chaîne2) | Compare deux chaînes. Retourne -1 si chaîne 1 < chaîne 2. Retourne 0 si chaîne 1 = chaîne 2. Retourne 1 si chaîne 1 > chaîne 2. |
MATCH | Utilisé pour des recherches de texte intégral |
UPPER('chaîne') | Transforme les minuscules en majuscules |
LOWER('chaîne') | Transforme les majuscules en majuscules |
Dates
Nom | Description |
---|---|
NOW() | Retourne la date au format 'AAAA-MM-JJ HH:MM:SS' |
DATE_FORMAT(date,format) | Retourne la date selon le format spécifié |
DAYOFWEEK(date) | Retourne un chiffre qui représente le jour de la semaine ( 1 pour dimanche, 7 pour samedi ) |
WEEKDAY(date) | Retourne un chiffre qui représente le jour de la semaine ( 7 pour dimanche, 0 pour lundi ) |
DAYOFMONTH(date) | Retourne un chiffre de 1 à 31 |
DAYOFYEAR(date) | Retourne un chiffre de 1 à 366 |
MONTH(date) | Retourne un chiffre de 1 à 12 |
DAYNAME(date) | Retourne le nom du jour ( lundi, mardi … ) |
MONTHNAME(date) | Retourne le nom du mois |
QUARTER(date) | Retourne un chiffre de 1 à 4 ( 1 = premier trimestre de l'année ) |
WEEK(date [,depart] | Retourne une valeur de 1 à 52. La valeur de depart peut être 0 ou 1. Dans le cas de 0, le dimanche est considéré comme le premier jour de la semaine. Dans le cas de 1, c'est le lundi. |
YEAR(date) | Retourne un chiffre de 1000 à 9999 |
HOUR(date) | Retourne l'heure |
MINUTE(date) | Retourne les minutes |
SECOND(date) | Retourne les secondes |
TO_DAYS(date) | Retourne le nombre de jours écoulés depuis le début de l'an 0 |
FROM_DAYS(date) | Retourne la date à partir d'un nombre de jours écoulés depuis le début de l'an 0 |
CURDATE() | Retourne la date courante au format AAAA-MM-JJ |
CURRENT_DATE() | Retourne la date courante au format AAAA-MM-JJ |
CURTIME() | Retourne la date courante au format HH:MM:SS |
CURRENT_TIME() | Retourne la date courante au format HH:MM:SS |
UNIX_TIMESTAMP([date]) | Retourne le nombre de secondes depuis la date 1970-01-01 00:00:00 |
FROM_UNIXTIME(unix_timestamp[,format]) | Retourne la date en fonction d'un nombre de secondes depuis la date 1970-01-01 00:00:00 |
Motifs
Nom | Description | Exemple |
---|---|---|
%M | Le mois | janvier |
%W | Le jour de la semaine | lundi |
%D | La date du mois | 1st |
%Y | L'année | 2009 |
%y | L'année | 09 |
%a | L'abréviation du jour | lun |
%d | Le jour du mois | 01 |
%m | Le numéro du mois | 01 |
%b | L'abréviation du mois | lun |
%j | Le jour de l'année | 031 |
%H | L'heure | 00 |
%h | L'heure | 12 |
%i | Les minutes | 05 |
%r | L'heure au format américain | 11:01:00 PM |
%T | L'heure au format 24 heures | 23:01:00 |
%S | Les secondes | 06 |
%p | AM ou PM | PM |
%w | Le numéro du jour de la semaine | 0 (=dimanche) |
%U | Le numéro de la semaine avec le début de la semaine étant un dimanche | 03 |
%u | Le numéro de la semaine avec le début de la semaine étant un lundi | 02 |
Par exemple :
mysql> select DATE_FORMAT(now(), '%W %d %M %Y'); +-----------------------------------+ | DATE_FORMAT(now(), '%W %d %M %Y') | +-----------------------------------+ | Friday 19 October 2012 | +-----------------------------------+ 1 row in set (0.00 sec) mysql>
Contrôle
Nom | Description |
---|---|
IF(exp1, exp2, exp3) | Si exp1 est vrai, exp2 est retournée sinon exp3 est retournée |
IFNULL(exp1,exp2) | Si exp1 est NULL, exp2 est retournée sinon exp1 est retournée |
NULLIF(exp1,exp2) | Si exp1 = exp2, NULL est retournée sinon exp1 est retournée |
CASE value WHEN comp1 THEN res1 [WHEN comp2 THEN res2][ELSE elseres] END | La fonction compare value à comp1 ( comp2 … ). Si une égalité est trouvée, res1 ( res2 … ) est retournée. Si aucune égalité n'est trouvée, elseres est retournée |
Agrégation
Nom | Description |
---|---|
AVG(colonne) | Moyenne de la colonne |
COUNT(items) | Le nombre de valeurs non nulles de la colonne |
MIN(colonne) | Valeur minimum de la colonne |
MAX(colonne) | Valeur maximum de la colonne |
STD(colonne) | Écart type des valeurs de la colonne |
SUM(colonne) | Somme des valeurs de la colonne |
BIT_OR(colonne) | Ou logique effectué sur les valeurs de la colonne |
BIT_AND(colonne) | ET logique effectué sur les valeurs de la colonne |
Autres
Nom | Description |
---|---|
CAST(expression) CONVERT(expression) | Convertit l'expression vers le type demandé - BINARY, DATE, DATETIME, SIGNED, TIME, UNSIGNED |
LAST_INSERT_ID() | Retourne la valeur d'une colonne AUTO_INCREMENT lors du dernier insertion |
VERSION() | La version du serveur MySQL |
CONNECTION_ID() | L'identifiant du thread de la connexion courante |
DATABASE() | La base de données courante |
USER() | L'utilisateur courant |
PASSWORD(chaîne) | Encrypte un mot de passe |
ENCRYPT(chaîne, [,force]) | Encrypte un mot de passe avec la fonction crypt d'Unix |
ENCODE(chaîne,mdp) | Encode la chaîne avec le mot de passe mdp |
DECODE(chaîne,mdp) | Décode la chaîne avec le mot de passe mdp |
MD5(chaîne) | Retourne une chaîne encodée à la norme MD5 |
SHA1() | Retourne une chaîne encodée à la norme SHA1 |
Types de Champs
Nombres entiers
Type | Intervalle | Taille en octets | Description |
---|---|---|---|
TINYINT[(M)] | -127 à 128 | 1 | Entiers très courts |
TINYINT[(M)] UNSIGNED | 0 à 255 | 1 | Entiers très courts |
SMALLINT[(M)] | -32 768 à 32 767 | 2 | Entiers courts |
SMALLINT[(M)] UNSIGNED | 0 à 65 535 | 2 | Entiers courts |
MEDIUMINT[(M)] | - 8 388 608 à 8 388 607 | 3 | Entiers de taille moyenne |
MEDIUMINT[(M)] UNSIGNED | 0 16 777 215 | 3 | Entiers de taille moyenne |
INT[(M)] | -231 à 231 - 1 | 4 | Entiers |
INT[(M)] UNSIGNED | 0 à 232 - 1 | 4 | Entiers |
INTEGER[(M)] | - | - | Synonyme de INT |
BIGINT[(M)] | -263 à 263 - 1 | 8 | Entiers larges |
BIGINT[(M)] UNSIGNED | 0 à 264 - 1 | 8 | Entiers larges |
Nombres à virgule flottante
Type | Intervalle | Taille en octets | Description |
---|---|---|---|
FLOAT(precision) | Varie selon precision | Varie | < =24 pour un nombre en simple précision ou >24 et < =53 pour un nombre ne double précision |
FLOAT[(M,D)] | + ou - 1.175494351E-38 à + ou - 3.402823466E+38 | 4 | Simple précision |
DOUBLE[(M,D)] | + ou - 1.7976931348623157E+308 à + ou - 2.2250738585072014E-308 | 8 | Double précision |
DOUBLEPRECISION[(M,D)] | - | - | Synonyme de DOUBLE[(M,D)] |
REAL[(M,D)] | - | - | Synonyme de DOUBLE[(M,D)] |
DECIMAL[(M[,D])] | Varie | M +2 | Nombre à virgule flottante |
NUMERIC | - | - | Synonyme de DECIMAL |
Dates et Heures
Type | Intervalle |
---|---|
DATE | 1000-01-01 à 9999-12-31 |
TIME | -838:59:59 à 838:59:59 |
DATETIME | 1000-01-01 00:00:00 à 9999-12-31 23:59:59 |
TIMESTAMP[(M)] | Voir tableau ci-dessous |
YEAR[(2)] | 70 à 69 (1970 à 2069) |
YEAR[(4)] | 1901 à 2155 |
Types de données TIMESTAMP
Type | Affichage |
---|---|
TIMESTAMP | YYYYMMDDHHMMSS |
TIMESTAMP(14) | YYYYMMDDHHMMSS |
TIMESTAMP(12) | YYMMDDHHMMSS |
TIMESTAMP(10) | YYMMDDHHMM |
TIMESTAMP(8) | YYYYMMDD |
TIMESTAMP(6) | YYMMDD |
TIMESTAMP(4) | YYMM |
TIMESTAMP(2) | YY |
Chaînes
Type | Longeur | Description |
---|---|---|
CHAR(M) | 1 à 255 | Chaîne de longueur fixe où M varie entre 1 et 255 |
VARCHAR(M) | 1 à 255 | Chaîne de longueur variable où M varie entre 1 et 255 |
TEXT et BLOB
- TEXT,
- TEXT respecte la casse des données,
- BLOB (Binary Large OBject),
- BLOB permet de stocker toute information binaire telle une image ou un son.
Type | Longueur Maximale en caractères | Description |
---|---|---|
TINYBLOB | 255 | Objet binaire court |
TINYTEXT | 255 | Texte court |
BLOB | 65 535 | Objet binaire de taille normale |
TEXT | 65 535 | Texte de taille normale |
MEDIUM BLOB | 16 777 215 | Objet binaire de taille moyenne |
MEDIUM TEXT | 16 777 215 | Texte de taille moyenne |
LONG BLOB | 4 294 967 295 | Objet binaire de grande taille |
LONG TEXT | 4 294 967 295 | Texte de grande taille |
ENUM et SET
- ENUM,
- permet de prendre une valeur ou NULL parmi une liste de valeurs prédéfinies à la création de la colonne,
- SET
- permet de prendre un maximum de 64 valeurs ou NULL parmi une liste de valeurs prédéfinies à la création de la colonne,
Type | Maximum des valeurs dans l'ensemble | Description |
---|---|---|
ENUM('valeur1','valeur2',…) | 65 535 | Les valeurs de ce type ne peuvent contenir qu'une seule des valeurs de la liste ou NULL |
SET('valeur1','valeur2',…) | 64 | Les valeurs de ce type ne peuvent contenir un ensemble des valeurs de la liste ou NULL |
Types de Moteurs de Stockage
Le type de moteur est spécifié lors de la création de la table. Le moteur d'une table existant peut être modifié avec la commande ALTER TABLE. Les différents types principaux sont résumés ci-après :
Type de Moteur | Description |
---|---|
InnoDB | Le format par défaut. Supportent les transactions sécurisées avec COMMIT et ROLLBACK. Permet de verrouiller des enregistrements un-à-un au lieu de la table entière. |
MyISAM | Données stockées dans un fichier .MYD. Index stockés dans un fichier .MYI. Structure da la table stockée dans un fichier .frm |
MEMORY | Anciennement connues sous le nom HEAP. Les données sont stockées en mémoire tandis que la structure de la table est stockée sur disque dans un fichier .frm. Ne supportent pas les champs TEXT, BLOB. Ne supportent pas l'attribut AUTO_INCREMENT. Utilisé pour augmenter la vitesse de traitement d'une requête. |
ARCHIVE | Ne supportent que des requêtes de lecture et d'insertion. Utilisé pour stocker des données des journaux d'application. Structure stockée dans un fichier .frm. Données stockées dans un fichier .ARZ. Métadonnées sont stockées dans un fichier .ARM |
CSV | Données sont stockées dans un fichier texte au format CSV. Utilisé pour échanger des données avec d'autres applications. Structure stockée dans un fichier .frm. Données stockées dans un fichier .CSV. |
FEDERATED | Ne stocke pas de données. Extrait des données de tables en provenance de bases sur des serveurs distants. |
Bien que possible techniquement, il n'est pas préférable d'utiliser des types de moteurs différents dans la même base de données car ceci complique la tâche d'optimisation, augmente le nombre de buffers et de caches et complexifie le travail de l'administrateur.
Le choix d'un moteur de stockage se fait en fonction de l'adéquation entre les besoins et les caractéristiques suivants :
Moteur | Verrous | Transactionnel de type ACID | MVCC | Clef Etrangère | Données sur Disque | Sauvegarde à Chaud | COMMIT | ROLLBACK | Crash Recovery |
---|---|---|---|---|---|---|---|---|---|
InnoDB | Enregistrement | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui |
MyISAM | Table | Non | Non | Non | Oui | Non | Non | Non | Non |
Memory | Table | Non | Non | Non | Non | Non | Non | Non | Non |
Archive | Enregistrement | Non | Non | Non | Oui | Non | Non | Non | Non |
CSV | Table | Non | Non | Non | Oui | Non | Non | Non | Non |
Federated | Table | Non | Non | Non | Oui | Non | Non | Non | Non |
NDB Cluster | Enregistrement | Oui | Non | Oui | Oui | Oui | Oui | Oui | Oui |
Jointures
Les jointures permettent de créer un lien entre deux tables. Le champ utilisé pour la jointure dans la première table est souvent la clef primaire. Le champs utilisé dans la deuxième table est appelé le clef étrangère. La clef primaire et la clef étrangère doivent être du même type.
Dans le cas où on utilise un champs autre que la clef primaire pour assurer la jointure, cet autre champs doit être indexé.
FULL JOIN
Ce type de jointure permet de renvoyer uniquement les enregistrements des deux tables 1 et 2 ayant une correspondance :
mysql> SELECT table1.champ1, table2.champ1 FROM table1, table2 WHERE table1.clefprimaire = table2.clefetrangere;
ou
mysql> SELECT table1.champ1, table2.champ1 FROM table1 JOIN table2 WHERE table1.clefprimaire = table2.clefetrangere;
LEFT JOIN
Ce type de jointure permet de renvoyer les enregistrements de la première table qui ont une correspondance dans la deuxième table. La syntaxe est la suivante :
mysql> SELECT table1.champ1, table2.champ1 FROM table1 LEFT JOIN table2 ON table1.clefprimaire = table2.clefetrangere;
Le résultat de cette requête est l'affichage de tous les enregistrements de la table 1 avec ou sans les enregistrements correspondants de la table 2. Dans le cas où la table 2 ne contient pas d'enregistrement correspondant un un enregistrement de la table 1, la valeur retournée est NULL. Cette information nous permet de rechercher uniquement les enregistrements dans la table1 n'ayant pas d'enregistrements dans la table 2 :
mysql> SELECT table1.champ1, table2.champ1 FROM table1 LEFT JOIN table2 ON table1.clefprimaire = table2.clefetrangere WHERE table2.clefetrangere IS NULL;
RIGHT JOIN
Ce type de jointure est l'inverse d'un LEFT JOIN.
LAB #1 - Le Langage SQL
Créez maintenant la base de données CarnetAdresses :
mysql> CREATE DATABASE `CarnetAdresses` ; Query OK, 1 row affected (0.00 sec) mysql>
Créez ensuite deux tables familles et enfants dans la base CarnetAdresses :
mysql> USE CarnetAdresses ; Database changed mysql>
mysql> CREATE TABLE familles (CodeFamille BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, Nom VARCHAR(40), -> PrenomPere VARCHAR(40) , PrenomMere VARCHAR(40) , Adresse1 VARCHAR(40) , Adresse2 VARCHAR(40), -> CodePostal VARCHAR(5), Ville VARCHAR(40), ProfPere VARCHAR(40), ProfMere VARCHAR(40)); Query OK, 0 rows affected (0.03 sec) mysql>
Pour plus de facilité, copiez simplement la requête et collez-la dans votre terminal :
- familles
CREATE TABLE familles (CodeFamille BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, Nom VARCHAR(40),\\ PrenomPere VARCHAR(40) , PrenomMere VARCHAR(40) , Adresse1 VARCHAR(40) , Adresse2 VARCHAR(40),\\ CodePostal VARCHAR(5), Ville VARCHAR(40), ProfPere VARCHAR(40), ProfMere VARCHAR(40));
mysql> CREATE TABLE Enfants ( CodeFamille BIGINT NOT NULL, Prenom VARCHAR(40) NOT NULL, -> Sexe VARCHAR(1) NOT NULL, DateNaissance DATE NOT NULL, PRIMARY KEY (CodeFamille)); Query OK, 0 rows affected (0.01 sec) mysql>
Pour plus de facilité, copiez simplement la requête et collez-la dans votre terminal :
- enfants
CREATE TABLE Enfants ( CodeFamille BIGINT NOT NULL, Prenom VARCHAR(40) NOT NULL,\\ Sexe VARCHAR(1) NOT NULL, DateNaissance DATE NOT NULL, PRIMARY KEY (CodeFamille));
Utilisez ensuite la commande SHOW pour visualiser le résultat de chaque instruction, par exemple :
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | CarnetAdresses | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql>
mysql> SHOW TABLES FROM CarnetAdresses; +--------------------------+ | Tables_in_CarnetAdresses | +--------------------------+ | Enfants | | familles | +--------------------------+ 2 rows in set (0.00 sec) mysql>
mysql> SHOW COLUMNS FROM familles FROM CarnetAdresses; +-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | CodeFamille | bigint(20) | NO | PRI | NULL | auto_increment | | Nom | varchar(40) | YES | | NULL | | | PrenomPere | varchar(40) | YES | | NULL | | | PrenomMere | varchar(40) | YES | | NULL | | | Adresse1 | varchar(40) | YES | | NULL | | | Adresse2 | varchar(40) | YES | | NULL | | | CodePostal | varchar(5) | YES | | NULL | | | Ville | varchar(40) | YES | | NULL | | | ProfPere | varchar(40) | YES | | NULL | | | ProfMere | varchar(40) | YES | | NULL | | +-------------+-------------+------+-----+---------+----------------+ 10 rows in set (0.00 sec) mysql>
mysql> SHOW INDEX FROM familles; +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | familles | 0 | PRIMARY | 1 | CodeFamille | A | 0 | NULL | NULL | | BTREE | | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 1 row in set (0.00 sec) mysql>
mysql> SHOW TABLE STATUS FROM CarnetAdresses; +----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+ | Enfants | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 0 | 9437184 | NULL | 2014-01-27 10:46:10 | NULL | NULL | latin1_swedish_ci | NULL | | | | familles | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 0 | 9437184 | 1 | 2014-01-27 10:45:39 | NULL | NULL | latin1_swedish_ci | NULL | | | +----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+ 2 rows in set (0.00 sec) mysql>
Créez les enregistrements dans la table familles :
- data
INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Durant', 'Jacques', 'Jane', '23 rue Dutor','','92200', 'Neuilly', 'Plombier',''); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Tortua', 'Benoît', 'Carole', '7 rue Verget','', '75005', 'Paris', 'Cadre', 'Cadre'); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Portier', 'Pierre', 'Elisabeth', '5 rue Toulet','', '92200', 'Neuilly', 'Dentiste',''); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Renault', 'Damien', 'Anne', '2 rue Ragon','', '75007', 'Paris', 'Comptable', 'Enseignante'); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Darduet', 'Jean','','','','','','',''); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Rodier', 'Gérard', 'Aurélie', '6 rue Agien', '77000', 'Fontainebleau', 'Professeur',''); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Tarte', 'Alla', 'Crème', '1 allée Durond','', '92200', 'Neuilly', 'Cuisinier', 'Cuisinière'); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Cohen', 'David', 'Sarah', '7 Av d\'Eylau','', '75016', 'Paris', 'PDG', 'Assistante Direction'); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Dupont2', 'Bruno', 'Odile', '12 rue Sébastien','', '75008', 'PARIS', 'Electricien', 'Comptable'); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Durand2', 'Jacques', 'Jane', '23 rue Dutor','', '92200', 'Neuilly', 'Plombier',''); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Darmon2', 'Bruno', 'Béatrice', '2 rue Nicolo','', '13008', 'Marseille', 'Cadre', 'Peintre'); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Darduet2', 'Jean', '','' ,'' ,'' ,'','',''); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Tarte2', 'Alla', 'Crème', '1 allée Durond','', '92200', 'Neuilly', 'Cuisinier', 'Cuisinière'); INSERT INTO familles (Nom , PrenomPere , PrenomMere , Adresse1 , Adresse2 , CodePostal , Ville , ProfPere , ProfMere) VALUES ('Cohen2', 'David', 'Sarah', '7 Av d\'Eylau','', '75016', 'Paris', 'PDG', 'Assistante Direction');
Saisissez maintenant chacune des commandes suivantes et expliquez le résultat obtenu. Les instructions sont numérotées pour faciliter vos prises de notes.
1 | ALTER TABLE Enfants ADD INDEX (Prenom); |
2 | ALTER TABLE Enfants DROP INDEX Prenom; |
3 | ALTER TABLE Enfants ADD TelPort VARCHAR(50) NOT NULL; |
4 | ALTER TABLE Enfants CHANGE TelPort TelPort VARCHAR( 22 ) NOT NULL; |
5 | ALTER TABLE Enfants ADD Test VARCHAR( 40 ) NOT NULL; |
6 | ALTER TABLE Enfants DROP Test; |
7 | SELECT * FROM familles; |
8 | SELECT * FROM familles LIMIT 8,12; |
<note tip> LIMIT - Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner. Le décalage du premier enregistrement est 0 (pas 1). </note>
9 | UPDATE familles SET Adresse1 = '120 rue de Vaugirard', CodePostal = '75015', Ville = 'PARIS' WHERE Nom = 'DARDUET' AND PrenomPere = 'Jean' LIMIT 1; |
10 | DELETE FROM familles WHERE Nom = 'DURANT' AND PrenomPere = 'Jacques'; |
11 | DELETE FROM familles WHERE Ville = 'Neuilly'; |
12 | SELECT * FROM familles LIMIT 8,12; |
13 | SELECT nom, PrenomPere FROM familles; |
14 | SELECT Nom AS 'Nom de famille', PrenomPere AS 'Prenom du Père' FROM familles; |
15 | INSERT INTO Enfants (Prenom, Sexe, CodeFamille) VALUES ('Georges', 'M', '14'); |
16 | SELECT familles.nom, familles.PrenomPere FROM familles, Enfants; |
<note> Créez la colonne familles.nb_enfants. </note>
17 | UPDATE familles SET nb_enfants = '2' WHERE CodeFamille = '2'; |
18 | UPDATE familles SET nb_enfants = '1' WHERE CodeFamille = '4'; |
19 | UPDATE familles SET nb_enfants = '3' WHERE CodeFamille = '5'; |
20 | UPDATE familles SET nb_enfants = '2' WHERE CodeFamille = '6'; |
21 | UPDATE familles SET nb_enfants = '4' WHERE CodeFamille = '8'; |
22 | UPDATE familles SET nb_enfants = '5' WHERE CodeFamille = '9'; |
23 | UPDATE familles SET nb_enfants = '3' WHERE CodeFamille = '11'; |
24 | UPDATE familles SET nb_enfants = '1' WHERE CodeFamille = '12'; |
25 | UPDATE familles SET nb_enfants = '5' WHERE CodeFamille = '14'; |
26 | SELECT SUM(nb_enfants) FROM familles; |
27 | SELECT MIN(nb_enfants) AS 'Nb enfants minimum', MAX(nb_enfants) AS 'Nb enfants maximum', AVG(nb_enfants) AS 'Nb enfants moyen' FROM familles; |
28 | SELECT nom FROM familles WHERE ville = 'Paris'; |
29 | SELECT nom FROM familles WHERE ville = 'Paris' OR ville = 'Neuilly'; |
30 | ALTER TABLE Enfants DROP PRIMARY KEY; |
31 | INSERT INTO Enfants (Prenom, Sexe, CodeFamille) VALUES ('Alex', 'F', '12'); |
32 | INSERT INTO Enfants (Prenom, Sexe, CodeFamille) VALUES ('Mila', 'F', '2'); |
33 | INSERT INTO Enfants (Prenom, Sexe, CodeFamille) VALUES ('Amandine', 'F', '5'); |
34 | SELECT familles.Nom , Enfants.Prenom FROM familles, Enfants WHERE ( Enfants.CodeFamille = familles.CodeFamille ); |
35 | SELECT familles.nom, familles.PrenomPere FROM familles, Enfants; |
36 | SELECT ville, min(nb_enfants) as 'Nb enfants minimum', max(nb_enfants) as ' Nb enfants maximum', avg(nb_enfants) as 'Nb enfants moyen' from familles GROUP BY Ville; |
37 | SELECT * FROM familles ORDER BY nom; |
38 | SELECT * FROM familles GROUP BY ville, Nom; |
39 | UPDATE familles SET Adresse2 = '-'; |
40 | UPDATE familles SET Adresse2 = '___',nb_enfants=2; |
41 | UPDATE familles SET nb_enfants=4 WHERE Ville = 'Paris'; |
42 | UPDATE familles SET nb_enfants=7 LIMIT 4; |
43 | UPDATE familles SET nb_enfants=8 ORDER BY Nom LIMIT 3; |
44 | DELETE FROM familles WHERE Nom = 'Dupont'; |
45 | CREATE TABLE loisirs( Nom VARCHAR( 30 ) NOT NULL ); |
46 | DROP TABLE loisirs; |
47 | INSERT INTO familles (Nom, PrenomPere) VALUES ('Alouet','Jean'),('Rahtmi','Patrick'); |
48 | INSERT INTO familles (PrenomPere) SELECT Enfants.prenom FROM Enfants; |
49 | ALTER TABLE familles ADD Sports VARCHAR(50) NOT NULL; |
50 | ALTER TABLE familles ADD INDEX (Sports); |
51 | ALTER TABLE familles ADD INDEX (PrenomPere), ADD EmailPere VARCHAR( 50 ) NOT NULL; |
52 | ALTER TABLE familles CHANGE PrenomPere Prenom_Pere VARCHAR( 45 ) NOT NULL; |
53 | ALTER TABLE familles DROP Sports; |
54 | ALTER TABLE familles DROP INDEX PrenomPere; |
55 | ALTER TABLE familles DISABLE KEYS; |
56 | ALTER TABLE Enfants RENAME familles_enfants; |
57 | ALTER TABLE familles ORDER BY Prenom_Pere; |
58 | ALTER TABLE familles ADD Commentaire LONGTEXT NOT NULL ; |
59 | ALTER TABLE familles ADD FULLTEXT (Commentaire); |
60 | UPDATE familles SET Commentaire = 'La vie est un long fleuve tranquille' WHERE CodeFamille = '11'; |
61 | UPDATE familles SET Commentaire = 'Paris, capitale de la France est traversée par un fleuve' WHERE CodeFamille ='4'; |
62 | UPDATE familles SET Commentaire = 'Le ruisseau se jette dans la rivière qui se jette dans le FLEUVE' WHERE CodeFamille = '6'; |
63 | SELECT * FROM familles WHERE MATCH (Commentaire) AGAINST ('fleuve'); |
64 | SELECT Nom, Commentaire FROM familles WHERE MATCH (Commentaire) AGAINST ('-capitale+fleuve'IN BOOLEAN MODE); |
<html>
Copyright © 2004-2017 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”><img alt=“Licence Creative Commons” style=“border-width:0” src=“http://i.creativecommons.org/l/by-nc-nd/3.0/fr/88x31.png” /></a><br />Ce(tte) oeuvre est mise à disposition selon les termes de la <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”>Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 France</a>.
</html>