русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Секция FROM.


Дата добавления: 2015-07-09; просмотров: 523; Нарушение авторских прав


Секция FROM показывает из какого источника(ов) данных будут извлекать строки, образующие результирующее множество. В общем виде эта секция выглядит следующим образом:

 

FROM table_source, где table_source, максимальное количество которых 256, может быть описан так:

 

{

имя_табл_или_представления [ [as] псевдоним ]

[TABLESAMPLE [SYSTEM] (размер_выборки [ {PERCENT | ROWS }])]

[REPEATTABLE (идентификатор_выборки)]

[WITH (список_опций)] |

 

функция_возращающая_набор_строк [ [as] псевдоним ]

[(псевдонимы_столбцов)] |

 

функция_определенная_пользователем [ [as] псевдоним ]

[(псевдонимы_столбцов)] |

 

OPENXML (doc_handle int [in], шаблон_идентиф_узла nvarchar [in],

[флаги byte [in] ])

[WITH ({описание_схемы | имя_таблицы})] |

 

(вложенный_запрос) [ [as] псевдоним ]

[(псевдонимы_столбцов)] |

 

{

table_source [{INNER | {LEFT | RIGHT | FULL} [OUTER] }]

[опции_объединения]

JOIN table_source ON условие_объединения |

 

table_source CROSS JOIN table_source |

 

table_source_левая_часть {CROSS | OUTER} APPLY

table_source_правая_часть

} |

 

table_source PIVOT агрегационная_функция(имя_столбца_вычисл)

FOR имя_столбца_группировки

IN (список_имен_столбцов_значений_групп)

псевдоним_таблицы |

 

table_source UNPIVOT (имя_столбца_вычисл FOR имя_столбца_группировки

IN (список_имен_столбцов))

псевдоним_таблицы |

 

@имя_переменной [ [as] псевдоним ] |

 

@имя_переменной.вызов_функции(аргументы) [ [as] псевдоним ]

[(псевдонимы_столбцов)]

 

 

}

 

Рассмотрим некоторые возможные значения table_source:

1. Имя таблицы или представления. Возможно задание псевдонима. При этом имя может описываться как заданием всех 4-ех его компонентов, так частичным их использованием. Следует отметить появление в MS SQL Server 2005 конструкции TABLESAMPLE, таким образом, использование этой конструкции допустимо, если уровень совместимости для БД выставлен в значение 90. Она предназначена для «случайной» выборки указанного числа (приблизительно) процентов строк (ключевое слово PERCENT – значение по умолчанию) или строк (ключевое слово ROWS). Ключевое слово SYSTEM описывает единственно доступный на данный момент способ «случайной» выборки, причем является значением по умолчанию. Следует отметить, что в случае маленьких таблиц (десятки или сотни строк) и малого размера выборки возможна ситуация, когда при выполнении команды возвращаются или все строки таблицы или пустое множество, причем вероятность получения все строк пропорциональна размеру «случайной» выборки. Ключевое слово REPEATABLE, за которым следует идентификатор «случайной» выборки, предназначено для повторного получения заданной случайной выборки. Если его не использовать, то при повторном выполнении команды SELECT с конструкцией TABLESAMPLE может быть получена другая «случайная» выборка.



2. Системная или пользовательская функция, которая возвращает набор строк.

3. Вложенный SQL запрос (команда SELECT), возвращающий некоторое множество строк.

4. Вертикальное объединение 2-ух и более таблиц (JOIN). По сути – вертикальное объединение является декартовым произведением, т.е. множеством различных объединений пар строк для указанных таблиц. Оно часто применяется для объединения двух и более таблиц, связанных ограничением FOREIGN KEY. В MS SQL Server 2005 (как и в MS SQL Server 2000) существует 7 различных типов таких объединений всех возможных пар строк (следует отметить, что объединяются только те столбцы таблиц, которые находятся в select_list):

a) объединения по определенному условию, которые выполняются следующим образом (если не указан тип объединения, то по умолчанию подразумевается INNER JOIN):

· INNER JOIN - для каждой сроки таблицы из правой части оператора объединения по очереди выбирается строка из таблицы левой части оператора объединения, удовлетворяющая условию.

· LEFT OUTER JOIN - для каждой сроки таблицы из левой части оператора объединения по очереди выбираются строка из таблицы правой части оператора объединения, удовлетворяющая условию. Если такой строки нет, то берутся значения NULL для всех выбираемых столбцов «правой» таблицы.

· RIGHT OUTER JOIN - для каждой сроки таблицы из правой части оператора объединения по очереди выбирается строка из таблицы левой части оператора объединения, удовлетворяющая условию. Если такой строки нет, то берутся значения NULL для всех выбираемых столбцов «левой» таблицы.

· FULL OUTER JOIN - для каждой сроки таблицы из левой части оператора объединения по очереди выбирается строка из таблицы правой части оператора объединения, удовлетворяющая условию. Если такой строки нет, то берутся значения NULL для всех выбираемых столбцов «правой» таблицы. Далее, берутся строки «правой» таблицы, не удовлетворяющие условию, и дополняются значениями NULL для выбираемых столбцов «левой» таблицы.

b) CROSS JOIN – выполняется следующим образом: для каждой сроки таблицы из правой части оператора объединения по очереди выбирается строка из таблицы левой части оператора объединения. Эквивалентно перечислению источников данных через запятую.

c) объединение с помощью оператора {CROSS | OUTER} APPLY. Этот оператор объединения введен в MS SQL Server 2005, таким образом, его использование допустимо, если уровень совместимости для БД выставлен в значение 90. Особенностью использования этого оператора является то, что в качестве «правой» таблицы может выступать функция, возвращающая множество строк, которая в качестве аргумента получает значения столбца «левой» таблицы. Следует отметить, что «левый» источник данных может также включать функцию, которая возвращает множество строк, однако эта функция не может получать значения столбца из «правой» таблицы в качестве своего аргумента. Рассмотрим подробнее два возможных вида оператора APPLY:

· CROSS – результатом является все пары строк полученных в результате объединения множества строк, полученных функцией, с множеством строк «левой» таблицы. Причем, если для какого либо значения аргумента, возвращаемое функцией множество строк является пустым, то в этом случае новые строки не генерируются.

· OUTER – результатом является все пары строк полученных в результате объединения множества строк, полученных функцией, с множеством строк «левой» таблицы. Причем, если для какого либо значения аргумента, возвращаемое функцией множество строк является пустым, то в этом случае новые строки получаются путем объединения строки из «левой» таблицы со значениями NULL для выбираемых столбцов из множества строк, возвращаемых «правой» функцией.

5. Группировка (с «разворотом») строк таблицы (оператор PIVOT). Его использование допустимо, если уровень совместимости для БД выставлен в значение 90. Этот оператор осуществляет группировку по столбцу, имя которого указывается после ключевого слова FOR. Затем, для каждой группы, значения которых должны быть указаны в select_list и в перечне имен столбцов после ключевого слова IN генерируется значение, которые возвращает агрегационная функция. Эти значения формируют строки, которые возвращаются подобной командой SELECT. Причем, заголовки столбцов этих строк совпадают с именами столбцов после ключевого слова IN. Если какая-либо группа отсутствует (т.е. среди значений столбца группировки нет такого значения, которое входит во множество значений после ключевого слова IN), то в соответствующем столбце выводится значение NULL (если агрегационная функция – count, то выводится 0). Следует отметить, что при использовании оператора PIVOT над аргументом агрегационной функции, который является именем столбца, нельзя выполнять преобразование типа с помощью функций CAST и CONVERT.

6. Обратный «разворот» столбцов таблицы (оператор UNPIVOT). Выполняет, по сути, действие обратное оператору PIVOT (за исключением получения наборов строк, которые образовывали каждую группу). Его использование допустимо, если уровень совместимости для БД выставлен в значение 90. Он выполняет «разворот» таблицы, так что столбцы становятся строками, а строки – столбцами (подобно транспонированию матрицы). Таким образом, значения столбца, имя которого указывается после оператора UNPIVOT (он был аргументом агрегационной функции в операторе PIVOT) формируют различные значения для групп. Их названия формируются значениями столбца, имя которого задано после ключевого слова FOR, а перечень возможных значений задан после ключевого слова IN. Получаемая таблица не содержит «пустых» групп (для которых оператор PIVOT генерировал значения NULL(0)).



<== предыдущая лекция | следующая лекция ==>
Секция SELECT. | Секция GROUP BY.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.253 сек.