2023-02-02 08:52:11 +01:00

121 lines
3.0 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;