$projection is used, when you want to refer to a name defined as alias in the projection list e.g. in an on-condition of an assocation.
The 1: when using a filter for an association tells the compiler, that the association gets a to 0..1 cardinality when the filter is applied. Otherwise you would get a warning that the cardinality of your view might change by following the assocation.
Associations can be used within CDS, from OpenSQL or by exposing then via OData.