On this page:
let-alias Entity aliases Attribute and expression aliases
6.2.8 Aliases

Aliases are Snooze’s mechanism for letting you to refer to individual instances of an entity or expression within a query.

You can introduce aliases for entities, attributes or expressions using the following forms (see below for examples):

(define-alias id expr)

Introduces an alias for expr using the same scoping rules as define.

(let-alias ([id expr] ...) body-expr ...)

Like define-alias but uses the same scoping rules as let. Entity aliases

It is sometimes necessary to refer to more than one instance of an entity within a query. Snooze lets you do this by defining aliases for entities. For example:

  (define-alias father person)


  ; Luke's father:


   (sql (select #:what  father

                #:from  (inner person


                               (= person.father-id father.id))

                #:where (= person.name "Luke")))) Attribute and expression aliases

It is sometimes useful to assign an alias to an attribute or expression.

For example, if you are #:ordering on an expression, SQL 97 requires you to add the same expression to your #:what clause. The only way to do this is to alias the expression:

  ; All people and BMIs, ordered by BMI:

  (let-alias ([bmi (/ person.weight person.height)])


     (sql (select #:what  (person bmi)

                  #:from  person

                  #:order ((asc bmi))))))