in parte ti sei risposto da solo: utilizzando QB eviti di scrivere sql aumentando la portabilità ed hai in + alcune feature di escape e funzioni di join e altro.
per quanto riguarda l’AR viene utilizzato per mappare ogni riga della tabella con oggetti ed è molto utile per incapsulare funzioni e legami applicabili ad ogni riga di quella determinata tabella. Ovviamente questo comporta un discreto carico di informazioni nel caso l’applicazione preveda la gestione di grosse quantità di dati (ma intendo veramente grosse e cmq il problema viene risolto utilizzando caching e lazy loading)
select ti.name Institute, nc.NCourses NCourses, no.NOperators NOperators
from tbl_institutes as ti
inner join (
select ti.id_institute istitute, count(tc.institute) NCourses
from tbl_institutes as ti
left join tbl_courses as tc
on ti.id_institute = tc.institute
group by ti.id_institute
) as nc
on ti.id_institute = nc.istitute
inner join (
select ti.id_institute istitute, count(top.institute) NOperators
from tbl_institutes as ti
left join tbl_operators as top
on ti.id_institute = top.institute
group by ti.id_institute
) as no
on ti.id_institute = no.istitute;
select
name,
(select count(*) from tbl_courses c where c.institute = i.id_institute),
(select count(*) from tbl_operators o where o.institute = i.id_institute)
from
tbl_institures i
Senza contare che per semplificarti la vita potresti già avere a gratis questi "count" sfruttando AR di yii.