Jafar concisely answered:
su will let you run a shell with substitute user without
making the shell a login shell.
su - will let you run a shell with substitute user and make the shell
a login shell. If you put no username, it assumes as root (same as su)
Minor elaboration: "su - root" is the same as "su -". While the
omission or inclusion of the username is the same in "su" as "su -", the
response could have been interpreted as "su -" = "su".
sudo will let you run certain or all commands as if you are
root, depending on the settings on visudo file.