D'backs 8, Cardinals 6
Phoenix - Stephen Drew became the first player to hit for the cycle in Chase Field, and newly acquired David Eckstein singled home the winning run to help Arizona rally past St. Louis.
Adam Dunn, Chris Young and Mark Reynolds also homered for the slumping Diamondbacks, who overcame a poor start by Randy Johnson.
Batting leadoff, Drew singled in the first, tripled in the third and homered in the fifth against St. Louis Cardinals starter Joel Pineiro. He hit a ground-rule double in the seventh against reliever Kyle McClellan.
Astros 3, Cubs 0
Chicago - Roy Oswalt allowed four hits and came within two outs of a shutout, and Houston ran its winning streak to six games. The Cubs have lost three straight, all at home - their first three-game skid at Wrigley Field since August of last year.
Mets 4, Brewers 2
Milwaukee - Carlos Delgado's two-run home run off Eric Gagne in the eighth inning propelled New York to a victory over the Brewers.
Nationals 7, Phillies 4
Washington - Ryan Zimmerman hit a two-run home run, and the Nationals won their seventh straight game. Starter Tim Redding didn't allow a hit in the first five innings for the Nationals, who are on their best streak since a 10-game stretch in June 2005.
Rockies 4, Giants 0
Denver - Jorge De La Rosa pitched seven shutout innings and had an RBI single, Willy Taveras stole three bases and scored twice, and Colorado shut out San Francisco.
Marlins 4, Braves 3
Miami - Jorge Cantu homered, and John Baker hit a bases-loaded sacrifice fly to drive in the winning run in the ninth, helping Florida beat Atlanta. Baker's fly ball to shallow left drove in Dan Uggla, who beat left fielder Brandon Jones' throw to the plate.
Dodgers 5, Padres 2
Los Angeles - Greg Maddux tied Roger Clemens for eighth place on the career list with his 354th victory, leading the Dodgers past San Diego. Maddux (7-11) allowed two runs and six hits, struck out four and walked none.
Indians 5, White Sox 0
Cleveland - Cliff Lee became Cleveland's first 20-game winner in 34 years, pitching a five-hitter for his second career shutout to lead the Indians over Chicago.
Lee (20-2) is the first Indians pitcher to reach 20 wins since Hall of Famer Gaylord Perry went 21-13 in 1974. The left-hander's milestone win - his ninth straight victory - came exactly one year to the day that he was recalled from the minor leagues.
Lee shut down the hard-hitting, Central-leading White Sox with ease. He gave up two singles to open the first and then retired 21 in row.
Yankees 13, Tigers 9
Deetroit - Alex Rodriguez sparked a scoring barrage with a two-run single in the first inning and added an RBI in each of the next two frames to help New York take a nine-run lead before winning by four.
Red Sox 7, Orioles 4
Boston - Dustin Pedroia's two-run single capped a four-run sixth inning, Paul Byrd pitched seven efficient innings, and the Red Sox beat the struggling Orioles.
Mariners 12, Rangers 6
Arlington, Texas - Adrian Beltre hit for the cycle and had five hits to help Seattle win its fourth straight game. Beltre, who had the third five-hit game of his career, became the fourth Mariners player to hit for the cycle with an RBI triple off Josh Rupe in the eighth.