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 com as maiores e menores doações totais no primeiro semestre de 2021.
 ###Tabelas: 
CREATE TABLE Programs (ProgramID int, ProgramName varchar(255)); CREATE TABLE Donations (DonationID int, ProgramID int, DonationAmt decimal(10,2), DonationDate date); INSERT INTO Programs (ProgramID, ProgramName) VALUES (101, 'Education'), (102, 'Health'), (103, 'Environment'); INSERT INTO Donations (DonationID, ProgramID, DonationAmt, DonationDate) VALUES (1, 101, 100.00, '2021-01-02'), (2, 102, 200.00, '2021-02-15'), (3, 103, 300.00, '2021-03-10');
SELECT ProgramName, SUM(DonationAmt) AS TotalDonations FROM Donations INNER JOIN Programs ON Donations.ProgramID = Programs.ProgramID WHERE EXTRACT(YEAR FROM DonationDate) = 2021 AND EXTRACT(MONTH FROM DonationDate) BETWEEN 1 AND 6 GROUP BY ProgramName ORDER BY TotalDonations DESC, ProgramName;