Ctrl+P again to print, arrows/tab to navigate results, enter to confirm

    Use the empty string as a name

    The empty string can be used as a column or table name — or both.

    with""as(select 0""union select""+1 from""limit 5)select""from""
    

    Specifying a value and column name with one string

    If we write a string in double quotes it will be used as both column name and value.

    select x from(select"x")
    

    Terminating recursive CTEs (loops)

    A recursive CTE will terminate when we generate a row that already exists or when the limit is reached. All of these statements will generate the values 0, 1, 2, 3, 4.

    with""as(select 0 x union select-~x from""limit 5)select*from"";
    with""as(select 0 x union select x+(x<4)from"")select*from"";
    with""as(select 0 x union select x%4+1 from"")select*from"";
    with""as(select 0 x union select-~x%5 from"")select*from"";
    

    Division by zero to omit rows

    Rows that evaluate to NULL are removed from the output. So these two statements will give the same result.

    with""as(select 0 x union select x+1 from""limit 10)select*from""where x%3=0;
    with""as(select 0 x union select x+1 from""limit 10)select x/(x%3=0)from"";
    

    Question marks

    Instead of writing NULL we may write ?. This is often useful when we don't care about the initial value of a column.

    with""as(select?x,'golf'y union select unicode(y),substr(y,2)from"")select x from""