This is possible, SAQL has a cogrouping function which allows you to join two or more datasets together. This allows for both inner and outer joins.
Another option is to pull the data into Wave using a Dataflow, here you can use the Augment function however at the moment the types of join that can be done in the Dataflow are more limited, e.g. for multiple matches, the only option is the have the returned results in a comma separated list rather than multiple rows.
Filtering is possible in both the Dataflow and SAQL.
I would use the dataflow to join the datasets to the required form as far as is possible, and then use SAQL to join where the Dataflow does not provide you with the required type of joins.