Virtual columns are defined of SQL:2003 as Generated Column,[1] and are only implemented by some DBMSs, like MariaDB, SQL Server, Oracle, PostgreSQL, SQLite and Firebird (database server) (COMPUTED BY syntax).
Both virtual and persistent columns have advantages and disadvantages: virtual columns don't consume space on the disk, but they must be computed every time a query refers to them; persistent columns don't require any CPU time, but they consume disk space.
[3] Expressions that can be used to compute the virtual columns have the following limitations: Persistent columns can be indexed and can be part of a foreign key, with a few small limitations concerning constraint enforcement.
[6] SQL Server supports both persisted and non-persisted computed columns.
[7] Firebird supports virtual columns, not persistent ones and allows for sub-selects, calling built in functions, external functions and stored routines in the virtual column expression.