You should pretty much never need to use require explicitly, though it is used (as far as I know) when you do using/import.
Include is used when you explicitly want to load code no matter if it has been loaded before. If you reload a source file that defines a package, the old package will be replaced with a new one that is initially empty, so you do want to reload the contents no matter what.
