I've been able to narrow this down to the appropriate pairs but I'm at a complete loss on how to filter the final part. The following narrows it down a bit but still contains a pair that are enrolled in a class together (one of the employees is a teacher but happens to be enrolled in the class with the ohter employee thats being returned):
select a.ID, b.ID
from EM as a, EM as b, ER, CR
where a.City = b.City and a.ID <> b.ID and a.ID = ER.ID and b.ID =
CR.Teacher_ID and a.ID < b.ID
group by a.ID, b.id;
ID | ID
ID | ID
Edit Simplified and dumped the derived table.
SELECT DISTINCT em.ID as Employee ,cr.Teacher_Id as Teacher FROM EM em INNER JOIN ER er ON em.ID = er.ID INNER JOIN CR cr ON er.Cnum = cr.Cnum INNER JOIN EM te ON cr.Teacher_Id = te.ID AND em.City = te.City
This will get you all pairs of employees and teachers of some course that live in the same city. DISTINCT is here in case they actually are in 2 courses together.
Note E3 and E12 are also a match as well as E4 and E13 but they are not listed in your example result.