I think I understand the basic functions of | and ; but I don't know if I understand what makes them different. When should you use one over the other?
;: The shell waits for each command to terminate in turn.
|: a pipe. The standard output of command1 is connected via | to the standard input of command2.
&&: command after && is executed only if the previous command returns an exit status of zero.