Tal y como lo planteas deberías tener tres tablas +/- así:
---------------
Tabla: PROFESOR
---------------
ID_PROFESOR NOMBRE_PROFESOR
----------- ---------------
P1 Fulano
P2 Mengano
P3 Zutano
P4 Perengano
------------
Tabla: GRUPO
------------
ID_GRUPO NOMBRE_GRUPO
-------- ------------
G1 Grupo A1
G2 Grupo B1
G3 Grupo C1
G4 Grupo D1
---------------------
Tabla: PROFESOR_GRUPO
---------------------
ID_PROFESOR ID_GRUPO
----------- --------
P1 G1
P1 G3
P1 G4
P2 G2
P2 G4
P3 G1
P3 G2
P3 G4
P4 G2
A partir de ahí, cada vez que quieras recuperar a que grupos les da clase un profesor, es tan sencillo como hacer una join de tablas:
SELECT
GRUPO.ID_GRUPO
, GRUPO.NOMBRE_GRUPO
FROM
PROFESOR
, PROFESOR_GRUPO
, GRUPO
WHERE
PROFESOR.NOMBRE_PROFESOR = 'Fulano'
AND PROFESOR.ID_PROFESOR = PROFESOR_GRUPO.ID_PROFESOR
AND PROFESOR_GRUPO.ID_GRUPO = GRUPO.ID_GRUPO
Y a partir de aquí, ya es cuestión de que juegues con la consultas para ir obteniendo la información que quieras.
También podrías hacerlo por código. Según como sean las tablas, lo que quieras obtener, la base de datos con la que estés trabajando y el volumen de datos que esperes recuperar, podría incluso ser más rápido.