MIAMI -- Barry Zito couldn't do anything but watch as the bullpen tried to preserve his first win in five starts.
Zito (2-6) went five-plus innings, allowing one run on four hits to get his first win since May 8 at Los Angeles.
Brandon Medders and Sergio Romo combined for three scoreless innings of relief. Brian Wilson loaded the bases with two outs in the ninth, but got Jorge Cantu to ground out for his 14th save in 17 opportunities.
Zito stayed in the dugout until the final out.
"It's a little nerve-racking. I can't imagine what it's like to be a coach," Zito said. "The first thing people mention is your record. It's the last thing we can control so it's definitely rewarding."
The Giants have won eight of 10.
Sandoval homered off Chris Volstad in the fourth for a 2-0 lead. Bengie Molina led off the inning with a single and Sandoval followed with a drive over the right-field wall, his fourth of the season.
"I got the right pitch to hit, a fastball in," Sandoval said. "I'm usually a line-drive hitter and I was just trying to put the ball in play."
Aaron Rowand had three hits for the Giants, extending his hitting streak to 15 games, the longest active streak in the National League.
Florida closed to 2-1 in the sixth. Zito walked the first two batters and was replaced by Medders. A one-out single by Ronny Paulino loaded the bases. Alejandro De Aza hit a sacrifice fly to foul territory in left field that scored Cantu from third. Medders retired pinch-hitter Ross Gload to end the inning.
"Walking those first two guys messed me up," Zito said. "The bullpen really picked me up."
Volstad (4-5) worked six innings, giving up two runs on eight hits.
"I feel like I pitched pretty well but it wasn't our night," Volstad said. "That one pitch [to Sandoval] got me again. He put a good swing on that ball."
The Marlins threatened in their half of the fourth when they loaded the bases with one out, but Zito struck out Brett Carroll and Volstad to end the inning.
"We had some chances but we just couldn't get that little bleeder or that one that goes between infielders," Marlins manager Fredi Gonzalez said. "That's a heck of a pitching staff they've got over there from their starters to their bullpen. They showed it today and we matched them. But they got one more than we did."
The Marlins' defense, second worst in the major leagues in fielding percentage, made a play in the third inning when right fielder Carroll nailed Rowand at home trying to score on Randy Winn's single. Carroll has the Marlins' only two outfield assists this season.
The game started 55 minutes late because of rain.