Pop quiz: funny syntax

November 5, 2012

The following questions are of little importance, yet I find them entertaining. I stumbled upon these while developing QueryScript.

Can you guess the results of the following statements?

Pop quiz 1

SET @x := 7;
SELECT ++@x;

What is the computation result? What will be the value of @x?

Pop quiz 2

SET @ := 4;
SELECT @ + @'' + @``

What is the computation result?

Pop quiz 3

SET @a := 2;
SELECT @a = @'a' = @`a`

Do we get TRUE or FALSE? When?


Consider the following queries as hints to the above questions:

SELECT +++++-@x;
SELECT @ = @'', @ = @``
SELECT (@a = @'a') = @`a`


  • Pop quiz 1

++@x is interpreted as +(+(@x)), which is in turn evaluated as 0+(0+(@x)). No relation to C's ++ operator. @x is unchanged.

  • Pop quiz 2

@x is the same as @'x' and as @`x`. What's funny is that one is allowed to create the empty-named user defined variable @''. Makes for a weird looking syntax, but nothing special about it. Computation result is 12.

  • Pop quiz 3

We've already established that @a, @'a' and @`a` are the same, I just used this notation for adding pepper to the quiz. The real question is whether 2 = 2 = 2 holds true.  It does not. There is no 3-way comparison. All comparisons are in pairs, which is why the expression evaluates as (2 = 2) = 2, leading to 1 = 2, "1" being the TRUE value of (2 = 2). The only value of @a for which the expression holds true is 1.

  • Another quiz. (People do try this in WHERE clauses.)
    SELECT 123 < col < 456;

    That probably evaluates to
    SELECT (123 < col) 1 (and sometimes >0).

Powered by Wordpress and MySQL. Theme by openark.org