121 lines
3.0 KiB
MySQL
Raw Normal View History

2023-02-02 08:52:11 +01:00
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;