SQL-запросы не имеют конструкции процедурной циклической обработки (несмотря на процедурный язык), но вы можете сравнить один набор строк с другим набором строк, что похоже на цикл.
У вас есть только 32 возможных маски подсети. В подобных случаях имеет смысл создать небольшую таблицу, в которой будут храниться эти 32 маски и соответствующий номер CIDR.
CREATE TABLE cidr (
bits INT UNSIGNED PRIMARY KEY,
mask INT UNSIGNED NOT NULL
);
INSERT INTO cidr (bits) VALUES
( 1), ( 2), ( 3), ( 4), ( 5), ( 6), ( 7), ( 8), ( 9), (10),
(11), (12), (13), (14), (15), (16), (17), (18), (19), (20),
(21), (22), (23), (24), (25), (26), (27), (28), (29), (30),
(31), (32);
UPDATE cidr SET mask = ((POWER(2,32)-1)<<(32-bits)) & (POWER(2,32)-1);
SELECT CONCAT(s.ip_addr, '/', c.bits)
FROM cidr c JOIN subnets s ON (c.mask = inet_aton(s.ip_mask));