A GraphQL query is parsed and validated against the schema before being executed. The execution process involves parsing the query into an abstract syntax tree, validating it against the schema, and then executing the resolve functions for each field in the query. These resolve functions can contain arbitrary code and are used to fetch data from various backends. The server takes the results of these resolve functions and passes them up to the root of the query, returning the final result. GraphQL's execution model is designed to be efficient and scalable, with features like batching and caching to reduce the number of requests to the backend.