Особенности выполнения инструкций Transact-SQL.
Клиент отправляет серверу инструкции на выполнение в виде так называемых пакетов (batch). Пакет является группой из одной или нескольких инструкций языка Transact-SQL, отправляемых единовременно из приложения в SQL Server для выполнения. Сервер компилирует инструкции пакета в единый исполняемый модуль, называемый планом выполнения. Инструкции в плане выполнения затем последовательно выполняются. После отработки всех команд пакета (или в ходе выполнения пакета) сервер возвращает клиенту результат. Пакеты могут объединяться в сценарии. Сценарий - это серия инструкций языка Transact-SQL, которая хранится в файле. Эти файлы можно использовать в качестве исходных данных для редактора кода среды SQL Server Management Studio или программ sqlcmd и osql, которые могут выполнять инструкции SQL из файла. Сценарий языка Transact-SQL может содержать как один, так и несколько пакетов. Команда GO означает конец пакета. Если сценарий языка Transact-SQL не содержит команд GO, то он выполняется как единый пакет. Сценарии языка Transact-SQL можно использовать следующим образом: - для сохранения резервной копии последовательности шагов, которые выполнялись при создании и заполнении базы данных на сервере; - при необходимости переноса инструкций с одного компьютера на другой; в целях обучения нового персонала. Все команды пакета выполняются в контексте определённой базы данных. Такая база данных называется текущей. При обращении к объектам текущей базы данных не требуется указание её имени. Для выбора текущей базы данных используется команда USE. Например, для выбора в качестве текущей базы данных pubs следует указать: USE pubs Одним из способов исполнения инструкций языка Transact-SQL является использование графического интерфейса Management Studio.
При входе в режим редактирования (как это сделать, описано ниже) в окне Management Studio появляется дополнительная панель инструментов. На нее вынесены основные функции для работы с SQL запросами. Встроенный текстовый редактор позволяет выполнять обычные действия по редактированию, выделению, копированию, сохранению и печати файлов. Запросы. Запрос представляет собой обращение к данным, хранимым в SQL Server. Он может быть выполнен несколькими способами: - пользователь MS Query или Microsoft Access может использовать графический интерфейс пользователя (GUI) для выбора данных из одной или более таблиц SQL Server, и отобразить их, например, на форме; - пользователь среды SQL Server Management Studio или программы osql может выполнить инструкцию SELECT и увидеть результаты посредством визуальных инструментов этой среды; - клиент или приложение промежуточного уровня, например приложение Microsoft Visual Basic, могут отправить запрос в SQL Server и затем отобразить полученные данные из таблицы SQL Server в элемент управления формы, например в сетку. Инструкция SELECT извлекает данные из SQL Server и возвращает их пользователю в одном или более результирующих наборах. Результирующий набор - это состоящее из столбцов и строк табличное представление данных, возвращаемых инструкцией SELECT. Полный синтаксис инструкции SELECT достаточно сложен и будет подробно изучаться ниже в данном руководстве, однако здесь будет полезно рассмотреть эту инструкцию с "высоты птичьего полёта". Синтаксис инструкции SELECT. Рассмотрим укрупненный синтаксис оператора SELECT Transact-SQL. SELECT [DISTINCT] columns FROM tables WHERE {search_conditions} [GROUP BY column [HAVING {search_condition}]] [ORDER BY {order_list} [ ASC | DESC ]] Синтаксис оператора SELECT содержит семь главных ключевых слов. Ключевое слово и связанную с ним информацию называют предложением. Эти предложения представлены в нижеследующей таблице 1.
Следующие шаги показывают порядок выполнения инструкции SELECT, содержащей предложения WHERE, GROUP BY и HAVING: 1. Предложение FROM возвращает первоначальный результирующий набор. 2. Предложение WHERE исключает строки, не соответствующие условию поиска. 3. Предложение GROUP BY собирает выбранные строки в одну группу для каждого уникального значения в предложении GROUP BY. 4. Статистические функции, указанные в списке выбора, вычисляют суммарные значения для каждой группы. 5. Предложение HAVING дополнительно исключает строки, не соответствующие условию поиска. Предложение SELECT. Определяет состав возвращаемых столбцов. Синтаксис. SELECT [ ALL | DISTINCT ] [ TOP expression [ PERCENT ] [ WITH TIES ] ] < select_list > Аргументы: - ALL Указывает на то, что в результирующем наборе могут появляться дублирующиеся строки. ALL применяется по умолчанию. - DISTINCT Запрещает появление повторяющихся строк в результирующем наборе. Пустые значения считаются равными при использовании ключевого слова DISTINCT. - TOP expression [ PERCENT ] [ WITH TIES ] Указывает на то, что только заданное число или процент строк будет возвращен из результирующего набора запроса. Аргумент expression может быть либо числом, либо процентом числа строк. Предложение TOP может быть использовано в инструкциях SELECT, INSERT, UPDATE и DELETE. Разделение круглыми скобками в expression параметра TOP требуется в операторах INSERT, UPDATE и DELETE. В целях обратной совместимости использование TOP expression без скобок в инструкции SELECT поддерживается, но не рекомендуется к использованию. Предложение select_list. Это предложение описывает столбцы результирующего набора и представляет собой список выражений, разделенных запятыми. Каждое выражение определяет как формат (тип данных и размер), так и источник данных для столбца результирующего набора и обычно ссылается на столбец в исходной таблице или представлении, предоставляющем данные, но может быть любым другим выражением, например константой или функцией Transact-SQL. Максимальное число выражений, которое можно задать в списке выбора - 4 096.
Синтаксис < select_list >::= { * | { table_name | view_name | table_alias }.* | { [ { table_name | view_name | table_alias }. ] { column_name | $IDENTITY | $ROWGUID } | udt_column_name [ {. |:: } { { property_name | field_name } | method_name (argument [,...n]) } ] | expression [ [ AS ] column_alias ] } | column_alias = expression } [,...n ] Аргументы: - * (звёздочка) Указывает на то, что должны быть возвращены все столбцы из всех таблиц и представлений, уазанных в предложении FROM. Столбцы возвращаются в том порядке, в котором они находятся в таблице или представлении. - table_ name | view_ name | table_ alias.* Ограничивает область, определяемую звёздочкой (*), до указанной таблицы или представления. - column_ name Имя возвращаемого столбца. Рекомендуется указывать квалификатор для аргумента column_name в целях избежания неоднозначности ссылок.
- expression Является константой, функцией, любым сочетанием имен столбцов, констант и функций, соединенных оператором (операторами) или является вложенным запросом. - $IDENTITY Возвращает столбец идентификатора. Если более чем одна таблица из предложения FROM содержит столбец со свойством IDENTITY, $IDENTITY должно быть задано с определенным именем таблицы, например T1.$IDENTITY. - $ROWGUID Возвращает GUID столбец строки. Если более чем одна таблица из предложения FROM содержит столбец со свойством ROWGUIDCOL, $ROWGUIDCOL должно быть задано с определенным именем таблицы, например T1.$ROWGUID - udt_column_name Имя возвращаемого пользовательского типа общеязыковой среды исполнения (CLR) столбца. Предложение INTO. Указывает, что результирующий набор используется для создания новой таблицы, в которую вставляются строки результата выполнения запроса. Параметр new_table_name указывает имя новой таблицы.
Синтаксис [ INTO new_table ] Аргументы: new_table Имя новой таблицы, создаваемой на основе столбцов, указанных в списке выбора, и строк, выбираемых предложением WHERE. Состав полей новой таблицы new_table соответствует составу выражений, указанных в списке выбора. Столбцы в таблице, указанной в аргументе new_table, создаются в порядке, соответствующем списку выбора. Все столбцы таблицы, указанной в аргументе new_table, получают такие же имена, типы данных и значения, которые указаны в соответствующем выражении в списке выбора. Если в список выбора входит вычисляемый столбец, соответствующий столбец новой таблицы не будет вычисляемым. Значениями нового столбца становятся значения, вычисленные при выполнении инструкции SELECT...INTO. Предложение FROM. Содержит список таблиц, из которых будут извлечены данные результирующего набора. Этими источниками могут быть: - базовые таблицы на локальном сервере, где работает SQL Server; - представления в локальном экземпляре SQL Server. Внутри SQL Server разрешаются ссылки на представления относительно базовых таблиц, на которых построено представление; - связанные таблицы. Это таблицы в источниках данных OLE DB, к которым можно обратиться с помощью SQL Server. Такой случай называется распределенным запросм. К источникам данных OLE DB можно обратиться из SQL Server, связывая их как связанный сервер, или сослаться на источник данных в функции OPENROWSET или OPENQUERY. Синтаксис [ FROM { < table_source > } [,...n ] ] < table_source >::= { table_or_view_name [ [ AS ] table_alias ] [ < tablesample_clause > ] [ WITH (< table_hint > [ [, ]...n ]) ] | rowset_function [ [ AS ] table_alias ] [ (bulk_column_alias [,...n ]) ] | user_defined_function [ [ AS ] table_alias ] [ (column_alias [,...n ]) ] | OPENXML < openxml_clause > | derived_table [ AS ] table_alias [ (column_alias [,...n ]) ] | < joined_table > | < pivoted_table > | < unpivoted_table > | @variable [ [ AS ] table_alias ] | @variable.function_call (expression [,...n ]) [ [ AS ] table_alias ] [ (column_alias [,...n ]) ] } < ablesample_clause >::= TABLESAMPLE [SYSTEM] (sample_number [ PERCENT | ROWS ]) [ REPEATABLE (repeat_seed) ] < joined_table >::= { < table_source > < join_type > < table_source > ON < search_condition > | < table_source > CROSS JOIN < table_source > | left_table_source { CROSS | OUTER } APPLY right_table_source | [ (] < joined_table > [) ] } < join_type >::= [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ < join_hint > ] ] JOIN < pivoted_table >::= table_source PIVOT < pivot_clause > table_alias < pivot_clause >::= (aggregate_function (value_column) FOR pivot_column IN (< column_list >) ) < unpivoted_table >::= table_source UNPIVOT < unpivot_clause > table_alias < unpivot_clause >::= (value_column FOR pivot_column IN (< column_list >)) < column_list >::= column_name [,...n ] Аргументы: - < table_source > Указывает таблицу, представление или источник производной таблицы с указанием или без указания псевдонима. В инструкции можно использовать до 256 источников таблиц, хотя предел зависит от доступной памяти и сложности других выражений в запросе. Отдельные запросы могут не поддерживать 256 источников таблиц. В качестве источника таблицы может быть указана переменная table.
- table_or_view_name Имя таблицы или представления. Если таблица или представление существует в другой базе данных на том же самом компьютере, на котором запущен экземпляр SQL Server, следует использовать полное имя в виде база_данных.схема.имя_объекта. Если таблица или представление существует вне локального сервера, на связанном сервере следует использовать четырехэлементное имя в виде: связанный_сервер.каталог.схема.объект. Состоящее из четырех частей имя таблицы или представления, которое создано при помощи функции OPENDATASOURCE как серверная часть имени, также может использоваться для указания источника таблицы. Дополнительные сведения о функции см. в разделе OPENDATASOURCE (Transact-SQL). - [AS] table_alias Псевдоним для table_source, который может использоваться как для удобства, так и для различения таблицы или представления во внутреннем соединении или во вложенном запросе. Псевдоним зачастую является сокращенным именем таблицы, использующимся для соотнесения с определенными столбцами таблиц в соединении. Если имя столбца существует более чем в одной таблице соединения, SQL Server потребует, чтобы имя столбца было уточнено именем таблицы, представления, или псевдонима. Если определен псевдоним, нельзя использовать имя таблицы. При использовании производной таблицы, набора строк или возвращающей табличное значение функции или предложения оператора (как PIVOT или UNPIVOT) требуемый аргумент table_alias в конце предложения является соответствующим именем таблицы для всех возвращаемых столбцов, включая группирующие столбцы. - user_defined_function Указывает возвращающую табличное значение функцию. OPENXML < openxml_clause > Обеспечивает представление XML-документа в виде набора строк. Дополнительные сведения см. в разделе OPENXML (Transact-SQL). - derived_table Вложенный запрос, который извлекает строки из базы данных. Аргумент derived_table используется в качестве входной таблицы для внешнего запроса. - column_alias Дополнительный псевдоним для замены имени столбца в результирующем наборе производной таблицы. Для каждого столбца в списке выбора следует включить по одному псевдониму столбца и заключить весь список псевдонимов столбцов в скобки. - < tablesample_clause > Указывает, что из таблицы возвращается выборка данных. Выборка может быть приблизительной. Это предложение может быть использовано в инструкциях SELECT, UPDATE или DELETE в отношении любой первичной или соединяемой таблицы. TABLESAMPLE не может быть указано для представлений. < join_type > Указывает тип операции соединения. INNER Указывает, что возвращаются все совпадающие пары строк. Несовпадающие строки из обеих таблиц отбрасываются. Если тип соединения не указан, этот тип задается по умолчанию. FULL [ OUTER ] Указывает, что в результирующий набор включаются строки, как из левой, так и из правой таблицы, несоответствующие условиям соединения, а выходные столбцы, соответствующие оставшейся таблице, устанавливаются в значение NULL. Этим дополняются все строки, обычно возвращаемые при помощи INNER JOIN. LEFT [ OUTER ] Указывает, что все строки из левой таблицы, не соответствующие условиям соединения, включаются в результирующий набор, а выходные столбцы из оставшейся таблицы устанавливаются в значение NULL в дополнение ко всем строкам, возвращаемым внутренним соединением. RIGHT [OUTER] Указывает, что все строки из правой таблицы, не соответствующие условиям соединения, включаются в результирующий набор, а выходные столбцы, соответствующие оставшейся таблице, устанавливаются в значение NULL в дополнение ко всем строкам, возвращаемым внутренним соединением. - < join_hint > Указывает, что оптимизатор запросов SQL Server использует одну подсказку по применению соединения, или алгоритм выполнения, для каждого соединения, указанного в предложении FROM. Дополнительные сведения см. в разделе Подсказка по соединению (Transact-SQL). - JOIN Указывает, что данная операция соединения должна произойти между указанными источниками или представлениями таблицы. - ON < условие_поиска > Задает условие, на котором основывается соединение. Условие может содержать любой предикат, хотя чаще используются столбцы и операторы сравнения, например: SELECT p.ProductID, v.VendorID FROM Production.Product AS p JOIN Purchasing.ProductVendor AS v ON (p.ProductID = v.ProductID); Когда условие указывает столбцы, их имена и типы данных могут не совпадать; однако если типы данных не совпадают, столбцы должны быть либо совместимыми, либо иметь типы, которые SQL Server 2005 может неявно преобразовать. Если типы данных не могут быть преобразованы неявно, условие должно проводить явное преобразование типа данных при помощи функции CONVERT. Предложение WHERE. Определяет условия, которые должны быть выполнены для всех возвращаемых строк. Количество предикатов, которое может содержать условие поиска, не ограничено. Синтаксис [ WHERE < search_condition > ] Аргументы: - < search_condition > Сочетание одного или нескольких предикатов, в котором используются логические операторы AND, OR и NOT. Синтаксис < search_condition > < search_condition >::= { [ NOT ] < predicate> | (< search_condition >) } [ { AND | OR } [ NOT ] { < predicate > | (< search_condition >) } ] [,...n ] < predicate >::= { expression { = | < > |! = | > | > = |! > | < | < = |! < } expression | string_expression [ NOT ] LIKE string_expression [ ESCAPE 'escape_character' ] | expression [ NOT ] BETWEEN expression AND expression | expression IS [ NOT ] NULL | CONTAINS ({ column | * }, '< contains_search_condition >') | FREETEXT ({ column | * }, 'freetext_string') | expression [ NOT ] IN (subquery | expression [,...n ]) | expression { = | < > |! = | > | > = |! > | < | < = |! < } { ALL | SOME | ANY} (subquery) | EXISTS (subquery) } Аргументы: - < search_condition > Задает условия для строк, возвращаемых в результирующем наборе инструкции SELECT, выражения запроса или вложенного запроса. Задает обновляемые строки для инструкции UPDATE. Задает удаляемые строки для инструкции DELETE. Количество предикатов, которое может содержаться в условии поиска для инструкции Transact-SQL, не ограничено. - NOT Инвертирует логическое выражение, задаваемое предикатом. Дополнительные сведения см. в разделе NOT (Transact-SQL). - AND Объединяет два условия и выдает значение TRUE, если оба условия имеют значение TRUE. Дополнительные сведения см. в разделе AND (Transact-SQL). - OR Объединяет два условия и выдает значение TRUE, если хотя бы одно условие имеет значение TRUE. Дополнительные сведения см. в разделе OR (Transact-SQL). - < predicate > Выражение, возвращающее значения TRUE, FALSE или UNKNOWN. expression Может являться именем столбца, константой, функцией, переменной, скалярным вложенным запросом или любым сочетанием имен столбцов, констант и функций, связанных операторами или вложенным запросом. Выражение также может содержать функцию CASE. = Оператор, используемый для проверки равенства двух выражений. < > или!= Оператор, используемый для проверки неравенства двух выражений. > Оператор, используемый для проверки превышения одного выражения над условием другого. >= Оператор, используемый для проверки превышения либо равенства двух выражений. !> Оператор, используемый для проверки того, что одно выражение не превышает другое выражение. < Оператор, используемый для проверки того, что одно выражение меньше другого. < = Оператор, используемый для проверки того, что одно выражение меньше или равно другому. !< Оператор, используемый для проверки того, что одно выражение не меньше другого. string_expression Строка обычных символов и символов-шаблонов. (4.2.3 Применение предиката LIKE.) [ NOT ] LIKE Показывает, что обрабатываемая строка должна использоваться при сравнении с шаблоном. Создать запрос для поиска служащих, чьи фамилии оканчиваются на “ова”. Вы должны будете получить следующую инструкцию: SELECT SURNAME, NAME FROM EMPLOYEES WHERE SURNAME LIKE '%ова' В результате должен быть получен следующий результат: SURNAME NAME ======================= Белова Мария Крылова Анна ESCAPE 'escape_ character' Позволяет осуществлять поиск символа-шаблона в строке символов вместо его функционирования как шаблона. Аргумент escape_character - это символ, помещаемый перед символом-шаблоном, чтобы показать его специальное использование при его использовании в качестве обычного символа. (4.2.4 Применение предиката BETWEEN.) [ NOT ] BETWEEN Задает включающий диапазон значений. Используйте оператор AND для разделения начальных и конечных значений. Создать запрос, который возвращает все фамилии, начинающиеся с букв, расположенных между “А” и “К”. SELECT SURNAME, NAME FROM EMPLOYEES WHERE SURNAME BETWEEN 'А' AND 'К' Результирующий набор должен будет содержать: SURNAME NAME ================================== Белова Мария IS [ NOT ] NULL Задает поиск значений NULL или значений, не являющихся значениями NULL, в зависимости от используемых ключевых слов. При обращении одного из операндов выражения с битовыми или арифметическими операторами в значение NULL указанное выражение также обращается в значение NULL. (4.2.5 Предикат CONTAINS.) CONTAINS Осуществляет поиск столбцов, содержащих символьные данные с заданной точностью (fuzzy), соответствующие заданным отдельным словам и фразам на основе похожести словам и точному расстоянию между словами, взвешенному совпадению. Этот параметр может быть использован только в инструкции SELECT. Создать запрос на поиск клиентов, чьи названия содержаат буквы “i” и “I” в любом месте. Созданная инструкция должна принять следующий вид: SELECT TITLE FROM CLIENTS WHERE CONTAINS (TITLE, 'I') Должен быть получен следующий результат: TITLE ========= E-Life IMC Computers Comtris Net Line Oki FREETEXT Предоставляет простую форму естественного языка ввода запросов на осуществление поиска столбцов, содержащих символьные данные, совпадающие с содержанием предиката не точно, а по смыслу. Этот параметр может быть использован только в инструкции SELECT. (4.2.6 Предикат IN.) [ NOT ] IN Задает поиск выражения, основанного на выражении, включенного или исключенного из списка. Выражение поиска может быть константой или именем столбца, а списком может быть набор констант или, что чаще, вложенный запрос. Список значений необходимо заключать в скобки. Создать запрос, который возвращает названия товаров, имеющих следующие цены: 15, 19, 32. SELECT CATEGORY, SUPPLIER, PRICE FROM GOODS WHERE PRICE IN (15,19,32) ORDER BY PRICE, CATEGORY Должен быть получен следующий результирующий набор строк: CATEGORY SUPPLIER PRICE ============================================================= Модули памяти Uni 15 Устройства ввода и указания Гвин-Медиа 15 Модули памяти ПК Сервис 19 Сетевое оборудование BelSoft 32 Сетевое оборудование Гвин-Медиа 32 subquery Может рассматриваться как ограниченная инструкция SELECT, и являющаяся подобной в инструкции SELECT. Использование предложений ORDER BY, COMPUTE и ключевого слова INTO не допускается (см. раздел 5.2.). (4.2.7 Применение квантора ALL.) ALL Используется с оператором сравнения и вложенным запросом. Возвращает для <предиката> значение TRUE, если все получаемые для вложенного запроса значения удовлетворяют условию, и значение FALSE, если не все значения удовлетворяют условию или в случае, когда в результате выполнения вложенного запроса внешней инструкции не выдается ни одной строки. Предположим, что мы хотим найти все товары, которые дороже всех товаров фирмы «CD-Life».Введём следующий запрос: SELECT Supplier, Mark, Price FROM Goods WHERE Price>ALL(SELECT Price FROM Goods WHERE Supplier='CD-Life') Результат должен выглядеть следующим образом: Supplier Mark Price ========================================= BelSoft Canon LBP810 195 DAAS Samsung 550B 150 Q-Senter Intel P4 1700MHz Box 137 Ситипринт Samtron 76E 180 (4.2.8 Применение кванторов SOME и ANY.) { SOME | ANY } Используется с оператором сравнения и вложенным запросом. Возвращает для <предиката> значение TRUE, если хотя бы одно получаемое для вложенного запроса значение удовлетворяет условию, и значение FALSE, если ни одно из значений не удовлетворяет условию или в случае, когда в результате выполнения вложенного запроса внешней инструкции не выдается ни одной строки. В противном случае результатом выражения является значение UNKNOWN. Вместо проверки условия для всех значений подзапроса, запрос можно переписать таким образом, чтобы условие выполнялось, по крайней мере, для одного значения: SELECT Supplier, Mark, Price FROM Goods WHERE Price > ANY(SELECT Price FROM Goods WHERE Supplier='CD-Life') Этот оператор должен вернуть 14 строк, в которых цена больше хотя бы одного значения подзапроса. Ключевое слово ANY является синонимом SOME. Они являются взаимозаменяемыми. Ещё одним квантором является EXISTS. Он осуществляет проверку на существование хотя бы одной строки, удовлетворяющей условиям подзапроса, и возвращает соответственно TRUE или FALSE, даже если строки содержит значения NULL. (4.2.9 Применение квантора EXISTS.) EXISTS Используется во вложенном запросе для проверки существования строк, возвращенных вложенным запросом. Предложение GROUP BY. Предложение GROUP BY разбивает результирующий набор на группы на основании значений в столбцах group_by_list. Если в предложение SELECT < список выбора > включены статистические функции, инструкция GROUP BY вычисляет сводные значения для каждой группы. Примечание. Если не задано предложение ORDER BY, группы, возвращаемые предложением GROUP BY, не упорядочиваются. Чтобы определить конкретный порядок данных, рекомендуется всегда использовать предложение ORDER BY. Синтаксис [ GROUP BY [ ALL ] group_by_expression [,...n ] [ WITH { CUBE | ROLLUP } ] Аргументы: - ALL Включает все группы и результирующие наборы (даже не имеющие строк), которые удовлетворяют условию поиска заданного в предложении WHERE. Если задан аргумент ALL, для сводных столбцов групп, не удовлетворяющие условию поиска, возвращаются значения NULL. Аргумент ALL нельзя указывать с операторами CUBE или ROLLUP. Предложение GROUP BY ALL не поддерживается в запросах с доступом к удаленным таблицам, если в запросе присутствует также предложение WHERE. - group_by_expression Выражение, по которому выполняется группирование. Аргумент group_by_expression также называется столбцом группирования. Аргумент group_by expression может быть столбцом или нестатистическим выражением, которое ссылается на столбец, возвращаемый предложением FROM. Псевдоним столбца, который определяется в списке выбора, не может использоваться для указания столбца группирования. Предложение HAVING. Предложение HAVING является дополнительным фильтром, который применяется к результирующему набору. Логически предложение HAVING фильтрует строки из промежуточного результирующего набора, построенного путем выполнения любого из предложений FROM, WHERE или GROUP BY в инструкции SELECT. Предложения HAVING обычно используются с предложением GROUP BY, хотя предложение GROUP BY не требуется перед предложением HAVING. Это предложение определяет условие поиска для группы или статистического выражения. Предложение HAVING можно использовать только в инструкции SELECT. Оно обычно используется в предложении GROUP BY. Когда GROUP BY не используется, предложение HAVING работает так же, как и предложение WHERE. Синтаксис [ HAVING < search condition > ] Аргументы: - < search_condition > Определяет условие поиска, которому должна соответствовать группа или статистическое выражение. Когда предложение HAVING используется в сочетании с GROUP BY ALL, предложение HAVING заменяет ALL. В следующем примере, который использует простое предложение HAVING, из таблицы SalesOrderDetail извлекается сумма всех полей SalesOrderID, значение которых превышает $100000.00. USE AdventureWorks; GO SELECT SalesOrderID, SUM(LineTotal) AS SubTotal FROM Sales.SalesOrderDetail GROUP BY SalesOrderID HAVING SUM(LineTotal) > 100000.00 ORDER BY SalesOrderID; Предложение ORDER BY. Предложение ORDER BY определяет порядок, в котором отсортированы строки в результирующем наборе. Предложение ORDER BY не может применяться в представлениях, встроенных функциях, производных таблицах и вложенных запросах, если не указано предложение TOP. Синтаксис [ ORDER BY { order_by_expression [ COLLATE collation_name ] [ ASC | DESC ] } [,...n ] ] Аргументы: - order_by_expression Указывает столбец, по которому должна выполняться сортировка. - COLLATE {collation_name} Указывает, что операция ORDER BY должна выполняться в соответствии с параметрами сортировки, указанными в аргументе collation_name, но не в соответствии с параметрами сортировки столбца, определенных в таблице или представлении. - ASC Указывает, что значения в указанном столбце должны сортироваться по возрастанию, от меньших значений к большим значениям. - DESC Указывает, что значения в указанном столбце должны сортироваться по убыванию, от больших значений к меньшим. Ввод данных. Для начального ознакомления с правилами ввода инструкций SQL и для того чтобы ускорить процесс заполнения данными созданной нами базы данных BOREI, воспользуемся инструкцией INSERT. В простейшей форме она имеет следующий вид: INSERT INTO table_name [(columns)] VALUES (values) Если имена не определены, то сервер вставляет данные в порядке следования столбцов в определении таблицы, при этом число значений должно совпадать с числом столбцов. Когда в операторе используются имена столбцов, то предполагается, что порядок последующих значений соответствует порядку определения столбцов этого оператора. Столбцы, отсутствующие в операторе, заполняются либо значениями по умолчанию, либо неопределёнными значениями NULL в соответствии с определением таблицы. В качестве значений могут быть константы или вычисляемые значения. В SQL операторах, включённых в другой язык, значениями могут служить также и переменные. INSERT INTO Suppliers (CodeSuppliers, Title, AddressTo, Post, Address, City, IIndex, Country, Telephone, Fax) VALUES (1, 'Tecnis', 'Вероника Кудрявцева', 'Менеджер по закупкам', 'ул. Большая Садовая, 12', 'Москва', '123456', 'Россия', '(095) 325-2222', '(095) 325-2222')
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|