This page contains the Google Ads Query Language grammar reference. For query structure details,
see [Query structure](https://developers.google.com/google-ads/api/docs/query/structure).

## Grammar reference

Here is the Google Ads Query Language grammar reference (in regular expression notation):

    Query            -> SelectClause FromClause? WhereClause? OrderByClause?
                        LimitClause? ParametersClause?
    SelectClause     -> SELECT FieldName ("," FieldName)*
    FromClause       -> FROM ResourceName
    WhereClause      -> WHERE Condition (AND Condition)*
    OrderByClause    -> ORDER BY Ordering ("," Ordering)*
    LimitClause      -> LIMIT PositiveInteger
    ParametersClause -> PARAMETERS Literal "=" Value ("," Literal "=" Value)*

    Condition        -> FieldName IS NULL
                      | FieldName IS NOT NULL
                      | FieldName BETWEEN Value AND Value
                      | FieldName Operator Value
    Operator         -> "=" | "!=" | ">" | ">=" | "<" | "<=" | IN | NOT IN
                      | LIKE | NOT LIKE | CONTAINS ANY | CONTAINS ALL
                      | CONTAINS NONE | DURING
                      | REGEXP_MATCH | NOT REGEXP_MATCH
    Value            -> Literal | LiteralList | Number | NumberList | String
                      | StringList | Function
    Ordering         -> FieldName (ASC | DESC)?

    FieldName        -> [a-z]([a-zA-Z0-9._])*
    ResourceName     -> [a-z]([a-zA-Z0-9_])*

    StringList       -> "(" String ("," String)* ")"
    LiteralList      -> "(" Literal ("," Literal)* ")"
    NumberList       -> "(" Number ("," Number)* ")"

    PositiveInteger  -> [1-9]([0-9])*
    Number           -> -?[0-9]+(\.[0-9]+)?
    String           -> ("'" SingleQuoteChar* "'") | ('"' DoubleQuoteChar* '"')
    SingleQuoteChar  -> [^'\\\r\n] | EscapeSequence
    DoubleQuoteChar  -> [^"\\\r\n] | EscapeSequence
    EscapeSequence   -> "\\" ("\\" | "'" | '"' | "n" | "r" | "t")
    Literal          -> [a-zA-Z]([a-zA-Z0-9_])*

    Function         -> LAST_14_DAYS | LAST_30_DAYS | LAST_7_DAYS
                      | LAST_BUSINESS_WEEK | LAST_MONTH | LAST_WEEK_MON_SUN
                      | LAST_WEEK_SUN_SAT | THIS_MONTH | THIS_WEEK_MON_TODAY
                      | THIS_WEEK_SUN_TODAY | TODAY | YESTERDAY

- `?` indicates an optional element.
- `*` means zero or more; `+` means one or more.
- `(...)` indicates a grouping, while `"("` and `")"` indicate literal parentheses.
- `[a-z0-9]` signifies character ranges, and `[^...]` signifies any character except the listed characters.
- `|` stands for "or".

## Rules and limitations

- `FromClause` is required when querying `GoogleAdsService` and must be omitted
  when querying `GoogleAdsFieldService`.

- `WhereClause` supports combining conditions only with `AND`. Logical `OR` is
  not supported; use the `IN` or `REGEXP_MATCH` operator instead.

- The `REGEXP_MATCH` operator uses
  [RE2 syntax](https://github.com/google/re2/wiki/Syntax).

- To match a literal `[`, `]`, `%`, or `_` using the `LIKE` operator, surround
  the character in square brackets. For example, the following condition matches
  all `campaign.name` values that start with `[Earth_to_Mars]`:

      campaign.name LIKE '[[]Earth[_]to[_]Mars[]]%'

- The `LIKE` operator can only be used on a string field, not an array.