Queries are used to find constituent records based on a certain set of query logic. Reports are used to find specific information about what your constituents did. For instance, if you need to generate a list of constituents who are in a specific group, are from a certain state, or a list of people who have opted out of email, you would use a query. If you wanted to generate a list of donations to a campaign, or registrations to an event, you would want to create a report.

Another way to think of this is Reports are used for obtaining information regarding what constituents have done e.g. find what donors have made donations on a specific form, registered for specific events, etc while queries are used for obtaining information about constituents e.g. find all records that are currently active, opted into email, records with a specific, first name, last name, email address, etc.)