Outils pour utilisateurs

Outils du site


informatique:databases:mysql:requetes_donnees

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
informatique:databases:mysql:requetes_donnees [2024/11/21 18:37] – ↷ Page déplacée de informatique:mysql:requetes_donnees à informatique:databases:mysql:requetes_donnees alexisinformatique:databases:mysql:requetes_donnees [2024/11/21 18:54] (Version actuelle) alexis
Ligne 203: Ligne 203:
 </code> </code>
 </WRAP> </WRAP>
- 
-====== Requêtes amusantes ====== 
-===== Multiplier le nombre de lignes d'une table ===== 
-Cette requête permet de multiplier le nombre d'enregistrements d'une table en fonction d'un multiplicateur de cette même table. Dans l'exemple suivant, on ne pourra pas générer plus de 9 lignes. Il suffit d'augmenter le nombre de //UNION// pour pouvoir générer plus d'enregistrements. 
-<WRAP prewrap> 
-<code sql> 
-SELECT id 
-, multiplier 
-FROM <table> 
-, ( 
-    SELECT 0 AS `rank` 
-    UNION ALL SELECT 1 
-    UNION ALL SELECT 2 
-    UNION ALL SELECT 3 
-    UNION ALL SELECT 4 
-    UNION ALL SELECT 5 
-    UNION ALL SELECT 6 
-    UNION ALL SELECT 7 
-    UNION ALL SELECT 8 
-    UNION ALL SELECT 9 
-) as multiplier 
-where multiplier.`rank` < <table>.multiplier 
-</code> 
-</WRAP> 
- 
-<WRAP tip> 
-Il est possible de se passer des //UNION// en remplaçant la sous-requête par une table contenant les nombres de **0** à **n**. 
-<WRAP prewrap> 
-<code sql> 
-SELECT id 
-, multiplier 
-FROM <table> 
-, multiplier 
-WHERE multiplier.`rank` < <table>.multiplier 
-</code> 
-</WRAP> 
-</WRAP> 
- 
-===== Trier des numéros de version ===== 
-Cette requête permet de trier des numéros de versions (//5//, //4.1//, //3.2.5//, ...) entre eux. 
-<WRAP prewrap> 
-<code sql> 
-SELECT version 
-, @version := IF(LOCATE('.',version) = 0, CONCAT(version, '.0.0'), version) -- Ajoute les versions mineure et hotfix quand on a qu'une version majeure 
-, @version := IF(@version REGEXP '^.+\..+\..+$' = 1, @version , CONCAT(@version, '.0')) -- Ajoute la version hotfix quand on a qu'une version mineure 
-, CONCAT( 
- LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(@version, '.', 1), '.', -1), 10, '0'), -- Extrait la version majeure et la préfixe avec des 0 
- LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(@version, '.', 2), '.', -1), 10, '0'), -- Extrait la version mineure et la préfixe avec des 0 
- LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(@version, '.', 3), '.', -1), 10, '0' -- Extrait la version hotfix et la préfixe avec des 0 
-) AS concat 
-FROM docs 
-ORDER BY concat DESC 
-</code> 
-</WRAP> 
-<WRAP important> 
-Limitations : 
-  * Cette requête ne permet de gérer que des versions dont le format correspond au versionnage sémantique. 
-  * Seules les versions ne contenant que des chiffres sont supportées. 
-  * Les sections du numéro de version ne peuvent pas excéder 10 caractères. 
-</WRAP> 
- 
-===== Récupération des "trous" dans une séquence ===== 
-**Récupération sous la forme de plages d'identifiants** 
-<WRAP important> 
-Cette requête ne permet pas de récupérer le premier "trou" de séquence si celui-ci commence au premier identifiant. 
-</WRAP> 
- 
-<WRAP prewrap> 
-<code sql> 
-SELECT range_start 
-, range_end 
-FROM ( 
- SELECT  @rownum1 := @rownum1 + 1 AS rownum_end 
- , table1.id - 1 AS range_end 
- FROM <table> AS table1 
- JOIN (SELECT @rownum1 := 0) AS dummy 
- LEFT JOIN <table> AS table2 ON table2.id = table1.id - 1 
- WHERE table2.id IS NULL 
- AND table1.id <> (SELECT MIN(id) FROM <table>) 
-) AS e 
-, ( 
- SELECT @rownum2 := @rownum2 + 1 AS rownum_start 
- , table1.id + 1 AS range_start 
- FROM <table> AS table1 
- JOIN (SELECT @rownum2 := 0) AS dummy 
- LEFT JOIN <table> AS table2 ON table2.id = table1.id + 1 
- WHERE table2.id IS NULL 
- AND table1.id <> (SELECT MAX(id) FROM <table>) 
-) AS s 
-WHERE rownum_end = rownum_start 
-</code> 
-</WRAP> 
-**Récupération de la liste complète des identifiants** 
-<WRAP prewrap> 
-<code sql> 
-SELECT dummy.`row` 
-FROM ( 
- SELECT @row := @row + 1 AS `row` 
- FROM  
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy1, 
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy2, 
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy3, 
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy4, 
- (SELECT @row := 0) numbers 
- WHERE @row <= (SELECT MAX(id) FROM <table>) 
-) dummy 
-LEFT JOIN <table> AS table1 ON table1.id = dummy.`row` 
-WHERE table1.id IS NULL 
-</code> 
-</WRAP> 
- 
-===== Générer une liste de 1000 dates ===== 
-Cette méthode peut être étendue pour générer plus de dates ou au contraire restreinte pour en générer moins. Dans l'exemple suivant, la date de départ sera la plus petite date, mais il est possible qu'elle devienne la plus grande en changeant le signe de l'opération. Pour que les dates soient ordonnées, la requête //units// doit impérativement être avant la requête //tens// qui elle même doit impérativement être avant la requête //hundreds// 
-<WRAP prewrap> 
-<code sql> 
-SELECT '2013-04-01' + INTERVAL (hundreds.val + tens.val + units.val) DAY AS day 
-FROM ( 
-    SELECT 0 AS val 
-    UNION ALL SELECT 1 
-    UNION ALL SELECT 2 
-    UNION ALL SELECT 3 
-    UNION ALL SELECT 4 
-    UNION ALL SELECT 5 
-    UNION ALL SELECT 6 
-    UNION ALL SELECT 7 
-    UNION ALL SELECT 8 
-    UNION ALL SELECT 9 
-) AS units 
-CROSS JOIN ( 
-    SELECT 0 AS val 
-    UNION ALL SELECT 10 
-    UNION ALL SELECT 20 
-    UNION ALL SELECT 30 
-    UNION ALL SELECT 40 
-    UNION ALL SELECT 50 
-    UNION ALL SELECT 60 
-    UNION ALL SELECT 70 
-    UNION ALL SELECT 80 
-    UNION ALL SELECT 90 
-) AS tens 
-CROSS JOIN ( 
-    SELECT 0 AS val  
-    UNION ALL SELECT 100 
-    UNION ALL SELECT 200 
-    UNION ALL SELECT 300 
-    UNION ALL SELECT 400 
-    UNION ALL SELECT 500 
-    UNION ALL SELECT 600 
-    UNION ALL SELECT 700 
-    UNION ALL SELECT 800 
-    UNION ALL SELECT 900 
-) AS hundreds 
-</code> 
-</WRAP> 
- 
-===== Générer une liste de nombre ===== 
-Cette requête permet de générer une liste de 10000 valeurs consécutives. Pour avoir plus de valeur, il faut ajouter une ligne identique aux lignes ''dummy'' existantes. 
-<WRAP prewrap> 
-<code sql> 
-SELECT @row := @row + 1 AS `row` 
-FROM  
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy1, 
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy2, 
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy3, 
- (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS dummy4, 
- (SELECT @row := 0) numbers 
-</code> 
-</WRAP> 
- 
-===== Quine ===== 
-Une [[http://en.wikipedia.org/wiki/Quine_%28computing%29|quine]] est un programme sans entrée qui génère son propre code source. 
- 
-<WRAP prewrap> 
-<code sql> 
-SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine',CHAR(34),CHAR(39)),CHAR(36),'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine') AS Quine 
-</code> 
-</WRAP> 
- 
-^ Code ASCII ^ Caractère ^ 
-| 34 | " | 
-| 36 | $ | 
-| 39 | ' | 
informatique/databases/mysql/requetes_donnees.1732243056.txt.gz · Dernière modification : 2024/11/21 18:37 de alexis