Why can I see two Push settings in iPhone? I know more or less how Push works, but why is there a Push on top (in Settings → Accounts &amp; Passwords → Fetch New Data) then other options for iCloud, Outlook, Gmail etc?.

Is any of these related to My Photo Stream or iCloud Photo Library? Do these use Push or Fetch too?
The top push toggle allows you to override any accounts that have push set up. The data will then be fetched from the servers according to your fetch settings at the bottom.

iCloud and Outlook will be fetched with your current settings because you’ve essentially disabled push from any of your accounts (which saves battery and cell data). If you turn it on, they will both be pushed immediately (meaning your phone is constantly “listening” to the server for any updates) because that is how you set them on an individual level (the override is now off).

If you click on iCloud/Outlook you’ll see this explained when push is selected: 


  “If Push is not available [because you toggled it off], the Fetch schedule will be used.”


———

In the comments of Nimesh’s answer you explain a flawed experiment. When you opened iCloud Drive on your phone, it fetched immediately. The way to test would be to send yourself an email from another device to either your Outlook or iCloud account and see how long it takes to get a notification, 

If you have it set to fetch (check the server) every 30 minutes, it should come within 30 (not at 30 exactly, as it may be closer to the next time it checks the server).

Push, on the other hand, would be instant.

Of course the actual server changes immediately when you send an email etc but fetch vs push refers to how often it checks for those changes on your iPhone without you opening it “manually”. In practice, this is really only visible in terms of notifications (also whether the data would already be populated when you open the app).