Пример объединения таблиц

Forums:

Имеются три таблицы =

  • STUD = информация о личностях студентов (ФИО Б возраст , id)
  • STUD_SUBJ = таблица информации о том какие предметы изучают студенты (раскрывает отношения-многие ко многим - id отношения + id предмета+id студента)
  • SUBJ= информация о предмете (число часов , id , название и т.д.)

Требуется = (вопросы в постах)

vedro-compota's picture

1) например - требуется узнать сколько предметов изучает каждый студент?

выведем имя каждого студента и число преметов.

я бы сделал так =

select STUD.STUD_NAME , count(*) from ( STUD left join STUD_SUBJ on  STUD.STUD_ID= STUD_SUBJ.STUD_ID left join 
  SUBJ on STUD_SUBJ.SUBJ_ID = SUBJ.SUBJ_ID) as MYTABLE group by  SUBJ_ID ;


_____________________________________________

MYTABLE - это псевдоним его не обязательно заменять на те имена, которые есть у тебя.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

например ваша замена может выглядеть как-то так =

select stud.SNF , count(*) from ( stud left join infostud on  stud.Stud_id=  infostud.id_id_stud left join
  information on infostud.id_id_information= information.information_id) as MYTABLE group by  information.information_id ;




-----------------------------------------------------

но это НЕ СРАБОТАЕТ , правильно так =

select stud.SNF , count(*) from ( stud left join infostud on  stud.Stud_id=  infostud.id_id_stud left join
  information on infostud.id_id_information= information.information_id)  group by  Stud_id ;

______________________

для LEFT JOIN имеет значение какая таблица идёт первой , а какая второй , поэтому предыдущие запросы БУДУТ ВСЕГДА ВЫВОДИТЬ ДЛЯ КАЖДОГО СТУДЕНТА ХОТЯ БУДТО ОН ПОСЕЩАЕТ ХОТЯ БЫ ОДИН ПРЕДМЕТ , поэтому правильно будет , упростив написать так =

select stud.SNF , count(*) from ( infostud left join stud on  stud.Stud_id=  infostud.id_id_stud )  group by  Stud_id ;

______________________

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

если выбирать просто по id (без имени ) , то можно обойтись таким запросом =

select id_id_stud , count(*) from  infostud  group by id_id_stud;

______________

_____________
матфак вгу и остальная классика =)