T1 will have all the available course numbers
T2 will have all the course numbers completed by student2310
T3 will have the combination of all the courses and the courses completed by student2310
PRE_REQ - T3 (set minus operation) will return us all the entries of PRE_REQ which are not there at T3,
Suppose <C1,C5> is a particular tuple of (PRE-REQ - T3),
Now what does it implies? -->It implies that C5 is one of the prerequisite course for C1 which has not been completed by C5. Proof: If student2310 would have completed C5 then definitely <C1,C5> should have been there at T3(remember T3 is the combination of all the courses and the courses completed by student2310) and in that case (PRE_REQ - T3) can't have <C1,C5> as a tuple.
So, for any such <C1,C5> tuple, (<C1, any course id>) of PRE_REQ - T3, C1 should not be printed as output(Since there is some prerequisite course for C1 which student2310 has not completed).
Now, suppose we have not got any tuple as a result of (PRE_REQ - T3) where C2 is there under cno attribute(<C2, any course id>), what does it implies?--> It implies that student2310 has completed all the prerequisite courses C2.
Hence, in order to get the final result we need to project cno from (PRE_REQ - T3) and subtract it from T1.