Если все, что вам нужно, это получить информацию в каждой таблице для каждого учащегося, это простой запрос JOIN:
SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
Если вы дублировали информацию, вы можете использовать предложение GROUP BY для полученияинформация сгруппирована и MIN или MAX для получения значений каждого поля, которое вы не группируете.
РЕДАКТИРОВАНИЕ, чтобы учесть комментарий от user599977:
От вашегокомментарий Я полагаю, у вас есть дублированные строки в информации ?, если это так, вы можете сделать что-то вроде:
SELECT e.idStudent, max(e.name), max(e.age), max(i.address), max(i.tel), max(e.code)
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
GROUP BY e.idStudent
Но я рекомендую вам отфильтровать более предсказуемое поле, например, последнюю введенную запись или что-то подобное.
Например:
SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
WHERE i.loadDate= (
SELECT max(loadDate)
FROM infos
WHERE id=e.idStudent
)
Предполагается, что у вас есть столбец с отметкой времени или некоторые данные, которые позволяют вам определить, какая строка является последней, введенной пользователем.