Thanks for you answers, you've clarified it very well.
Please allow me to sum this up and correct me if I'm wrong:
The Push and Fetch settings in iOS settings determine how often your device will check with service providers for updates for Mail, Calendar, Contacts, Notes, etc (with updates I don’t mean “software updates”, it’s just basically asking if there’s any new email, note, etc). The reason for their existence is for the user to be able to decide how much battery, cellular (or WI-FI) data and other system resources (software and hardware workload) will be used for these services. So if you’re lost in an airport and you’re concerned about the iPhone battery running out, you can set up these services to any of these Fetch options, or just put your iPhone into Low Power mode, which will set these to Fetch to save battery.
These settings are set up in Settings > Accounts & Passwords > Fetch new data (this is for iOS 11.3).
Here’s how these settings operate:
Fetch queries the servers as often as you set it up, every 15 minutes, 30 minutes…. Each fetch takes a toll on system resources, so the longer the interval, the less of these resources will be consumed.
Push is sort of “fetch all the time”, not sure what it does exactly, if it’s in fact querying the servers every 5 seconds or what, but it’s asking all the time if there’s any new email, contact, etc and it’s pretty instantaneous. This of course consumes more battery and system resources, as the device is querying the different servers all the time asking for news.
Fetch can be also set up as “automatically”, meaning, “query the servers automatically whenever I put the iOS on charge if it’s connected to a WI-FI network”. So if for example, you only plug in your iPhone before going to bed every day, that's when any new emails etc will be checked for, provided it's connected to WI-FI.
Fetch can also be set up as “manually”, meaning, whenever you open the app (such as the Mail app).
You can set up Push or Fetch separately for each of these services and then you can override all of them at once by turning off “Push” at the top of the screen, which means that Fetch will be used for all services.