FROM-спецификация
Функция
Определение таблицы, получаемой из объединения одной или нескольких таблиц (представлений).
Спецификация
::=::=::=[[AS] псевдоним таблицы [( псевдоним столбца [, ...])]
[TABLESAMPLE [ метод выборки ]( процент выборки)]
[REPEATABLE номер выборки]
::=::=::=::=::=Синтаксические правила
-
< Имя таблицы >можно использовать в запросе только тогда, когда< табличная ссылка >не задает< псевдоним таблицы >. -
Максимальное количество < табличных ссылок > равно 32.
-
< Имя таблицы >, указанное во< FROM-спецификации >, не должно совпадать с другим< именем таблицы >, задаваемым в этой же< FROM-спецификации >.SELECT count(*) FROM auto a, auto b WHERE a.PersonID=b.PersonID; SELECT * FROM (SELECT * FROM Person P, Auto A WHERE P.PersonID=A.PersonID) AS Pa, SELECT * FROM PERSON P, Finance F WHERE P.PersonID=F.PersonID) AS Pf limit 5; -
< Псевдоним таблицы >не должен совпадать с другим псевдонимом в той же< FROM-спецификации >и не должен совпадать с< именем таблицы >, заданном в той же< FROM-спецификации >. -
Областью видимости псевдонимов и имен таблиц во
< FROM-спецификации >является вложенный< подзапрос >, содержащий< табличное выражение >с этой< FROM-спецификацией >. Область видимости псевдонима не включает саму< FROM-спецификацию >. -
Список
< псевдонимов столбцов >по количеству должен совпадать с количеством столбцов в< первичной таблице >или< порожденной таблице >.create or replace table tst(i int, c char(5)); insert into tst(i,c) values(200, '1111'); select col1 from tst as a (col1,col2); select sysdate, user, col2 from tst b (col1,col2); select col2, field1 from tst a (col1,col2), (select sysdate, user) as b (field1, field2);
-
Варианты:
-
если во
< FROM-спецификации >одна< табличная ссылка >, то описание результата< FROM-спецификации >то же, что и описание таблицы из этой< табличной ссылки >; -
если во
< FROM-спецификации >содержится более одной< табличной ссылки >, то описание результата< FROM-спецификации >представляет собой конкатенацию описаний таблиц, идентифицированных этими< табличными ссылками >, в порядке следования во< FROM-спецификации >; -
спецификация псевдонима (открытого
< имени таблицы >) устанавливает, что этот псевдоним (< имя таблицы >) используется как ее обозначение, определенное таблицей, которая, в свою очередь, определена< именем таблицы >или< порожденной таблицей >.select * from (select (select count(*) from auto where person.personid=auto.personid and make='FORD') n from person);
-
-
Конструкция
TABLESAMPLEпредназначена для выборки из большой (по числу записей) таблицы заданного количества случайных записей. -
Конструкция
TABLESAMPLEне применима к представлениям. -
< Процент выборки >задаёт число (процент) от всех записей в таблице, которые будут включены в выборку. Допустимое значение – в диапазоне от 0 до 100 включительно. Реально будет возвращено не строго заданное количество процентов записей, а приблизительное.SELECT make, model FROM auto TABLESAMPLE (5);
-
Опция
< метод выборки >задаёт метод вычисления номера записи таблицы для включения её в случайную выборку. В данной версии СУБД методыBERNOULLIиSYSTEMможно использовать только в качестве допустимых элементов синтаксической конструкции, но реальной нагрузки они пока не несут (игнорируются): номер записи для выборки формируется на основе генератора псевдослучайных чисел, встроенного в СУБД. -
Опция
REPEATABLEзадает номер повторяемой выборки (число от 1 до 65535). Одинаковые значения< номера выборки >и< процента выборки >приводят к повторному возвращению заданной выборки (если только в таблице не произошли изменения). Если опцияREPEATABLEуказывается с другим значением< номера выборки >(или< процента выборки >), то будет сформирован иной набор строк таблицы. Изменениями считаются следующие действия над таблицей: вставка, обновление, удаление, перестройка индекса.select count(make) from auto tablesample (5) repeatable (1); | 60|
select count(make) from auto tablesample (5) repeatable (2); | 54|
select count(make) from auto tablesample (5) repeatable (7); | 48|
select count(make) from auto tablesample (5) repeatable (1); | 60|
-
Конструкция
TABLESAMPLEможет применяться ко всем или нескольким таблицам во< FROM-спецификации >, при этом значения< процента выборки >и< номера выборки >берутся из первой конструкцииTABLESAMPLE, значения из остальных конструкцийTABLESAMPLEигнорируются.select * from auto T1 TABLESAMPLE (10) REPEATABLE (1), person T2 TABLESAMPLE (20) REPEATABLE (1) where T1.personid=T2.personid;
-
< Курсорная процедура > – хранимая процедура, возвращающая курсор. При использовании < курсорной процедуры > обращение к полям курсора недопустимо.
create or replace procedure proc_test (in i int) result cursor( MAKE char(20), MODEL char(20), BODYTYPE char(15), CYLNDERS integer, HORSEPWR integer, DSPLCMNT integer, WEIGHT integer, COLOR char(10), YEAR integer, SERIALNO char(16), CHKDATE integer, CHKMILE integer, PERSONID integer) declare var d typeof(result);// code open d for direct "select * from auto where personid = " + itoa(i) + ";";// return d;// end; select * from proc_test (5);
-
В качестве входных параметров < курсорной процедуры > допускается использовать SELECT-запросы, возвращающие единственное значение требуемого типа.
-
При выполнении SELECT-запроса с < курсорной процедурой > во FROM в случае возврата неоткрытого курсора ошибка будет игнорироваться, и запрос будет работать так, как если бы процедура вернула пустой курсор.
Примеры
select * from a TABLESAMPLE(10) REPEATABLE(2) order by aj, ai; select * from a TABLESAMPLE(10) REPEATABLE(2),b where ai=bi; select * from a TABLESAMPLE(10) REPEATABLE(2),b where ai >=bi; select * from a TABLESAMPLE(10) REPEATABLE(2), b where aj=bj and ai=bi;