First, you will never see a QRY or PROC used in an IF, those are strictly for events like CharacterUsedSkillOnTarget.
Make sure you know the difference between Query and QRY, as well as Call and PROC.
Query is an internal call that takes in fields and returns something. These calls usually pose a question (HasActiveStatus) or specifically state the word get (GetCharacterAbility).
QRY is a very strange way to get a divergent code path (as well as commonalize a conditional statement used across multiple events), meaning it lets you say "Do A OR Do B". A QRY is able to return a DB_NOOP call, which kills the current code path. This lets you, for example, do different things based on if a target is Frozen or Burning without having to hook into the same event twice (more on why this is important later).
A Call is simply a function with no return value. You likely figured this out already. It does something, given arguments. Easy as that.
A PROC is best described as a re-usable function, and it also lets you do multiple reactions to an Event. Say for example, you wanted anyone hit by Fireball to be Burning(pretend Fireball doesn't already burn). Additionally, if they were already Burning, you wanted to Fear them. Again, this would normally take 2 events. But with a proc, it can now be done with a single event.
Now, why is reducing the number of events important? Events are incredibly generic. You are working with a status, but which one? A character did something, but who? Starting at an Event means you are going to need to filter, and in OR or ALSO cases, you have already done this work once. Why do it in every consecutive place if you are always checking "This was a player" and "Was the spell cast fireball?" (or more realistically, "Was the spell cast one of these spells that do custom things in my DB?").
I tried to give very simple examples. Try to write a QRY and PROC given the above examples and let me know what you come up with. Make sure to reference
https://docs.larian.game/Osiris_Overview if you need more help.