Перечень статей   Терминология   Choose language


Синтаксис SQL/XLang


Выводимые поля

Поля, которые необходимо извлечь, перечисляются в XTree-выражении после служебного слова 'from' (после служебного слова 'select' перечисляются выводимые звенья - см. ниже). Если не указано не одного поля, то это эквивалентно указанию всех полей.

select * from a.b[@b1 @b2]; -- select only "b1" and "b2" from "b"
select * from a.b;          -- select all fields from "b"
                            -- (except used references fields)
Поля могут быть переименованы.
select * from a.b[@b1 as @m,    @b2 as @n];
select * from a.b[@b1 as @m and @b2 as @n];

Выводимые звенья

Часть звеньев дерева может быть скрыта от вывода. Для этого все дерево записывается после служебного слова 'from', а выводимые звенья - после служебного слова 'select'.

select b.d
from   a.b.c.d;      -- extracts
                     --   <b>
                     --     <d><d>
                     --   </b>
                     --   <b>
                     --     <d><d>
                     --   </b>

Виртуальные внешние ключи

Для конструкций вида 'a.b.k.m', где "a" и "b" связаны внешним ключом (FK), "k" и "m" связаны внешним ключом, а между "b" и "k" внешнего ключа нет, можно задать виртуальный (временный, сроком действия на одно sql-выражение) внешний ключ. Виртуальные внешние ключи перечисляются после служебного слова 'where'.

Таким образом SQL/XLang работает не только с отдельными таблицами, а с целыми конгламератами таблиц (с деревьями).

select a.b.k.m
from   a.b , k.m     -- trees "a.b" and "k.m" must physically exist
where  b/@b1=k/@k1   -- virtual FK to join 'a.b' and 'k.m' into 'a.b.k.m'

Для конструкций вида 'a.b*.c' и 'a.b+.c', где "a" и "b" связаны внешним ключом (FK), "b" и "c" связаны внешним ключом, а "b" не ссылается сам на себя с помощью внешнего ключа, можно задать виртуальный внешний ключ после служебного слова 'where', связав предыщущий и последующий "b". Предыщущий и последующий "b" указывают в функциях previous и next.

select *
from   a.b*.c
where  previous(b).b2=next(b).b1  -- virtual FK, something similar
                     -- select x.y
                     -- from b x y
                     -- where x.b2=y.b1

Псевдонимы таблиц и виртуальные FK

Псевдонимы (alias) таблиц по-прежнему перечисляются после служебного слова 'from'. Псевдонимы могут использоваться в для задания виртуальных внешних ключей.

select p.q.r
from   c p q r       -- "p, q, r" are alias-es of "c"
where  p/@c2=q/@c3   --  virtual FK
  and  q/@c4=r/@c5;  --  virtual FK
select a.b.p.q.r
from   a.b, c p q r  -- "p, q, r" are alias-es of "c"
where  b/@b1=p/@c1   --  virtual FK
  and  p/@c2=q/@c3   --  virtual FK
  and  q/@c4=r/@c5;  --  virtual FK

Условия на поля

Отношения, связывающие поля дерева, могут быть перечислены как после служебного слова 'from', так и после служебного слова 'where'.

Примеры слева и справа эквивалентны.
from a.b[@b1=5]
from a.b[@b1]
from a.b.c[@c1=../../@a1]
from a.b[position()=1 xor @b1=5]*.c
from a.b[last() xor @b1=5]*.c
from a.b    where @b1=5            -- where b/@b1=5
from a.b    where @b1 is not null
from a.b.c  where @a1=@c1          -- where a/@a1=c/@c1
from a.b*.c where first(b)/@b1=5; 
from a.b*.c where last(b)/@b1=5;
Отношения между полем и множеством перечисляются после служебного слова 'where'.
where @b1 in (select ... )                                                   -- where b/@b1 in (select ... )

Отказ от прежних обозначений

Чтобы не вводить пользователя в заблуждение и не вносить расстройство в умы, нужно отказаться от трех старых обозначений и заменить их новыми.

select a.a1
select a/@a1     -- old notation to request fields instead of sections
where b.b1=5
where b/@b1=5
from scheme.tab
from scheme§tab  -- database%scheme§tab

Тюрин Дмитрий



Перечень статей   Терминология   Choose language