Use the Database methods when you need more control than the default behavior of DML and query statements.
Allows partial success instead of all or none.
Allows another means of getting count() without explicitly writing a second query.
Allows partial success or other DML operations, such as assignment rule evaluations.
Allows removing items from the recycle bin permanently (no DML-only keyword).
Allows the getDeleted API call (no DML-only keyword).
Used to return a query locator when needed, such as for a StandardSetController or Batch Apex Code (no DML-only keyword).
Allows the getUpdated API call (no DML-only keyword).
Allows partial inserts, and other DML operations.
Allows greater options than the standard merge keyword.
Allows querying on a dynamic-built string (e.g. to specify filters that are unknown at compile time, dynamic field selectors, etc).
Allows recovering entries from the recycle bin, with additional options.
Allows partial updates on records, and additional options, such as assignment rule evaluation.
Allows partial updates on records, and additional options.
Some functions are only available through Database (e.g. they have no equivalent keyword), and most all of the functions allow greater functionality than is available in the keyword model.