One of the planes crashed in a field in the hamlet of Trungen.
Cantonal police said the 69-year-old pilot and three passengers on board — a 52-year-old man with his 16-year-old daughter, and a 41-year-old man — were seriously injured in the accident.
The other aircraft made an emergency landing at an airfield in nearby Sitterdorf, injuring the 25-year-old pilot and two passengers — a 49-year-old man and a 25-year-old woman, police said.
The reason for the collision, which occurred in the air above the city of Wil in Saint Gallen at around 3pm, was not immediately known.
One of the planes took off from the Zurich airport, while the other departed from an airfield at Lommis in the canton of Thurgau, police said.
From the photos issued by police, it appears that the plane that came down in Trungen was more severely damaged than the one that landed at Sitterdorf.
Police issued an appeal for witnesses.
The Swiss accident investigation board is looking into the crash.
Plane that landed in Sitterdorf. Photo: Saint Gallen cantonal police