It seems as though the issue here is not that your players were upset by the fact that their characters died, it's that your players were upset by the fact that their characters died even though they wanted to play a "dark, rough, and dangerous" game in which their characters were at risk of dying.
Sometimes, people just get upset.
Psychology is an odd thing. Humans are interestingly able to want something very badly and then be unhappier once they get it. For many people, having your characters die, be wounded, lose equipment, or fail to complete their objectives is upsetting. It's unenjoyable. It makes them angry or frustrated in the same way that losing at a competitive sport can make people angry or frustrated. Defeat is not always an easy thing to take gracefully.
Personally, I recently felt quite disheartened and frustrated when I lost a game of Diplomacy because I'd been betrayed by another player (note: Diplomacy is a board game almost entirely concerned with betrayal and backstabbing). Even though I knew from the outset that this was part of the game, and knew that it was ultimately fairly irrational for me to feel upset, the fact remained that I did. It was a natural emotional response to seeing all my plans dashed and my chance of winning slip through my fingers. I found I didn't really care about continuing to play anymore, and even though I tried to convince myself that I should still care, my heart wasn't in it.
Would I play Diplomacy again? Absolutely. But that doesn't change the fact that it hurt to lose, and it hurts to lose in Shadowrun as well. Emotion leaks, and not everyone is good at preventing it from leaking. Even if your players want to be punished harshly for their actions... they still might get upset when they are punished for their actions. This doesn't necessarily mean you shouldn't punish them.
How to minimise people getting upset
So, it might be inevitable that people get upset to some extent. This doesn't mean there aren't things that can be done to avoid it.
If players cause their characters to make legitimately poor decisions that, based on the information they have and their understanding of it, lead to what they consider to be consequently deserved negative outcomes for their characters (and only their characters), then this is the best possible situation with the least amount of upsetness.
But communication is key in every stage of the process.
If players don't have complete information about the expected consequences of their decisions (even if their characters do) then they'll feel cheated when they get negative consequences they feel they couldn't have known about. Particularly in situations where the stakes are high, it can often be a good thing to clearly and explicitly state to the players, out of character, what you think they should know (based on their characters' understanding) what the expected outcomes of their decision are. For example, saying something like "Are you sure you want to jump into the hole? Just so we're clear, it's a fairly long drop and it's too dark for you to tell what's at the bottom, it could be spikes or something, and even if there's nothing bad you might not be able to get back up again." This ensures that the players are making informed decisions (even if it's the informed decision to have their character make an uninformed decision) and clears up any potential misunderstandings before they happen (maybe when the player imagined that hole, he thought it was just a meter or so deep!)
If the characters have incomplete information, it's equally difficult for the players to make realistic decisions. And it's often difficult for characters to get anything more than incomplete information. I recommend erring on the side of being generous when characters act "stupidly" based on what information they've had access to in-world. Yes, there should be some cost to characters choosing to rush in blindly or disregard signs of danger. But clues that are obvious to the GM are often painfully opaque to the players. See some of the answers to this question for effective ways to communicate danger to players.
Even if the players and the characters have relatively complete information, there may be a lack of shared understanding as to what exactly constitutes "reasonable consequences". To some groups, character death is something that should be completely off the table. To some groups, significant character-altering bad things (e.g, loss of a limb, new negative Traits) should never happen to a character without the player's express out-of-character permission. Possibly your players think they want a "rough, dark, dangerous" game but their understanding of "dangerous" is different to yours.
This is a good time for you and your players to use the Same Page Tool to narrow down what exactly the expectations are.
Okay, I did all that, but they still get still upset! What do I do?
It's not easy to deal rationally with frustrated players. They feel like they've failed and they feel powerless, and consequently they're disincentivised to keep engaging with the game (on both counts: they've been hurt by the fact that they've failed and don't want to be hurt again, and they feel like they have no power to influence events, so why bother?)
If you must make players fail and suffer harsh consequences, you should try to minimise both how hard the failure should hit and how powerless they are as a result. An entirely unrecoverable failure is kind of frustrating even if it's deserved. If they're already frustrated, you should do what you can to give them back some power. If possible, try to do this without entirely eliminating the sharpness of their failure (otherwise it feels like you're just capitulating to their tantrum, which is not what they want and so will not make them feel batter). But show them that even though they've suffered consequences, they haven't lost their ability to achieve their goals. For example, they're badly wounded and they don't think they can successfully contribute to the fight anymore? Reframe the conflict for them personally: give them a chance to get away before the enemy kills them (and oppose them limitedly in that goal rather than in the rest of the party's goal of winning the fight). Or give them a chance to, while wounded, crawl over to the grenade the enemy leader dropped on the ground and toss it. Make them feel like they still have agency.
Finally, if a player is becoming so frustrated and upset that they're making it hard to say that the game is actually fun, it might be time to give them a bit of space. You can:
- switch focus: swap to another section of the party or do a "meanwhile" segment with a group of NPCs or cut backwards or forwards in time
- rush to a conclusion: say that most of the fight goes out of the enemy as soon as the players kill the next one, or say "okay, you kill the rest of them, we don't really need to bother rolling dice, you're going to win eventually", or tell them that enemy reinforcements are arriving in great numbers and they think it's probably a losing battle - do they want to run while they've got the chance?
- if entirely necessary, just stop playing entirely and resume next week when everyone's had a bit of a chance to calm down.
You could say to your players, "Y'know, in this campaign, not all problems can be solved by punching them. And some problems that could be solved by punching could be better solved by not punching, or by punching with strategy instead of with no real plan. What I mean to say is, punching things in the head is a good solution to a lot of problems, but it's not universal. That's the kind of campaign I'm running, here. I probably should have mentioned that earlier."
This method of conveying your point has the advantages of being A) accurate, B) clear, and C) Not taking long.
In my experience, the best way to tell your players about out-of-character and meta-game expectations is to tell them. It's a better way to avoid misunderstandings than subtle hints and in-game encouragement.
Best Answer
Set their expectations on what you can and cannot do straight.
I remember the same thing from my first D&D session. We were walking along, chatting amongst ourselves, when we came across a cow. Since that was one of the first things we, as players, encountered in that world, we bombarded the cow with skill checks and wasted like 15 minutes. In the end, it was just a regular goddamn cow (who would have guessed ^^).
Ultimately, we learned from this encounter (and various others in the first few sessions) that not everything is mysterious just because the DM mentioned it.
Where is your players' behavior coming from?
Concerning your players: The first thing we need to figure out is why they focus so much on details. Is it like in the example above, that they simply think that because you mentioned it, it has to be important? Or is it something else?
The way I see it, however, is two-fold. On one hand, I'm gonna go out on a limb here and say that your players came to pen & paper from video games (or behave like someone who does), and as a consequence, they have unrealistic expectations on what you can and cannot do.
Your players are behaving like they are used to behave in video games.
First of all, your players seem to be highly focused on looting, indicated by the fact that they're pissed when they want to loot the ruin but there's nothing there. This is directly related to their (supposed) video gaming background I mentioned above.
More precisely, video games run on high-performing computers, which have no issues whatsoever in tracking every little piece of trash that the player picks up.
Coming up with (as DM) and tracking (as players) this kind of loot is, however, not viable in RPGs. Additionally, making each of your players roll 15 separate investigation checks for every single ruined house, giving them a broken broom (metaphorically or literally) on a "success" is not fun for anyone. Instead, if they want to loot the ruins, summarize it as
Depending on how roll-loving your group is, you can make everyone roll, or let one person roll with advantage. The latter would mechanically be the Help action, meaning that your most investigative player checks out the place and gets help from the others.
I suggest using the latter version since the first version means that regardless of the DC (unless it's higher than 20, ruling out players with low modifiers), there will likely always be at least one player succeeding on the check. This is less problematic during looting since you can simply scale the loot based on the number of successes, but it will get problematic during boolean checks - i.e., how can I activate this extendable bridge? In that case, only one person has to succeed.
Insisting on the first version would be rather cheesy from your players, but which one you agree on (or which one you choose, since it's ultimately your decision) depends on you and your group.
As a consequence of treating D&D like a video game, your players have unrealistic expectations of you. Make it clear to them that you're not a computer.
The second problem that your group seems to have, which in my experience is not uncommon either, is that they have unrealistic expectations of what the DM can and cannot do.
For example, when your party ventures into a new town, you as the DM can prepare a few NPCs, such as a major, a vendor on the marketplace, and a cleric in a local temple.
Furthermore, when your players suddenly decide to search for a rather exotic kind of NPC, such as an herbalist or a cobbler that you didn't prepare, you should be able to come up with one on the spot, using things like name lists that allow you quickly improve the NPC. (This can be rather hard to do in the beginning, don't get discouraged - it gets easier.)
What you cannot do is to prepare a list of 200 books that a bookstore you potentially just improvised sells. Your players, being accustomed to video games which require years of development (unlike your session), want to look through all of the books to make sure whether or not there's a book that they might like or could use.
You need to make it clear to your players that this kind of preparation would require an enormous amount of preparation that simply exceeds all realistic expectations. This is a key argument, if you can't get your players to accept that there are limits to what you can do and prepare for, it won't work out.
It might help to let other people be the DM in a One-shot, so they realize what they're asking for, but I feel like that would just create other problems down the road (e.g. players trying to tell you that you're doing your job wrong, since they know a little bit about it as well). Hence, I would only choose this means as a last resort.
As a side note, due to the fact that you can't mention every little detail, your players try to jump on every little detail that you do mention. Make it clear to them that, just because you mention something, does not mean it is necessarily relevant to the story or has some hidden meaning. Thanks to @LinearZoetrope for reminding me to clarify this potential issue (which is, btw, the same one I mention in my cow-story at the beginning).
To handle a situation where players want to look through a bunch of books, make it clear that what they want to do is what their characters are doing, but you only present them with the conclusion that their characters came to. Similarly, your players probably don't roleplay going to the toilet (or even mention it), even though your characters most certainly do use the toilet.
You can describe it as following:
Obviously, you can switch out these books for something more suitable for your campaign. It might also help to have a number of book titles prepared (I'm sure you'll find a bunch on google), so you don't have to come up with them on the spot.
I also recommend you to check out How can I handle players who want to browse shops at random? (disclaimer: I originally asked & answered that question).