informatique:databases:mysql:requetes_donnees
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
informatique:databases:mysql:requetes_donnees [2024/11/21 18:37] – supprimée - modification externe (Date inconnue) 127.0.0.1 | informatique:databases:mysql:requetes_donnees [2024/11/21 18:54] (Version actuelle) – alexis | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Requêtes de manipulation de données ====== | ||
+ | ===== Utiliser le caractère d' | ||
+ | Lorqu' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Ne fonctionne pas | ||
+ | SELECT 1 FROM < | ||
+ | INSERT INTO < | ||
+ | -- Fonctionne | ||
+ | SELECT 1 FROM < | ||
+ | INSERT INTO < | ||
+ | </ | ||
+ | </ | ||
+ | Lorsqu' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Ne fonctionne pas | ||
+ | SELECT 1 FROM < | ||
+ | SELECT 1 FROM < | ||
+ | SELECT 1 FROM < | ||
+ | -- Fonctionne | ||
+ | SELECT 1 FROM < | ||
+ | SELECT 1 FROM < | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP info> | ||
+ | Extrait de la [[https:// | ||
+ | > Because MySQL uses C escape syntax in strings (for example, '' | ||
+ | </ | ||
+ | ===== Calculer une moyenne géométrique ===== | ||
+ | Il n' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT EXP(AVG(LN(< | ||
+ | FROM < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Afficher le numéro de ligne ===== | ||
+ | Il n' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT @rownum := @rownum + 1 AS rownum | ||
+ | , < | ||
+ | FROM < | ||
+ | , (SELECT @rownum := 0) AS < | ||
+ | </ | ||
+ | </ | ||
+ | Pour plus d' | ||
+ | |||
+ | Il est également possible d' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT a | ||
+ | , b | ||
+ | , @num := IF(@a = a, @num + 1, 1) AS rownum | ||
+ | , @a := a | ||
+ | FROM < | ||
+ | , (SELECT @a := '', | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Pour plus d' | ||
+ | |||
+ | <WRAP alert> | ||
+ | Lors de l' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Mise à jour d'une table avec des données variables ===== | ||
+ | Quand on veut mettre à jour une table avec des données provenant d'une requête, voici la structure de la requête à utiliser. On retrouve facilement cette syntaxe en cherchant sur le web ou en testant rapidement, mais c'est encore mieux de savoir où trouver l' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | UPDATE < | ||
+ | SET < | ||
+ | SELECT < | ||
+ | FROM < | ||
+ | WHERE < | ||
+ | ) | ||
+ | WHERE EXISTS ( | ||
+ | SELECT 1 | ||
+ | FROM < | ||
+ | WHERE < | ||
+ | ) | ||
+ | </ | ||
+ | </ | ||
+ | Après avoir utilisé cette syntaxe depuis pas mal de temps, je viens de me rendre compte qu'il existe une syntaxe beaucoup plus facile et surtout qui autorise la mise à jour de plus d'un champ à la fois. La cerise sur le gâteau est qu' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | UPDATE < | ||
+ | SET < | ||
+ | , < | ||
+ | WHERE < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Créer une table à partir d'une autre table ===== | ||
+ | * Méthode 1 : | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Copie de la structure et des données | ||
+ | CREATE TABLE < | ||
+ | AS | ||
+ | SELECT * | ||
+ | FROM < | ||
+ | |||
+ | -- Copie de la structure uniquement | ||
+ | CREATE TABLE < | ||
+ | AS | ||
+ | SELECT * | ||
+ | FROM < | ||
+ | LIMIT 0 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * Méthode 2 : | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Copie de la structure uniquement | ||
+ | CREATE TABLE < | ||
+ | LIKE < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Lors de l' | ||
+ | |||
+ | ===== Changer la base d'un nombre ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | /* De binaire en octal */ | ||
+ | SELECT CONV( ' | ||
+ | |||
+ | /* De binaire en décimal */ | ||
+ | SELECT CONV( ' | ||
+ | |||
+ | /* De binaire en héxadécimal */ | ||
+ | SELECT CONV( ' | ||
+ | </ | ||
+ | </ | ||
+ | La fonction //CONV// supporte les bases comprises entre 2 et 36. | ||
+ | |||
+ | ===== Générer les requêtes pour déplacer les tables d'une base à une autre ===== | ||
+ | |||
+ | Pour déplacer des tables d'une base à une autre, on peut passer par un export des données de la base source puis par un import des données dans la base cible. Mais ces actions sont très longues. Si les bases source et cible peuvent communiquer entre-elles (par exemple, elles sont sur le même serveur), il est possible de renommer les tables en ne changeant que le nom de la base de données. | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | RENAME TABLE `< | ||
+ | TO `< | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP info> | ||
+ | Si la table de la base d' | ||
+ | </ | ||
+ | |||
+ | Si le nombre de tables à déplacer est élevé, il est intéressant de générer la liste les requêtes dynamiquement. Par exemple, pour déplacer toutes les tables d'une base vers une autre : | ||
+ | |||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Initialisation des variables | ||
+ | SET @orig: | ||
+ | SET @dest: | ||
+ | |||
+ | -- Génération des requêtes | ||
+ | SELECT CONCAT(' | ||
+ | FROM information_schema.INNODB_SYS_TABLES | ||
+ | WHERE NAME LIKE CONCAT(@orig, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP important> | ||
+ | Cette méthode de déplacement de table ne fonctionne qu'en innoDB. | ||
+ | </ | ||
+ | |||
+ | ===== Filtre multiple ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT * FROM < | ||
+ | WHERE (< | ||
+ | SELECT < | ||
+ | ) | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Filtrer des données accentuées ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Retourne l' | ||
+ | SELECT * | ||
+ | FROM < | ||
+ | WHERE < | ||
+ | |||
+ | -- Retourne uniquement les valeurs contenant " | ||
+ | SELECT * | ||
+ | FROM < | ||
+ | WHERE LOWER(< | ||
+ | |||
+ | -- Retourne uniquement les valeurs contenant " | ||
+ | SELECT * | ||
+ | FROM < | ||
+ | WHERE < | ||
+ | </ | ||
+ | </ |