CREATE TABLE `familles` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `bord_gauche` INT(10) UNSIGNED NOT NULL, `bord_droit` INT(10) UNSIGNED NOT NULL, `nom` VARCHAR(250) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = 'InnoDB' DEFAULT CHARACTER SET = 'utf8'; INSERT INTO `familles` (`id`, `bord_gauche`, `bord_droit`, `nom`) VALUES (1, 1, 44, 'Transport'), (2, 2, 21, 'Aérien'), (3, 3, 4, 'Planeur'), (4, 5, 6, 'Parachute'), (5, 7, 8, 'Hélico'), (6, 9, 10, 'Fusée'), (7, 11, 12, 'ULM'), (8, 13, 20, 'Avion'), (9, 14, 15, 'Militaire'), (10, 16, 17, 'Tourisme'), (11, 18, 19, 'Civil'), (12, 22, 35, 'Terrestre'), (13, 23, 24, 'Vélo'), (14, 25, 26, 'Voiture'), (15, 27, 28, 'Camion'), (16, 29, 34, 'Moto'), (17, 30, 31, 'Side-car'), (18, 32, 33, 'Trail'), (19, 36, 43, 'Marin'), (20, 37, 38, 'Planche à voile'), (21, 39, 40, 'Paquebot'), (22, 41, 42, 'Voilier'); -- Rechercher toutes les feuilles SELECT * FROM familles F WHERE (F.bord_droit - F.bord_gauche) = 1; --Rechercher toutes les feuilles sous un élément de référence SELECT * FROM familles F WHERE (F.bord_droit - F.bord_gauche) = 1 AND F.bord_gauche > 22 AND F.bord_droit < 35; --Rechercher tous les nœuds SELECT * FROM familles F WHERE (F.bord_droit - F.bord_gauche) > 1; --Rechercher tous les nœuds sous un élément de référence SELECT * FROM familles F WHERE (F.bord_droit - F.bord_gauche) > 1 AND F.bord_gauche > 2 AND F.bord_droit < 21; --Tous les éléments dépendant d'un élément de référence (sous-arbre) SELECT * FROM familles F WHERE F.bord_gauche > 2 AND F.bord_droit < 21; --Tous les éléments indépendants d'un élément de référence (complément au sous-arbre) SELECT * FROM familles F WHERE F.bord_gauche < 2 OR F.bord_droit > 21; --Tous les pères d'un élément de référence SELECT * FROM familles F WHERE (F.bord_droit - F.bord_gauche) > 1 AND F.bord_gauche < 14 AND F.bord_droit > 15; --Recherche de la racine de l'arbre SELECT * FROM familles F WHERE F.bord_gauche = 1; --Compter les feuilles SELECT COUNT(*) as nbFeuilles FROM familles F WHERE (F.bord_droit - F.bord_gauche) = 1; --Compter les nœuds SELECT COUNT(*) as nbNoeux FROM familles F WHERE (F.bord_droit - F.bord_gauche) > 1; --Insérer l’élément “Roller” en liaison directe avec son père l’élément “Terrestre” SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION; UPDATE familles SET bord_gauche = bord_gauche + 2 WHERE bord_gauche >= 35; UPDATE familles SET bord_droit = bord_droit + 2 WHERE bord_droit >= 35; INSERT INTO familles (bord_gauche, bord_droit, nom) VALUES (35, 36, "Roller"); COMMIT; --Supprimer l’élément “ULM” (dont le NFM_BG vaut 11) SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION; DELETE FROM familles WHERE bord_gauche = 11; UPDATE familles SET bord_gauche = bord_gauche - 2 WHERE bord_gauche >= 11; UPDATE familles SET bord_droit = bord_droit - 2 WHERE bord_droit >= 11; COMMIT;