NEW YORK, JUNE 2 -- Fighting themselves every step of the way, the Baltimore Orioles defeated the New York Yankees tonight, 4-2, before 27,569 fans at Yankee Stadium.

The Orioles were three for 16 with runners in scoring position, but Randy Milligan's two-out, two-strike single with the bases loaded in the fifth gave Baltimore the lead, and starter Dave Johnson scrapped through five innings before turning things over to Mark Williamson and Gregg Olson.

"Winning takes away some of the frustration," said Johnny Oates, now 1-1 managing the club while Frank Robinson serves a three-game suspension in connection with his ejection from Monday's game against the Minnesota Twins. "I'm just happy we didn't lose, 5-4."

Olson, who had pitched just one inning in Baltimore's last five games, entered at the start of eighth with his first save opportunity since May 20. With two out, Steve Balboni and Mel Hall singled to bring up Jesse Barfield, who already had homered, singled and walked.

Olson fired a full-count fastball past a swinging Barfield, and retired the side in order in the ninth to hand New York its sixth loss in seven games.

"Gregg's been one of the best, if not the best, short relievers in the game," Oates said. "The statistics speak for themselves."

Olson has 10 saves in 10 opportunities this season, 37 in 42 for his career. He has allowed one run in his last 56 innings, covering 38 appearances. He has not allowed a homer in 105 1/3 innings, dating from April 15, 1989, and covering 440 batters.

Baltimore's batters have not been nearly as imposing.

Before leaving for another night of watching his club on television in his hotel room, Robinson wryly asked "What was different?" about the Orioles' 4-3 loss here Friday night. Baltimore was zero for five with runners in scoring position, meaning they began tonight zero for their last eight in such situations.

They made it zero for 10 by putting runners on first and second in each of the first two innings tonight and not scoring.

New York took a 1-0 lead in the second on Barfield's ninth homer, a high fly to left on a 2-2 pitch.

The Yankees added a run in the third. Steve Sax led off by sending a pitch on the outside corner down the right field line for an opposite field double. Don Mattingly moved him to third with another bit of nice hitting. Fooled on a two-strike pitch, he grounded slowly to shortstop. Balboni brought Sax home with a fly to left.

Hall then violated one of baseball's basic principles -- he got thrown out at third to end the inning. He got New York's sixth hit of the game with a drive that rolled to the left-center field wall. He tried for a triple, but left fielder Phil Bradley and shortstop Cal Ripken combined to cut him down.

Clearly, though, Johnson was in trouble.

"It was one of those nights where you know right from the get-go that you're just hoping to survive five or six innings," he said. "The way they were hitting the ball, it didn't look very encouraging. But I didn't put myself in any bad positions by walking guys."

Johnson (4-3) allowed eight hits but only two runs in five innings, his shortest outing of the season.

And the Orioles somehow broke through. In the fourth, they provided a perfect example of what ails them. Their first three batters -- Joe Orsulak, Milligan and Sam Horn -- singled solidly to right, loading the bases for Craig Worthington.

Worthington got ahead in the count, 3-1. He fouled off Tim Leary's next pitch, then grounded into a double play to score Orsulak. The inning ended one pitch later, when Bill Ripken grounded out.

The fifth inning also showed promise of being an exercise in frustration, but the Orioles managed to go ahead, 3-2.

Bradley singled and went to second on a single by Finley. Cal Ripken, playing in his 1,299th consecutive game, forced Finley at second, and Tettleton walked to load the bases.

Leary started Orsulak with three consecutive balls. Orsulak took a strike, fouled off a pitch, then grounded to Mattingly, who threw home to force Bradley.

Milligan fell behind, 0-2, and barely checked his swing on a 1-2 pitch. He then grounded a single to left. Ripken and Tettleton scored, but Orsulak took too wide of a turn coming around second. Third baseman Randy Velarde cut off Hall's throw and threw out Orsulak at second. Nevertheless, it was the Orioles' first RBI hit in their last 16 at-bats with runners in scoring position.

Baltimore scored again in the sixth to make it 4-2, but it also made another base running blunder. Left-hander Greg Cadaret relieved Leary at the start of inning, so Oates sent right-hand batting Bob Melvin to hit for Horn. Melvin doubled to right-center. After Worthington struck out, Bill Ripken singled to right. Melvin scored, but Ripken was tagged out between first and second.