SQLite could also be mentioned here because it's flexibility allows it.
If you don't mind losing data after a crash, disable that feature with "PRAGMA synchronous=OFF".
If you want a memory database, just open the ":memory:" database.
You can attach several databases and proceed as if it's just one.
You want even more control, use the "virtual tables" feature, where you can treat, for example, CVS files as tables, or even create a virtual table that connects to another database.
By implementing a new "VFS" layer you can change the low-level interface with the "disk", like add encryption, compression, make I/O using mmaped memory, whatever.
It's not a database for dummies. The "lite" in SQLite means you don't have a full blown SQL optimizer, so you need to do the work of actually optimizing the SQL queries beforehand. That is your job as a programmer, not SQLite.