The two W3Cx courses, HTML5 Coding Essentials and Best Practices and this one (HTML5 Apps and Games), have covered a lot of material, and you may have trouble identifying which of the different techniques you have learned best suit your needs.
To sum up:
If you need to work with transactions (in the database sense: protect data against concurrent access, etc.), or do some searches on a large amount of data, if you need indexes, etc., then use IndexedDB
If you need a way to store simple strings or JSON objects, then use localStorage/sessionStorage. Example: store HTML form content as you type, store a game's hi-scores, preferences of an application, etc.
If you need to manipulate files (read or download/upload), then use the File API and XHR2.
If you need to manipulate a file system, there is a FileSystem and a FileWriter API which are very poorly supported and will certainly be replaced in HTML 5.1. We decided not to discuss these in the course because they lack agreement within the community and browser vendors.
If you need an SQL database client-side: No! Forget this idea, please! There was once a WebSQL API, but it disappeared rapidly.
You might be interested by the Cache API to make your application data available offline (in other terms: making your Web page or your Web app. available offline).