Основные запросы

На изучение основ запросов в EdgeQL не требуется много времени. Он сочетает в себе интуитивность ORM с мощью чистого SQL.

Все приведенные ниже запросы предполагают следующую схему.

Схема для тестирования запросов
abstract type Person {
  required name: str {
    constraint exclusive;
  };
}

type Villain extending Person {
  nemesis: Hero;
}

type Hero extending Person {
  secret_identity: str;
  number_of_movies: int64;
  multi link villains := .<nemesis[is Villain];
}

type Movie {
  required title: str;
  multi characters: Person;
}
  select Hero {
    id,
    name,
    secret_identity
  };
  select Hero {
    id,
    name,
    secret_identity
  }
  filter .name = "Tony Stark";
  select Hero {
    id,
    name
  }
  filter .id = <uuid>'d3b353c6-9d33-11eb-aea4-67d68adf9596';
  # no joins! no foreign keys!
  select Hero {
    id,
    name,
    villains: {
      id, name
    } filter .name ilike 'The %'
  }
  filter .name = "Peter Parker";
  # no joins! no foreign keys!
  select Hero {
    id,
    name,
    all_caps_name := str_upper(.name),
    villain_list := array_agg(.villains.name)
  }
  filter .name = "Tony Stark";
  # no joins! no foreign keys!
  select Hero {
    id,
    name,
    all_caps_name := str_upper(.name),
    villain_list := array_agg(.villains.name)
  }
  filter .name = "Tony Stark";