/**************************************************************************************/
/* File:        demo08                                                                */
/* Project:     TimeDB 2.0 : Normalisation and Subqueries                             */
/* Author:      Andreas Steiner                                                       */
/* Date:        28-07-1998                                                            */
/* Results:                                                                           */
/**************************************************************************************/

create table test(c char, i period, n integer) as validtime;

validtime period [1980-1999)
  insert into test values ('c', period [1980-1990), 9999);


validtime
  select *
  from test;



/* Subqueries with exists-predicate : */
/* ================================== */

select *
from test
where exists (select * from test);


validtime
  select *
  from test
  where exists (select * from test);


select *
from test
where exists (select *
              from test
              where c = 'c');

select *
from test a1
where exists (select *
              from test a2
              where a1.c = 'c');

validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where a1.c = 'c');

select *
from test a1
where exists (select *
              from test a2
              where a1.c = a2.c
              and not exists (select * 
                              from test a3
                              where a2.c = a3.c));

validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where a1.c = a2.c
                and not exists (select * 
                                from test a3
                                where a2.c = a3.c));

validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where a1.c = 'c'
                and not exists (select * 
                                from test a3
                                where a2.c = a3.c)
                or exists (select * 
                           from test a3
                           where a2.c = a3.c));

validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where a1.c = 'c'
                and 1=1
                or exists (select * 
                           from test a3
                           where a2.c = a3.c));

validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where a1.c = 'c'
                and 1=1
                or exists (select * 
                           from test a3
                           where a2.c = a3.c
                           or exists (select * 
                                      from test a4
                                      where a2.c = a4.c)));

validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where a1.c = 'c'
                and not exists (select * 
                                from test a3
                                where a2.c = a3.c
                                union
                                select * 
                                from test a4
                                where a2.c = a4.c)
                or exists (select * 
                           from test a5
                           where a2.c = a5.c));

validtime
  select *
  from test a1
  where exists (validtime period [1982-1990)
                select * 
                from test a2
                where a1.c = a2.c
                and exists (validtime period [1984-1988)
                            select * 
                            from test a3
                            where a2.c = a3.c));

validtime
  select *
  from test a1
  where exists (validtime period [1982-1990)
                select * 
                from test a2
                where a1.c = a2.c
                and not exists (validtime period [1984-1988)
                                select * 
                                from test a3
                                where a2.c = a3.c));


validtime
  select *
  from test a1
  where exists (nonsequenced validtime period [1982-1990)
                select * 
                from test a2
                where a1.c = a2.c
                and not exists (select * 
                                from test a3
                                where a2.c = a3.c));


validtime 
  select *
  from test a1, test a4
  where exists (validtime period [1982-1990)
                select * 
                from test a2
                where a1.c = a2.c
                and not exists (validtime period [1984-1988)
                                select * 
                                from test a3
                                where a2.c = a3.c));


validtime 
  select validtime(a1), a1.c, a1.i, a1.n, validtime(a4), a4.c, a4.i, a4.n
  from test a1, test a4
  where exists (validtime period [1982-1990)
                select * 
                from test a2
                where a1.c = a2.c
                and not exists (validtime period [1984-1988)
                                select * 
                                from test a3
                                where a2.c = a3.c));


validtime 
  select 11*30-a4.n, 'steiner', a1.c, 2*a1.n+a4.n
  from test a1, test a4
  where exists (validtime period [1982-1990)
                select * 
                from test a2
                where a1.c = a2.c
                and not exists (validtime period [1984-1988)
                                select * 
                                from test a3
                                where a2.c = a3.c));


validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where exists (select * 
                              from test a1
                              where a2.c = a1.c));

validtime
  select *
  from test a1
  where exists (select * 
                from test a2
                where a1.c = 'c'
                and 1=1
                or exists (select * 
                           from test a1
                           where a2.c = a1.c));


drop table test;



