When you write CREATE VIEW active_customers AS SELECT id, name, email FROM customers WHERE status = 'active', you are not creating a new table. You are saving a query under a name. From then on, SELECT * FROM active_customers behaves like reading a table, but the rows are computed on the fly from the customers table each time.
Because a view stores only the query text, it takes up almost no space and never goes stale. If a row in customers changes, the next read from active_customers reflects that change immediately. There is no second copy of the data to keep in sync.
Views can be built on top of other views, joins across many tables, aggregations, or filtered subsets. The application sees a clean, stable shape, while the real tables underneath are free to be normalized, renamed, or restructured.