Abaixo está uma instrução que descreve uma tarefa de geração de SQL, combinada com uma entrada que fornece mais contexto sobre os esquemas de tabela disponíveis. Escreva o código SQL que responda adequadamente à solicitação
 ###Instrução: Liste os programas que receberam doações nos últimos 3 meses, mas ainda não atingiram o valor orçado, e seus respectivos orçamentos e total de doações recebidas.
 ###Tabelas: 
CREATE TABLE programs(id INT, name TEXT, budget FLOAT);CREATE TABLE donations(id INT, program_id INT, amount FLOAT, donation_date DATE);
SELECT programs.name, programs.budget, SUM(donations.amount) as total_donations FROM programs JOIN donations ON programs.id = donations.program_id WHERE donations.donation_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND CURDATE() AND programs.budget > (SELECT SUM(donations.amount) FROM donations WHERE donations.program_id = programs.id) GROUP BY programs.id;