As we know very well by now, GIS is the combination of the spatial and non-spatial. Lots of times, spatial data will often have the non-spatial data we need attached to it via the attribute table when we download it, while other times we need get that non-spatial data from somewhere else and bring it into the GIS through the process of joining or relating the data together. Whether the data is brought in and joined or related together with existing data, we utilize the values found in the attribute table to explore patterns in our data, look for specific values, create new values by looking at imagery and modifying the attribute table, completing arithmetic between fields (the GIS name for columns), and even automate the population of new values using the programming language Python and the database language SQL.
Attribute tables, the table that holds the values associates with the spatial features, can have as little as one feature with one field or thousands of features with hundreds of fields. If you are looking for a specific value when there are only a few features or a few fields, finding the information is pretty easy, but when that attribute table has thousands of individual values across a large number of fields, finding the information you're looking for becomes a bit more challenging. To overcome this challenge, we have tools at our disposal to search through those (possibly) thousands of values. We use a database language by the name of SQL or the structured query language to search for values which meet our search criteria.
Other times, the attribute table doesn't quite contain the values needed to highlight or select the spatial features which match our search criteria. For those situations, through the awesome power of GIS, features can still be found and selected utilizing tools which allow features to be selected based on their spatial relationships with other features in lieu of known values within the attribute table.