Derby is absolutely the best when it comes to needing a small, embeddable RDBMS in your applications. Certain jobs, like Risk Modeling, are perfect for a database that is small enough to fit into memory with no trouble then store data from various sources, and then allow a user to access those data sets quickly.
This really depends on the use case. For an in-memory replacement database for running unit test cases with, H2 Database Engine is an excellent option. However, if you are looking for a general purpose database for your production systems, then H2 Database Engine is not suited for this purpose.
Not as well positioned in the market as the "big dogs" (Oracle, MSSQL)
Been around awhile, and not a lot of exposure. This I believe is primarily due to it's relation to the Apache Project (which is not bad, but they don't force big, lumbering corporate volume licensing on you), and thus people are a bit gun-shy about NOT throwing money at something
Java is still "slow" compared to C/C++, thus making Derby a bit slow too
SQLite is another open-source zero-cost file-based SQL-capable database solution and is a good alternative to Apache Derby, especially for non-Java-based solutions. We chose Apache Derby as it is Java-based, and so is the solution we embedded it in. However, SQLite has a similar feature set and is widely used in the industry to serve the same purposes for native solutions such as C or C++-based products.
Both MySQL & H2 [Database Engine] are relational databases & use same query language. Application features can be implemented with both but if it's expected that the application will be used by large user base or is complex MySQL is better. Cloud providers provide scaling support for MySQL and also it's more battle-tested. H2 is good when it's a small application as H2 is easier & quicker to set up.