Jeff Curry-USA TODAY Sports

Blake Snell threw seven scoreless innings and Garrett Cooper drove in three runs as the visiting San Diego Padres defeated the St. Louis Cardinals 4-1 Monday.

Snell (11-9) held the Cardinals to two hits and five walks while striking out nine batters. Josh Hader sealed the victory for his 28th save.

Matt Carpenter drove in the other run for the Padres, who won for just the third time in the last nine games.

Paul Goldschmidt hit a homer for the Cardinals, who lost their fourth straight game and their 10th in 12 games. They fell 20 games under .500 for the first time since the 1995 season.

Cardinals starting pitcher Adam Wainwright (3-10) allowed one run on eight hits and three walks in six innings.

Snell escaped trouble in the first inning by inducing Nolan Arenado's double-play grounder after walking Tyler O'Neill and Goldschmidt.

With two outs in the fourth inning, Cooper hit a single and Carpenter walked before Gary Sanchez grounded into a threat-ending forceout.

Goldschmidt hit a single in the bottom of the inning and advanced on a wild pitch. Willson Contreras and Nolan Gorman drew walks to load the bases and Snell went to a 3-0 count on Andrew Knizner.

But Snell struck out Knizner and Jordan Walker to end the threat.

The Padres broke the scoreless tie in the sixth inning. Fernando Tatis Jr. and Xander Bogaerts hit singles, then Tatis took third on a flyout and scored on Carpenter's single into right field.

Bogaerts was thrown out going to third base. Sanchez hit a double, then Trent Grisham walked before He-Seong Kim hit into a forceout to end the inning.

San Diego doubled its lead to 2-0 in the seventh inning. With one out, Machado hit a single, Tatis walked, and Cooper hit a two-out RBI single.

Goldschmidt cut the lead to 2-1 with his eighth-inning homer.

But the Padres pushed their advantage to 4-1 in the ninth inning. Soto walked, Tatis hit a single, Bogaerts was hit by a pitch, and Cooper hit a two-run single.

More must-reads:

TODAY'S BEST
Atlanta to be first race of NASCAR's In-Season Tournament
West Point alum made history in his MLB debut with Reds
Heat legend cautions Lakers against hiring JJ Redick
Welcome to the WNBA: Caitlin Clark sets infamous record in debut
Jalen Brunson leads Knicks to blowout win in Game 5 vs. Pacers
Nikola Jokic torches DPOY to lead Nuggets past Wolves in Game 5
Oilers use late heroics to tie Canucks at two games each
Watch: Astros pitcher ejected after foreign substance check
Kirk Cousins not angry with Falcons because winning is 'hard enough'
Bronny James has surprising comments on potentially teaming up with LeBron
Bills add two-time Super Bowl champ to new-look WR room
Brewers lose team-leading home run hitter to injured list
Sandy Alderson denies involvement in Mets, Billy Eppler IL controversy
Twins reliever shut down for six weeks with patellar tendon tear
Chris Finch throws shade at Nuggets star over Rudy Gobert’s fine
Cardinals head coach warns not to bet against Kyler Murray
Details emerge on Jason Kelce’s role at ESPN
Rangers defenseman wins Mark Messier Leadership Award
Ex-NFL head coach takes over as Arena Football League commish
Yankees young stud takes major step in return from injury