Structural hazards: HW cannot support this combination of instructions. For example, no two instructions can be at execution stage simultaneously if there is only one execution unit.
Data hazards: instruction depends on result of prior instruction still in the pipeline. (RAW, WAW, WAR)
Control hazards: pipelining of branches and other instructions that change the PC. If there are branches, it is uncertain which instruction should be issued.
Alleviated with forwarding
Branch instructions are the cause of control hazards