A table is like a box of things in it. Each thing in the box is labeled so that you know what it is.
When you use the pairs loop, you are looking at each item v and its label i. In more “computer science” terms, that’s considered the “value” and “index” (hence the v and i). The index is the label, which identifies the value.
You use it in just about any instance when you want to iterate over a table of items. Ideally, you would use ipairs if iterating over a table where all the indexes are numerical, in order, and start at 1 (i.e. a typical array). But if you have indices in the table that are non-numeric, then you want to use pairs to access them.
One possible use-case is having a table where the players act as the key/index, and points to another table with player data. You might want to use a pairs loop to get the data for all the players in order to save/transform/read it.