As you’ve seen in the previous two chapters, you can store and retrieve documents very quickly with key-based operations and perform some pretty complex queries and aggregations with views. However, even with these two mechanisms, you are limited to finding known keys and searching in pre-defined indices within a single bucket. You can’t perform ad-hoc queries programmatically, nor can you search across multiple buckets. This is where N1QL comes to the rescue! N1QL (pronounced “nickel”) is a new query language with a familiar, SQL-like syntax. As of this writing, it is still not available in production and is only offered as a developer preview. We will use the most recent version, which is Developer Preview 3, to learn how to use N1QL.