Node.js is a JavaScript runtime environment, which means it's responsible for running all of your server-side code. Express is a Node.js framework with basic functionalities for constructing web applications. While Node.js can already listen on a port for requests, Express simplifies the process of setting up a web server by removing boilerplate and providing a simpler API for constructing endpoints.
A query language is GraphQL. The JavaScript implementation of GraphQL is GraphQL.js. Neither is capable of generating a web server or an endpoint. GraphQL does not listen to requests forwarded to a certain port. This is what Express is for: when used with another library like apollo-server-express or express-graphql, it puts up our endpoint, waits for incoming requests, parses them, and passes them to GraphQL to execute. The execution result is then sent back to the client who submitted the request.
GraphQL.js, on the other hand, is unable to connect to a database directly. In response to a request, GraphQL simply executes the code you give. The actual database contact is usually done through a driver (such as mongodb) or an ORM (like mongoose).
So a client (like your React app) sends a request to your Express app, which parses it and sends it to GraphQL, which runs your query and, in the process, invokes some code that retrieves data from your database. This information is structured and returned to the client in an appropriate response.