ST. LOUIS (AP) -- St. Louis pitcher John Lackey worked seven scoreless innings as the Cardinals beat the Los Angeles Dodgers 3-0 in Friday's clash of the two top teams in the National League, extending their winning streak to five games.
The Dodgers' defeat cost them the lead in the NL West division, overtaken by San Francisco which beat Atlanta to establish a five-game streak of its own.
The Cardinals moved 6-1/2 games clear in the NL Central ahead of the Chicago Cubs, who lost at home in an interleague clash with Kansas City, while the Los Angeles Angels shut out Detroit with pitcher Hector Santiago putting in a commanding performance.
St. Louis' Lackey (3-3) struck out nine to keep the Dodgers lineup in check.
Dodgers' starter Mike Bolsinger (3-1) gave up seven hits in six innings. The Cardinals ended his streak of 18 2/3 consecutive scoreless innings on Randal Grichuk's bases-loaded double play ball in the first.
The Dodgers have been shut out four straight times on the road, including getting outscored 10-0 in a three-game sweep at San Francisco.
San Francisco's Buster Posey hit a two-run homer in the first inning and drove in three runs as the Giants beat Atlanta 4-2.
Giants' starter Tim Hudson (3-4) pitched seven strong innings, giving up one run and not walking a batter. He has now beaten his 29th major league team, leaving Oakland -- his original team -- as the only one he has not beaten.
He had yielded eight runs in 3 2/3 innings against Colorado in his previous start.
Kansas City ended a run of four successive losses with an 8-4 win at the Chicago Cubs, with Lorenzo Cain hitting a tiebreaking double and scoring in a three-run eighth inning.
Alcides Escobar homered on the game's first pitch. Alex Gordon and Salvador Perez also went deep, and the Royals won despite squandering an early 4-1 lead.
Mike Moustakas walked leading off the eighth. Cain then drove him in with a double to the wall in right-center and the Royals scored two more on an error.
The Chicago White Sox 6-3 at Houston after Geovany Soto hit a go-ahead, two-run double in the 11th inning.
There were runners at first and second when Soto's double off Tony Sipp dropped in front of the wall in right field to put Chicago up 5-3. Soto entered the game in the eighth inning for an injured Jose Abreu.
Toronto's Chris Colabello hit two-run tiebreaking homer in the ninth inning against former teammate Glen Perkins, giving the Blue Jays a 6-4 win at Minnesota on a soggy night.
Perkins (0-1), the major league leader in saves, started fresh in the ninth inning after 10 straight outs by the Blue Jays. Russell Martin drew a walk after falling behind 0-2, and Colabello followed with his dramatic drive.
The Twins had won their previous five games.
San Diego's Derek Norris hit a grand slam with two outs in the bottom of the ninth to lift the Padres to a 6-2 victory over Pittsburgh, snapping the Pirates' season-high seven-game winning streak.
Norris' homer capped a crazy ninth inning.
Jedd Gyorko started the winning rally with a leadoff walk off Rob Scahill (1-3). Abraham Almonte bunted and Scahill fielded it but threw it away at first for an error, allowing Gyorko to take third and Almonte second. An intentional walk loaded the bases, but Pittsburgh fielded a five-man infield and got two force plays at home plate. That brought up Norris for his winning slam.
Cincinnati rallied against Washington to win 5-2 after the Nationals lost Stephen Strasburg early.
Strasburg gave up a solo homer in the first inning and issued a walk on his 16th pitch to open the second. He shrugged after the pitch, a trainer went to the mound, and Strasburg headed for the clubhouse after a brief conversation.
Zack Cozart had three hits as Cincinnati won for only the second time in 12 games.
Baltimore's J.J. Hardy drove in the winning run with two outs in the ninth inning to give the Orioles a 2-1 victory that sent Tampa Bay spiraling to a sixth straight loss.
Miami rookie Justin Bour hit a three-run homer as the Marlins beat the New York Mets 4-3.
Texas' Josh Hamilton homered in his first two at-bats, his first homers since he belatedly began his major league season this week back with the Rangers, helping the hosts beat Boston 7-4.
Seattle's Taijuan Walker produced eight strong innings to guide the Mariners to a 2-1 win against Cleveland.
Oakland's Sonny Gray pitched eight innings to steer the Athletics to a 6-2 victory over the New York Yankees.
Colorado's Chad Bettis retired the first 18 batters and held Philadelphia scoreless into the eighth inning, leading the Rockies to a 4-1 win against the Phillies.
Arizona's Nick Ahmed hit a tiebreaking solo home run in the eighth inning to help the Diamondbacks beat Milwaukee 7-5.