Программирование в Microsoft SQL Server 2000

         

Использование фразы HAVING


Фраза HAVING ограничивает строки, возвращаемые фразой GROUP BY, таким же образом, как фраза WHERE ограничивает строки, возвращаемые фразой SELECT. В один оператор SELECT может быть включена и фраза WHERE, и фраза HAVING – при этом фраза WHERE применяется до операции группировки, а фраза HAVING – после нее.

Синтаксис фразы HAVING идентичен синтаксису фразы WHERE, за исключением того, что фраза HAVING может включать одну из функций агрегирования, включенных в список столбцов фразы SELECT. Заметим, однако, что вы должны повторять функцию агрегирования. Например, фраза HAVING, используемая в следующем операторе, является корректной:

SELECT PlantParts.PlantPart, Count(Oils.OilName) as NumberOfOils FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart HAVING Count(Oils.OilName) > 3

Однако вы не можете использовать псевдоним для функции Count в фразе HAVING. Следовательно, приведенная ниже фраза HAVING не будет правильной:

HAVING NumberOfOils > 3

Создайте запрос с использованием ключевого слова HAVING в панели сетки Grid Pane

Скройте панель SQL Pane

и отобразите панель сетки Grid Pane.


увеличить изображение

Добавьте > 5 в ячейку Criteria столбца OilName.


увеличить изображение

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы повторно исполнить запрос.


увеличить изображение



Использование ключевого слова GROUP BY


Фраза GROUP BY может быть задана с использованием любой из панелей конструктора запросов, но лучше всего это делать с помощью панели сетки Grid Pane и панели SQL Pane.

Создайте запрос GROUP BY с использованием панели сетки Grid Pane

Скройте панель SQL Pane

и отобразите панель сетки Grid Pane.


увеличить изображение

Добавьте в запрос столбец OilName.


увеличить изображение

Нажмите кнопку Group By (Сгруппировать)

в панели инструментов конструктора запросов. Конструктор запросов Query Designer добавит столбец Group By в сетку и установит оба значения равными Group By.


увеличить изображение

Измените значение ячейки Group By для строки OilName на Count.


увеличить изображение

Нажмите кнопку Run (Выполнить)

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит количество элементов OilName для каждого типа PlantType.


увеличить изображение



Использование оператора SELECT DISTINCT


Ключевое слово DISTINCT может быть задано в операторе SQL конструктора запросов Query Designer, либо путем установки свойств запроса.

Создайте запрос SELECT DISTINCT с использованием панели диаграмм Diagram Pane

Откройте конструктор запросов Query Designer для таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).Отобразите панель диаграмм Diagram Pane, щелкнув на кнопке Diagram Pane (Панель диаграмм)

в панели инструментов конструктора запросов.


увеличить изображение

Нажмите кнопку Add Table (Добавить таблицу).

Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).


Выберите PlantParts в списке таблиц и нажмите Add (Добавить). Конструктор запросов Query Designer добавит таблицу в запрос.Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.


увеличить изображение

Щелкните на кнопке SQL Pane (Панель SQL)

в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.


увеличить изображение

Удалите знак * после ключевого слова SELECT.


увеличить изображение

Щелкните на кнопке SQL Pane (Панель SQL) в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.

Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.




Установите флажок DISTINCT Values (Различать значения).



Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.Нажмите кнопку Run (Выполнить)
, чтобы повторно исполнить запрос.


увеличить изображение

Конструктор запросов Query Designer отобразит каждое значение лишь единожды.

Создайте запрос SELECT DISTINCT с использованием панели SQL Pane

Скройте панель диаграмм Diagram Pane
и отобразите панель SQL Pane
.Замените имеющийся оператор SELECT на следующий:

SELECT DISTINCT PlantTypes.PlantType FROM Oils INNER JOIN PlantTypes ON Oils.PlantTypeID = PlantTypes.PlantTypeID


увеличить изображение

Нажмите кнопку Run (Выполнить)
, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит отличающиеся значения PlantType, имеющиеся в таблице Oils.


увеличить изображение




Оператор GROUP BY


Ключевое слово DISTINCT инструктирует SQL Server возвращать только уникальные строки, в то время как фраза GROUP BY инструктирует SQL Server объединять строки с одинаковыми значениями в столбце или в столбцах, заданных во фразе, в одну строку.

Внимание! Каждая строка, включенная во фразу GROUP BY, должна быть включена в выход запроса.

Фраза GROUP BY чаще всего используется совместно с функцией агрегирования. Функция агрегирования выполняет вычисления над множеством значений и возвращает в результате единственное значение. Наиболее распространенными функциями агрегирования, используемой с GROUP BY, являются: функция MIN, которая возвращает наименьшее значение во множестве, функция MAX, которая возвращает наибольшее значение во множестве, и функция COUNT, возвращающая количество значений во множестве.



Оператор SELECT DISTINCT


Хотя одной из целей применения реляционной модели базы данных является устранение повторяющихся данных, большинство баз данных неизбежно будут содержать одинаковые значения в нескольких строках. Например, таблица, содержащая информацию об адресах клиентов, будет, вероятно, включать одни и те же значения страны и штата для многих строк. Это не создает повторы строк и вполне допустимо, поскольку каждое значение штата является атрибутом отдельного клиента. Аналогично, таблица на стороне многих в отношении один-ко-многим может иметь любое заданное значение внешнего ключа, повторяющееся многократно. Это не только не является неправильным, но и необходимо для реляционной целостности базы данных.

Однако это повторение может дать двусмысленные результаты после выполнения запроса. Для упомянутой таблицы клиентов Customer, содержащей, допустим, 10000 строк, из которых 90 процентов относятся к клиентам из Калифорнии, следующий запрос возвратит значение CA (штат Калифорния) 9000 раз – результат, который едва ли можно назвать полезным.

SELECT State FROM Customer

Использование ключевого слова DISTINCT в подобных ситуациях является спасением. Будучи помещенным непосредственно после SELECT, ключевое слово DISTINCT инструктирует SQL Server избегать дублирующихся строк в результирующем множестве. При этом следующий запрос возвратит каждое значение State для штата только один раз, что вам и нужно.

SELECT DISTINCT State FROM Customer

Совет. Ключевое слово DISTINCT имеет антипод ALL, который инструктирует SQL Server возвращать все строки, как уникальные, так или нет. Поскольку этот режим действует для оператора SELECT, слово ALL обычно не используется, но вы можете его включить, если при этом синтаксис запроса становится более понятным и очевидным.



Использование представлений


Создав представление, вы можете использовать его точно так же, как таблицу. Вы можете открыть его в Enterprise Manager с использованием конструктора представлений View Designer, либо включить его в другие запросы.

Если вы открываете конструктор представлений View Designer для существующего представления, Enterprise Manager трактует его как виртуальную таблицу. Базовым оператором SQL является либо SELECT * FROM <имя представления>, либо SELECT TOP n FROM <имя представления>, но не оператор запроса, создавший представление.

Откройте конструктор View Designer для представления

Перейдите к папке Views базы данных Aromatherapy в дереве консоли Console Tree. Enterprise Manager отобразит список представлений для базы данных.


увеличить изображение

Щелкните правой кнопкой мыши на OilPropertiesExtended в рабочей панели Details Pane, укажите на Open View (Открытие представления) и выберите Return All Rows (Показать все строки). Enterprise Manager откроет конструктор представлений View Designer для данного представления.


увеличить изображение

Щелкните на кнопке SQL Pane (Панель SQL)

в панели инструментов конструктора представлений. Конструктор представлений View Designer отобразит панель SQL Pane, содержащую оператор SELECT для представления.


увеличить изображение

Закройте конструктор представлений View Designer.




Откройте вкладку Views (Представления) в диалоговом окне Add Table (Добавление таблицы).



Выделите OilPropertiesExtended в списке представлений, нажмите кнопку Add (Добавить), чтобы добавить представление в запрос, а затем нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно. Конструктор запросов Query Designer добавит представление в запрос.


увеличить изображение

Щелкните на кнопке SQL Pane (Панель SQL).
Конструктор запросов Query Designer отобразит оператор SELECT для запроса.


увеличить изображение

В панели SQL Pane замените * на Oils.OilName, OilPropertiesExtended.Property.


увеличить изображение

Щелкните на кнопке SQL Pane (Панель SQL)
, чтобы скрыть панель SQL Pane.


увеличить изображение

Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит столбцы OilName Property.


увеличить изображение

Закройте конструктор запросов Query Designer.


Изменение представлений


Представление может быть изменено двумя способами: вы можете изменить его имя, либо вы можете изменить базовый оператор SQL для представления.

Переименуйте представление

Перейдите к папке Views базы данных Aromatherapy в дереве консоли Console Tree. Enterprise Manager отобразит список представлений для базы данных.


увеличить изображение

Щелкните правой кнопкой мыши на представлении OilPropertiesExtended в рабочей панели Details Pane и выберите Rename (Переименовать). Enterprise Manager выделит имя представления.


увеличить изображение

Измените имя представления на OilPropExt и нажмите клавишу Enter. Enterprise Manager отобразит диалоговое окно, предупреждающее, что изменение имени представления сделает использование любых других объектов, которые на него ссылаются, некорректным.


Нажмите Yes (Да). Enterprise Manager подтвердит изменение имени представления.


Модифицируйте представление

Щелкните правой кнопкой мыши на OilCautionsExtended в рабочей панели Details Pane и выберите Design View (Конструирование представления). Enterprise Manager откроет конструктор View Designer для представления.


увеличить изображение

Скройте панель SQL Pane, щелкнув на кнопке SQL Pane (Панель SQL)

, и скройте панель результатов Results Pane, щелкнув на кнопке Results Pane (Панель результатов).


увеличить изображение

Добавьте столбец OilID в таблицу Oils представления.


увеличить изображение

Нажмите кнопку Save (Сохранить)

в панели инструментов конструктора представлений. Конструктор представлений View Designer сохранит новое определение представления. Закройте конструктор представлений View Designer.



Понятие о представлениях


Хотя конструктор запросов Query Designer облегчает обращение к таблицам в вашей базе данных, постоянная корректировка или создание оператора запроса каждый раз заново может оказаться слишком утомительным и трудоемким. SQL Server предоставляет средства для хранения оператора SELECT в виде представления. В большинстве случаев данные, отображаемые представлением, не являются данными, хранящимися в базе данных, – в представлении хранится только оператор SELECT.

Вы можете считать представление виртуальной таблицей. Она может использоваться точно так же, как обычная таблица. Возможность использования результатов выполнения одного оператора SELECT в качестве входной информации для другого оператора SELECT является одним из фундаментальных требований реляционной модели. Это требование основано на принципе замкнутости.

Индексированные представления

Новое в SQL Server 2000 – это его способность создавать индекс для представления. Если вы индексируете вид, результирующее множество представления хранится в базе данных и модифицируется при любой модификации базовых таблиц и представлений. При определенных обстоятельствах это может существенно улучшить производительность, поскольку нет необходимости пересчитывать результирующее множество при каждой ссылке на него.

Индексированные представления работают лучше, если базовые данные меняются не слишком часто; в противном случае затраты на сопровождение индексированного представления будут выше, чем если бы вы пересчитывали представление по мере необходимости. Индексированные представления лучше всего использовать для следующих двух типов запросов:

запросы связывания и агрегирования, которые обрабатывают большое количество строк;операции связывания и агрегирования, которые часто выполняются в других запросах.



Создание представлений


Enterprise Manager предусматривает два метода для создания нового представления: мастер создания представления Create View Wizard, который проводит вас по всем этапам процедуры создания представления; и команда New View (Создать представление), которая открывает конструктор представлений View Designer. Конструктор представлений аналогичен конструктору запросов, за исключением того, что он дает возможность сохранять созданный вами оператор SELECT. Мастер создания представлений Create View Wizard является полезным инструментом, но иногда проще создать представление с помощью конструктора представлений View Designer.

Создайте представление с использованием мастера Create View Wizard

Нажмите кнопку Wizard (Мастер)

в панели инструментов Enterprise Manager. Enterprise Manager отобразит диалоговое окно Select Wizard (Выбор мастера).


Раскройте раздел Database, выберите Create View Wizard и нажмите ОК. Enterprise Manager отобразит первую страницу мастера создания представлений Create View Wizard.


Нажмите Next (Далее). Мастер создания представлений Create View Wizard отобразит страницу, запрашивающую имя базы данных, к которой будет относиться представление. Выберите базу данных Aromatherapy.


Нажмите Next (Далее). Мастер создания представлений отобразит страницу, предлагающую вам выбрать объекты для включения в представление.





Нажмите Finish (Готово). Мастер создания представлений Create View Wizard отобразит сообщение, подтверждающее создание представления.





Создайте представление с использованием конструктора View Designer

В дереве консоли Console Tree Enterprise Manager перейдите к папке Views базы данных Aromatherapy. Enterprise Manager отобразит список имеющихся представлений.


увеличить изображение

Нажмите New (Создать)
в панели инструментов Enterprise Manager. Enterprise Manager откроет конструктор представлений View Designer с отображением всех четырех панелей.


увеличить изображение

Щелкните на кнопке Add Table (Добавить таблицу)
в панели инструментов конструктора представлений. Конструктор представлений View Designer отобразит диалоговое окно Add Table (Добавление таблицы).



На вкладке Tables (Таблицы) добавьте в запрос Properties, OilProperties и Oils, а затем нажмите Close (Закрыть), чтобы закрыть диалоговое окно.


увеличить изображение

В панели сетки Grid Pane выберите столбцы Oils.OilID, Oils.OilName и Properties.Property для отображения их в результате.


увеличить изображение

Нажмите кнопку Save (Сохранить).
Конструктор запросов Query Designer отобразит диалоговое окно Save As (Сохранить как).



Введите OilPropertiesExtended в качестве имени представления.



Нажмите ОК. Конструктор представлений View Designer создаст новое представление.Закройте конструктор представлений View Designer.


Удаление представлений


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

Удалите представление

Щелкните правой кнопкой мыши на OilPropExt в рабочей панели Details Pane и выберите Delete (Удалить). Enterprise Manager отобразит диалоговое окно, предлагающее вам подтвердить удаление.


Нажмите кнопку Drop All (Убрать все). Enterprise Manager удалит представление из базы данных.


увеличить изображение



Управление представлениями


Как и для других объектов базы данных, вполне вероятно, что у вас может возникнуть необходимость изменить представление. Это легко можно сделать средствами Enterprise Manager.



Использование оператора INSERT


Оператор INSERT может быть создан с использованием панели сетки Grid Pane путем задания столбцов, либо с использованием панели SQL Pane путем непосредственного ввода оператора.



Понятие об операторе INSERT


Синтаксис оператора INSERT похож на синтаксис оператора SELECT. Его базовая форма имеет следующий вид:

INSERT [INTO] таблица_или_представление [(список_столбцов)] VALUES (список_значений)

Каждый оператор INSERT может модифицировать только одну таблицу или представление. При использовании оператора INSERT для модификации представления следует учитывать следующие ограничения:

представление не должно содержать функций агрегирования, таких как COUNT или AVG;представление не должно содержать операторов TOP, GROUP BY, UNION или DISTINCT;представление не должно содержать вычисляемых столбцов;представление должно ссылаться на таблицу во фразе FROM;оператор INSERT модифицирует столбцы только из одной таблицы.

Список столбцов в операторе INSERT не является обязательным. Если он не указан, оператор INSERT должен включать значения для всех столбцов в таблице или представлении, а порядок их должен соответствовать порядку столбцов в таблице или представлении. Вы можете использовать ключевое слово DEFAULT, чтобы задать для строки значения, установленные по умолчанию.

Если список столбцов присутствует, формат его подобен формату, используемому для списка столбцов в операторе SELECT: имена столбцов отделяются запятыми. Поскольку оператор INSERT может добавлять строку только в одну таблицу, вам нет необходимости использовать идентификатор имени таблицы в имени столбца.



Вставка нескольких строк


Оператор INSERT имеет вторую форму, которая использует оператор SELECT вместо списка VALUES с целью задания значений для строки (или строк), которая будет добавлена. Эта форма оператора INSERT имеет следующий вид:

INSERT INTO таблица_или_представление [(список_столбцов)] SELECT [(список_столбцов) FROM таблица_или_представление [WHERE (условие)]

Фраза WHERE в операторе является необязательной. Если она отсутствует, в таблицу или представление, заданные в фразе INSERT, будут добавлены все строки из таблицы или представления, заданных в фразе FROM.

Вставьте несколько строк с использованием панели сетки Grid Pane

Перейдите к папке Tables базы данных Aromatherapy, щелкните правой кнопкой мыши на таблице MyOils, откройте Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки). Будет открыт новый экземпляр конструктора запросов Query Designer.


увеличить изображение

Не закрывая конструктор запросов Query Designer, откройте новое представление таблицы Oils, щелкнув правой кнопкой мыши на таблице Oils, открыв Open Table (Открытие таблицы) и выбрав Query (Запрос). Будет открыт новый экземпляр конструктора запросов Query Designer.


увеличить изображение

Скройте панель SQL Pane

и панель Results Pane.


увеличить изображение

Щелкните на кнопке Change Query Type (Изменить тип запроса)

в панели инструментов конструктора запросов и выберите Insert From (Вставить из) в списке. Конструктор запросов Query Designer отобразит диалоговое окно, предлагающее вам выбрать таблицу-адресат.


Выберите MyOils из списка и нажмите ОК. Конструктор запросов Query Designer добавит в панель сетки Grid Pane столбец Append.


увеличить изображение

Измените запрос, чтобы вставить только столбцы OilName и LatinName.


увеличить изображение

Добавьте Left(OilName, 6) в качестве вычисляемого столбца в панель сетки Grid Pane, снимите флажок в ячейке вывода Output и установите в ячейке условия Criteria значение <> 'Insert'.


увеличить изображение

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что запрос был исполнен.


Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки в таблице MyOils.Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.


увеличить изображение




Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки в таблице MyOils.Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.


увеличить изображение



Вставьте несколько строк с использованием панели SQL Pane

Перейдите к окну конструктора запросов Query Designer, содержащему оператор INSERT.Скройте панель диаграмм Diagram Pane
и панель сетки Grid Pane
и отобразите панель SQL Pane.



увеличить изображение

Замените оператор SQL на следующий: INSERT INTO MyOils (OilName, LatinName) SELECT OilName, LatinName FROM Oils WHERE (LEFT(OilName, 6) = 'Insert')


увеличить изображение



Примечание. Единственное изменение здесь затрагивает только оператор WHERE.

Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что запрос был исполнен.



Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки таблицы MyOils.Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *. Осуществите прокрутку до конца таблицы, чтобы убедиться, что новые строки были добавлены.


увеличить изображение

Закройте оба окна конструктора запросов Query Designer.


Вставка строк с использованием панели сетки Grid Pane


Панель сетки Grid Pane предоставляет самый простой способ создания оператора INSERT, поскольку при этом не требуется запоминать синтаксис оператора.

Вставьте строку с использованием панели сетки Grid Pane

Перейдите к папке Tables базы данных Aromatherapy, щелкните правой кнопкой мыши на таблице Oils в рабочей панели Details Pane, откройте меню Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer с отображением четырех панелей.


увеличить изображение

Совет. Применение команды Query (Запрос) в меню Open Table (Открытие таблицы) или Open View (Открытие представления) является самым простым способом открыть конструктор запросов Query Designer с отображением всех панелей. Хотя устанавливаемым по умолчанию оператором SQL является SELECT * FROM <таблица_или_представление>, запрос не исполняется, поэтому никакие строки не возвращаются и не показываются.

Скройте панель SQL Pane

и панель результатов Results Pane.


увеличить изображение

Щелкните на кнопке Change Query Type (Изменить тип запроса)

в панели инструментов конструктора запросов и выберите Insert Into (Вставить в) из списка. Конструктор запросов Query Designer изменит вид панели сетки Grid Pane, чтобы она отображала только ячейки Column и New Value.


увеличить изображение

Добавьте столбец OilName в панели сетки Grid Pane и установите для New Value значение 'InsertFromGrid'.


увеличить изображение

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что в таблицу добавлена одна строка.


Нажмите ОК, чтобы закрыть окно сообщения. Не закрывая конструктор запросов Query Designer, откройте новое представление таблицы Oils, щелкнув правой кнопкой мыши на таблице Oils в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки). Откроется новый экземпляр конструктора запросов, в котором будут отображены все строки из таблицы Oils.


увеличить изображение

Осуществите прокрутку до конца таблицы, чтобы убедиться, что новая строка добавлена.


увеличить изображение

Внимание! Значение OilID в вашей базе данных может не совпадать с представленным здесь. Помните, что столбец OilID был определен в качестве идентификационного столбца. Идентификационные столбцы в SQL Server гарантированно являются уникальными, но они не обязательно располагаются в последовательном порядке.



Вставка строк с использованием панели SQL Pane


Хотя панель сетки Grid Pane предоставляет простой метод создания оператора INSERT, но использование панели SQL Pane, позволяющее вводить оператор непосредственно, предоставляет большие функциональные возможности.

Вставьте строку с использованием панели SQL Pane

Перейдите к окну конструктора запросов Query Designer, содержащему оператор INSERT.Скройте панель сетки Grid Pane

и панель диаграмм Diagram Pane
и отобразите панель SQL Pane.


увеличить изображение

Замените оператор SQL на следующий:

INSERT INTO Oils (OilName) VALUES ('InsertFromSQL')


увеличить изображение

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строка добавлена.


Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы Oils.Нажмите кнопку Run (Выполнить)


в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *, и осуществите прокрутку до конца таблицы, чтобы убедиться, что новая строка была добавлена.


увеличить изображение



увеличить изображение



Вставьте строку с использованием значений DEFAULT и NULL

Перейдите к окну конструктора запросов Query Designer, содержащему оператор INSERT.Измените оператор SQL следующим образом:

INSERT INTO Oils (OilName, LatinName, Sample) VALUES ('InsertDefault', NULL, DEFAULT)


увеличить изображение

Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строка была добавлена.



Нажмите ОК, чтобы закрыть окно сообщения. Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы Oils.Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *, прокрутите окно до конца таблицы, чтобы убедиться, что новая строка была добавлена.


увеличить изображение

Закройте окна конструктора запросов Query Designer.


Использование оператора UPDATE


Как и большинство других форм запросов, вы можете создавать запрос UPDATE в конструкторе запросов Query Designer с использованием панели сетки Grid Pane, либо непосредственно вводя оператор в панели SQL Pane.



Модификация строк с использованием фразы FROM


Можно использовать фразу SELECT в операторе INSERT, чтобы вставить значения из другой таблицы (см. урок 17). Оператор UPDATE использует фразу FROM для извлечения значений из другой таблицы:

UPDATE таблица_или_представление SET объекты_изменения FROM таблица_или_представление оператор_связывания условие_связывания [WHERE (условие_ограничения)]

Фраза FROM здесь имеет тот же формат, что и фраза FROM в операторе SELECT. Так же, как и для оператора SELECT, вы можете задать более одной таблицы или представления путем добавления операторов связывания. Необязательное условие WHERE может использоваться для ограничения множества модифицируемых строк.

Модифицируйте строки с использованием оператора FROM

Вернитесь к окну конструктора запросов Query Designer, содержащему оператор UPDATE.Измените оператор SQL следующим образом:

UPDATE MyOils SET MyOils.PlantPartID = Oils.PlantPartID FROM MyOils INNER JOIN Oils ON MyOils.OilName = Oils.OilName


увеличить изображение

Внимание! Вы не можете использовать столбцы OilID для связывания двух таблиц, поскольку команды INSERT, которые вы использовали для добавления строк в уроке 17, создали новые значения OilID для каждой строки в таблице MyOils.

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение о количестве строк, подвергшихся изменениям.


Вернитесь к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос SELECT *.


увеличить изображение



Модификация строк с использованием панели сетки Grid Pane


Панель сетки Grid Pane конструктора запросов предоставляет возможности для создания запроса UPDATE.

Модифицируйте все строки с использованием панели сетки Grid Pane

Перейдите к папке Tables базы данных Aromatherapy, щелкните правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer.


увеличить изображение

Скройте панель SQL Pane и панель диаграмм Diagram Pane, щелкнув на кнопке SQL

и на кнопке Diagram (Диаграмма).


увеличить изображение

Не закрывая конструктор запросов Query Designer, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки). Будет открыт новый экземпляр конструктора запросов Query Designer, отображающий все строки из таблицы MyOils.


увеличить изображение

Перейдите в окно конструктора запросов Query Designer, отображающее панель сетки Grid Pane и панель результатов Results Pane. Щелкните на кнопке Change Query Type (Изменить тип запроса)

в панели инструментов конструктора запросов и выберите Update (Модифицировать). Конструктор запросов добавит в сетку столбец нового значения New Value.


увеличить изображение

Добавьте столбец описания Description в панель сетки Grid Pane и установите на ячейке New Value значение "Description".


увеличить изображение

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строки были модифицированы.


Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.


увеличить изображение



увеличить изображение

Добавьте столбец OilName в сетку и установите для него в ячейке условия Criteria значение = "Basil".


увеличить изображение

Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что строка была модифицирована.



Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы исполнить запрос SELECT *.


увеличить изображение




Модификация строк с использованием панели SQL Pane


Как и для других форм запросов, непосредственный ввод оператора UPDATE в панели SQL обеспечивает большую гибкость.

Модифицируйте все строки с использованием панели SQL Pane

Перейдите к окну, содержащему оператор UPDATE.Отобразите панель SQL Pane

и скройте панель сетки Grid Pane.


увеличить изображение

Измените оператор SQL следующим образом:

UPDATE MyOils SET Sample = "Sample Field"


увеличить изображение

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение о количестве строк, подвергшихся изменениям в результате выполнения запроса.


Перейдите к окну конструктора запросов Query Designer, отображающему все строки из таблицы MyOils.Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы повторно исполнить запрос SELECT *.


увеличить изображение



Понятие об операторе UPDATE


Оператор UPDATE позволяет изменять значения в одной или в нескольких строках таблицы. Базовый синтаксис оператора UPDATE следующий:

UPDATE таблица_или_представление SET объекты_изменения [WHERE (условие)]

Подобно оператору INSERT, один оператор UPDATE может модифицировать только одну таблицу или представление. Для обновления представления с помощью оператора UPDATE существуют те же ограничения, что и для обновления представления с помощью оператора INSERT:

представление не должно содержать функций агрегирования, таких как COUNT или AVG;представление не должно содержать TOP, GROUP BY, UNION или DISTINCT;представление не должно содержать вычисляемых столбцов;представление должно ссылаться на таблицу, указанную в фразе FROM;оператор UPDATE должен модифицировать столбцы только из одной таблицы.

За ключевым словом SET следует перечень подлежащих обновлению столбцов, отделяемых запятыми, а также их новые значения. Форма записи при этом следующая: имя_столбца = новое_значение. Новое значение может быть константой или выражением, которое также может ссылаться на сам столбец. Например, выражение SalesPrice = SalesPrice * .90 будет уменьшать значения в столбце SalesPrice на 10 процентов.

Фраза WHERE является необязательной. Если она имеется, то должна задавать строки, подлежащие обновлению. Если фраза WHERE в операторе UPDATE отсутствует, будут модифицироваться все строки в таблице.



Использование оператора DELETE


Подобно другим операторам SQL, используемым в конструкторе запросов Query Designer, оператор DELETE может быть непосредственно введен в панели SQL Pane, либо создан с использованием графических панелей.



Оператор TRUNCATE TABLE


Результат выполнения оператора TRUNCATE TABLE идентичен результату выполнения оператора DELETE, для которого не указано условие WHERE, т.е. из таблицы удаляются все строки. Оператор TRUNCATE TABLE, отличается от оператора DELETE тем, что оператор TRUNCATE TABLE не записывается в журнал транзакций, что существенно ускоряет его выполнение.



Понятие об операторе DELETE


Базовая структура оператора DELETE несколько отличается от других операторов SQL, с которыми мы сталкивались ранее. Его синтаксис следующий:

DELETE таблица_или_представление [FROM источники_таблиц] [WHERE условие_отбора]

Список столбцов в операторе DELETE не указывается, поскольку при удалении строки удаляются также все столбцы. Необязательная фраза WHERE дает возможность указывать, какие строки следует удалить. Если фраза WHERE опущена, удаляются все строки в указанной таблице или представлении.

Фраза FROM, также необязательная, позволяет задавать дополнительные источники (таблицы или представления), которые будут использоваться в условии отбора в фразе WHERE. Подобный синтаксис оператора может ввести в заблуждение, поскольку строки не будут удаляться из таблиц и представлений, указанных в фразе FROM. Если в фразе FROM вы указываете более одной таблицы или представления, их имена следует отделять запятыми.

Совет. Оператор DELETE не поддерживает применение операции JOIN, поэтому вам следует связывать таблицы или представления в фразе WHERE оператора.

Если таблица участвует в отношении, важно не допустить, чтобы при удалении в главной таблице оставались "висячие" строки. Висячими строками называют строки в зависимой таблице (таблице внешнего ключа), которые не имеют соответствующих строк в главной таблице (таблице первичного ключа). Новинкой в SQL Server 2000 является возможность каскадных удалений в отношении. Если для отношения задается каскадное удаление, SQL Server автоматически удалит строки в зависимой таблице, чтобы не оставлять висячих строк. На рис. 19.1 показано отношение, установленное между таблицами Oils и PlantParts.


Рис. 19.1.  Каскадные удаления выполняются на вкладке Relationships (Отношения) диалогового окна Properties (Свойства).



Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane


Панель сетки и панель диаграмм конструктора запросов Query Designer предоставляют графические средства для создания операторов DELETE; однако, они не поддерживают применение фразы FROM, которая дает возможность использовать в операторе DELETE дополнительные таблицы и представления.

Удалите избранные строки из таблицы

Перейдите к папке Tables базы данных Aromatherapy. SQL Server отобразит список таблиц в рабочей панели Details Pane.


увеличить изображение

Щелкните правой кнопкой мыши на таблице MyOils, укажите на Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer.


Скройте панель SQL Pane

и панель результатов Results Pane.


Щелкните на кнопке Change Query Type (Изменить тип запроса)

в панели инструментов конструктора запросов, а затем выберите Delete (Удалить).


увеличить изображение



Удаление строк с использованием панели SQL Pane


Как и в других случаях, непосредственный ввод оператора DELETE в панели SQL Pane конструктора запросов Query Designer обеспечивает большую гибкость, однако при этом вам необходимо помнить синтаксис оператора.

Удалите строки с использованием фразы WHERE

Вернитесь к окну конструктора запросов, содержащему оператор DELETE.Отобразите панель SQL Pane

и скройте панель диаграмм Diagram Pane
и панель сетки Grid Pane.


увеличить изображение

Замените оператор SQL следующим:

DELETE FROM MyOils WHERE (OilName = 'Basil')

Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.


Вернитесь к окну конструктора запросов, отображающему все строки в таблице MyOils.Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT*. Убедитесь, что строка для Basil была удалена.


увеличить изображение



увеличить изображение

Скройте панель диаграмм Diagram Pane
и панель сетки Grid Pane.



увеличить изображение

Щелкните на кнопке Change Query Type (Изменить тип запроса)
в панели инструментов конструктора запросов и выберите Delete (Удалить). Конструктор запросов изменит оператор DELETE в панели SQL Pane.


увеличить изображение

Не закрывая окно конструктора запросов, откройте представление таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).


увеличить изображение

Вернитесь к окну конструктора запросов, содержащему оператор DELETE.Измените оператор SQL следующим образом:

DELETE PlantParts WHERE (PlantPartID = 10)


увеличить изображение

Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.



Вернитесь к окну конструктора запросов, отображающему все строки из таблицы Oils.Нажмите кнопку Run (Выполнить)
в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT *. Убедитесь, что строки, для которых значение PlantPartID равно 10, были удалены.


увеличить изображение

Закройте окна конструктора запросов Query Designer.


Удаление всех строк с помощью оператора TRUNCATE TABLE


Оператор TRUNCATE TABLE может быть выполнен только из панели SQL Pane конструктора запросов Query Designer.

Удалите все строки с использованием оператора TRUNCATE TABLE

Щелкните правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Query (Запрос). Будет открыто окно конструктора запросов Query Designer.


Скройте панель диаграмм Diagram Pane

и панель сетки Grid Pane.


увеличить изображение

Замените имеющийся оператор SQL на следующий:

TRUNCATE TABLE MyOils


увеличить изображение

Не закрывая текущее окно конструктора запросов, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).


увеличить изображение

Вернитесь к окну конструктора запросов, содержащему оператор TRUNCATE TABLE.Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что запрос был успешно исполнен.


Вернитесь к окну конструктора запросов, отображающему все строки из таблицы MyOils.Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT *. Убедитесь, что все строки были удалены.


увеличить изображение



Использование мастера Copy Database Wizard


Мастер копирования Copy Database Wizard может быть вызван через диалоговое окно Select Wizard (Выбор мастера), а также через меню All Tasks (Все задачи) контекстного меню для папки Server или для папки Databases.

Скопируйте базу данных

Внимание! Чтобы выполнить это упражнение, вы должны иметь доступ к серверу.

Перейдите к базе данных Aromatherapy, а затем щелкните на кнопке Wizard (Мастер).

SQL Server отобразит диалоговое окно Select Wizard (Выбор мастера).


Выберите Copy Database Wizard в категории Management, а затем нажмите ОК. SQL Server отобразит первую страницу мастера Copy Database Wizard.


Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя сервера, на котором содержится копируемая база данных.


Если необходимо, выберите метод аутентификации, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя сервера, на который будет копироваться база данных.


Выберите место назначения из поля списка, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую имя базы данных, подлежащей перемещению или копированию.


Установите флажок Copy (Копировать) для базы данных Aromatherapy.


Нажмите Next (Далее). Мастер отобразит страницу, показывающую место размещения выходного файла.


Совет. Если для какого-либо файла в ячейке статуса Status имеется крестик, вы можете воспользоваться кнопкой Modify (Изменить), чтобы разрешить проблему.



Использование мастера импорта DTS Import Wizard


Мастер DTS Import Wizard дает возможность импортировать данные из различных типов источников данных, в том числе:

источников данных OLE DB и ODBC;текстовых файлов;соединений с другими экземплярами Microsoft SQL Server;баз данных Oracle и Informix;рабочих листов Microsoft Excel;баз данных Microsoft Access и Microsoft FoxPro;баз данных dBase и Paradox.

Импортируйте таблицу с использованием мастера DTS Import Wizard

Перейдите к базе данных Aromatherapy в Enterprise Manager. SQL Server отобразит список объектов, имеющихся в базе данных.


увеличить изображение

Нажмите кнопку Wizard (Мастер)

в панели инструментов Enterprise Manager. SQL Server отобразит диалоговое окно Select Wizard (Выбор мастера).


Выберите DTS Import Wizard в категории Data Transformation Services и нажмите ОК. SQL Server отобразит первую страницу мастера экспорта/импорта DTS Import/Export Wizard.


Нажмите Next (Далее). Мастер отобразит страницу, предлагающую вам указать источник данных.


Выберите в качестве источника данных Microsoft Access. Мастер изменит параметры для источника данных.


Нажмите кнопку Browse (Обзор)

, чтобы указать имя и местонахождение файла источника данных. Мастер отобразит диалоговое окно Select File (Выбор файла).


Перейдите к папке SQL 2000 Step by Step в корневой директории и выделите базу Aromatherapy.





Здесь мы также принимаем предложенные по умолчанию параметры, поскольку нам требуется скопировать данные из таблиц. Нажмите Next (Далее). Мастер отобразит список таблиц, имеющихся в базе данных.





Примечание. При выборе на предыдущей странице другой опции, Use A Query To Specify The Data To Transfer (Использовать запрос для указания передаваемых данных), появится диалоговое окно, предлагающее ввести оператор SQL.

Выберите таблицу NewOils. Мастер предполагает, что таблица назначения будет носить такое же имя, что и исходная.



Нажмите кнопку Browse (Обзор)
в столбце Transform. Мастер отобразит диалоговое окно Column Mappings And Transformation (Соответствия столбцов и преобразования).



Измените размер столбца OilName на 25, чтобы импортировать только начальную часть содержимого столбца OilName.



Нажмите ОК, чтобы закрыть диалоговое окно, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую, хотите ли вы импортировать данные немедленно, либо сделать это позднее.





Совет. Эта страница мастера также предоставляет вам возможность сохранить ваши параметры для импорта в виде DTS-пакета. Это может оказаться особенно полезным, если вам потребуется снова выполнить операцию импортирования.

Примите предложенную по умолчанию опцию Run Immediately (Выполнить немедленно) и нажмите Next (Далее). Мастер отобразит страницу, подтверждающую выбранные вами параметры.



Нажмите кнопку Finish (Готово). Мастер отобразит диалоговое окно, показывающее ход исполнения DTS-пакета, после чего выведет сообщение, подтверждающее, что таблица была успешно импортирована.



Нажмите ОК, чтобы закрыть окно сообщения.



Нажмите Done (Готово).Перейдите к папке Tables, чтобы убедиться, что таблица NewOils была добавлена в базу данных Aromatherapy.


увеличить изображение



Совет. Если таблица не отображается, выберите Refresh (Обновить) из меню Action (Действие), чтобы обновить список.


Использование мастера экспорта DTS Export Wizard


Как вы можете догадаться, мастер экспорта DTS Export Wizard выполняет ту же функцию, что и мастер импорта DTS Import Wizard, но в обратном направлении.

Экспортируйте таблицу с использованием мастера экспорта DTS Export Wizard

Перейдите к базе данных Aromatherapy и нажмите кнопку Wizard (Мастер).


Выберите DTS Export Wizard в категории Data Transformation services, а затем нажмите ОК. SQL Server отобразит первую страницу мастера DTS Import/Export Wizard.


Нажмите Next (Далее). Мастер отобразит страницу, запрашивающую источник данных.


Выберите в качестве базы данных Aromatherapy, а затем нажмите Next (Далее). Мастер отобразит страницу, запрашивающую вид выходных данных.


Выберите в качестве выходных данных Text File.


Нажмите кнопку Browse (Обзор)

справа от поля имени файла File Name. Мастер отобразит диалоговое окно Select File (Выбор файла).




Мастер копирования Copy Database Wizard


Мастер Copy Database Wizard предоставляет простой путь для копирования или перемещения базы данных из одного экземпляра SQL Server в другой. Вы можете копировать базу данных между различными экземплярами SQL Server 2000, либо между SQL Server 2000 SQL Server 7.0.



Мастера служб преобразования данных


Службы преобразования данных Data Transformation Services (DTS) –мощный набор графических инструментальных средств и программных объектов, который дает возможность импортировать и экспортировать данные, преобразовывать структуры данных и объединять данные из различных источников для их анализа и составления отчетов.

Как и для любых других мощных графических инструментов с широкими возможностями, использование DTS может вызвать определенные затруднения. К счастью, Enterprise Manager имеет в своем составе два мастера, облегчающие выполнение наиболее распространенных задач: импорт и экспорт данных.



Отключение базы данных


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

Отключите базу данных Aromatherapy

Щелкните правой кнопкой мыши на базе данных Aromatherapy в дереве консоли Console Tree, укажите на All Tasks (Все задачи), а затем выберите Detach Database (Отключить базу данных). SQL Server отобразит диалоговое окно Detach Database (Отключение базы данных).


Нажмите ОК. SQL Server отобразит сообщение, подтверждающее, что база данных была отключена.




Подключение базы данных


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

Повторно подключите базу данных Aromatherapy

Щелкните правой кнопкой мыши на папке Database сервера, который вы используете для выполнения упражнений, укажите на All Tasks (Все задачи) и выберите Attach Database (Подключить базу данных). SQL Server отобразит диалоговое окно Attach Database (Подключение базы данных).


Нажмите кнопку Browse (Обзор).

SQL Server отобразит диалоговое окно Browse For Existing File (Просмотр файлов).


Перейдите к папке SQL 2000 Step by Step в корневой директории, выберите Aromatherapy.mdf, а затем нажмите ОК. SQL Server запишет в место размещения файла файл данных и журнал транзакций.


Нажмите ОК. SQL Server отобразит сообщение, подтверждающее, что база данных была успешно подключена.




Подключение и отключение баз данных


В SQL Server база данных хранится в двух или более файлах. Хотя эти файлы обычно представляют собой файлы операционной системы, вы не можете просто переместить или скопировать их из одного места в другое, поскольку они связаны с определенным экземпляром сервера, который содержит эту базу данных.

Тем не менее, SQL Server дает вам возможность отключать базу данных от сервера, удаляя связь между базой данных и конкретным сервером, но при этом оставляя саму базу данных и журнал транзакции нетронутыми. После отключения базы данных вы можете переместить или скопировать ее, после чего подключить к какому-либо другому серверу.



Добавление объектов в панель редактирования Editor Pane


Наиболее простой и удобной возможностью при работе в Object Browser является использование приема "перетащить-и-оставить". Всякий раз, когда вам необходимо задать объект в Object Browser, вам достаточно просто перетащите его в панель редактирования Editor Pane окна Query (Запрос), и его имя будет вставлено в окно редактирования.

Совет. Если вы перетащили одну из функций, отображенную в папке Common Objects, Object Browser вставит только имя функции, без параметров. Для вставки полного синтаксиса функции используйте команду Scripting, которую мы рассмотрим в следующем разделе.

Добавьте объект базы данных

Выберите окно Query (Запрос), убедитесь, что вкладка Editor (Редактор) открыта, а затем в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно).

Query Analyzer очистит панель редактирования Editor Pane.В панели редактирования Editor Pane введите следующий оператор SQL (не забудьте поставить пробел после FROM):

SELECT * FROM

В Object Browser раскройте папку User Tables.


увеличить изображение

Перетащите таблицу dbo.Properties из панели Object Browser в панель редактирования Editor Pane и поместите ее после слова FROM. Query Analyzer вставит имя таблицы в оператор.


Нажмите на кнопке Execute Query (Выполнить запрос)

для выполнения запроса. Query Analyzer отобразит результаты в панели сетки Grids Pane.


Добавьте в папку все объекты

В окне Query (Запрос) выберите еще раз вкладку Editor (Редактор).Удалите * из оператора SELECT.


В Object Browser раскройте папку dbo.Properties.


увеличить изображение

Перетащите папку Columns из панели Object Browser в панель редактирования Editor Pane и вставьте ее после слова SELECT. Query Analyzer вставит в оператор все имена столбцов.


увеличить изображение

Для выполнения запроса нажмите кнопку Execute Query (Выполнить запрос)

в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит результаты в панели сетки Grids Pane.




Использование Object Browser


Средство Object Browser представляет собой панель в левой части окна анализатора запросов Query Analyzer. Подобно тому, как дерево консоли Console Tree в Enterprise Manager предоставляет иерархическое отображение объектов в установленном экземпляре SQL Server, так и вкладка Objects (Объекты) в Object Browser отображает иерархическое представление баз данных на сервере, с которым вы соединяетесь, а также другие распространенные объекты, используемые при создании программ Transact-SQL.

Совет. Вкладка Templates (Шаблоны) в Object Browser показывает в иерархическом порядке доступные программные шаблоны. Шаблоны мы рассмотрим в следующем уроке.

Вкладка Objects (Объекты) в Object Browser несколько отличается от дерева консоли Console Tree в Enterprise Manager. В списке отображаются только объекты базы данных, поэтому такие элементы, как Logins (Учетные записи) и Data Transformation Services (Службы преобразования данных), невидимы. Для удобства таблицы в базе данных размещены в двух папках: User Tables (Пользовательские таблицы) и System Tables (Системные таблицы).

Также, в отличие от простого отображения списка таблиц базы данных в, как это имеет место в дереве консоли Console Tree Enterprise Manager, Object Browser отображает столбцы, индексы, ограничения и триггеры, которые вы установили для таблицы, а также зависимости, представления и таблицы, которые зависят от данной таблицы. На рис. 21-2 показано, Object Browser отображает таблицу Oils.


Рис. 21.2.  Object Browser отображает информацию о таблице из вашей базы данных, которая полезна с точки зрения программирования.

В Object Browser папка Common Objects содержит встроенные типы данных и набор основных функций Transact-SQL сгруппированных в категории. Для каждой функции папка Parameters содержит описание каждого параметра, включая его имя и тип данных. На рис. 21-3 представлена функция LEFT, как она отображена в окне Object Browser.


Рис. 21.3.  Object Browser отображает в папке Common Objects функции по категориям.

Используя Object Browser, вы можете открывать таблицу или представление подобно тому, как вы отображаете строки в конструкторе запросов Query Designer в Enterprise Manager. При этом возможно просматривать строки, или же вставлять новые или редактировать существующие строки.

Вы также можете использовать Object Browser для создания программ на Transact-SQL. Вы можете добавлять объекты в окно Query (Запрос), используя технику "перетащить-и-оставить" (drag-and-drop), а также автоматически создавать несколько разных типов сценариев из контекстного меню.



Использование окна Query


Query Analyzer первоначально отображает два окна: Object Browser (Просмотр объектов) и Query (Запрос). При запуске Query Analyzer открывается одно окно Query (Запрос), но вы в любое время можете открыть новое окно, нажав в панели инструментов Query Analyzer на кнопке New Query (Новый запрос).

Окно Query (Запрос) отображает в строке заголовка имя сервера базы данных, текущую базу данных, текущую учетную запись и имя запроса. Окно Query (Запрос) схоже с окном конструктора запросов Query Designer в Enterprise Manager, но имеет более мощные возможности.

В качестве редактора окно Query (Запрос) является более гибким и мощным инструментом, чем панель SQL в конструкторе запросов Query Designer. Конструктор запросов Query Designer может выполнять только ограниченное число операторов Transact-SQL, окно запроса Query может выполнять любые операторы Transact-SQL, и вы можете вводить множество операторов для их выполнения в одном пакете. Окно Query (Запрос) не поддерживает просмотр в режиме сетки Grid или в режиме диаграмм Diagram, которые доступны в конструкторе запросов Query Designer, оно поддерживает дополнительные представления запросов, которые применяются для анализа производительности, о чем мы поговорим в уроке 23.

Окно Query (Запрос) также предоставляет возможность отображения каждого вида запроса на отдельной вкладке, а не в панели. Это является наиболее удобным способом просмотра запроса.



Использование сценариев SQL


Сценарий (script) представляет собой набор операторов Transact-SQL, хранимых в файле. Сценарии часто используются для постоянного хранения команд для записей, используемых для создания и заполнения объектов базы данных. Поскольку сценарии хранятся в тестовом файле, а не в базе данных, то они могут быть использованы для воссоздания базы данных на других серверах. (SQL Server использовал сценарии для создания шаблонных баз данных Pubs и Northwind).

Хотя сценарии очень часто используются для создания объектов базы данных, они могут применяться не только для этого. В сценарий может быть включен любой допустимый операторы Transact-SQL.

В сценарии операторы SQL группируются в пакеты. Сценарий может содержать один или несколько пакетов, а каждый пакет может содержать один или более операторов SQL. В сценарии, содержащем более одного пакета, пакеты разделяются командой GO. Если сценарий не содержит команды GO, все операторы будут выполняться как один пакет.

Создайте сценарий

В окне Query (Запрос) измените оператор SQL, как показано ниже:

SELECT, OilName, LEFT(LatinName, 10) FROM Oils GO SELECT PlantPartID, PlantPart FROM PlantParts

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

В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос). Query Analyzer отобразит результат в двух панелях вкладки Grids (Сетка) окна Query (Запрос).


В окне Query (Запрос) выберите вкладку Editor (Редактор) и нажмите кнопку Save (Сохранть)

в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Save Query (Сохранение запроса).


Примечание. Если вы не выберите вкладку Editor (Редактор) перед нажатием кнопки Save (Сохранть), анализатор запросов Query Analyzer сохранит результаты выполнения запроса, а не сам запрос.

Перейдите к папке SQL 2000 Step By Step в корневой директории и присвойте сценарию имя Lesson21.


Нажмите Save (Сохранить). Query Analyzer сохранит новый файл сценария.


Откройте сценарий

В панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос).
Query Analyzer откроет новое пустое окно Query (Зарос).



Нажмите кнопку Open (Открыть)
в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).



В корневой директории найдите и откройте папку SQL 2000 Step by Step, и выберите Lesson21.



Нажмите Open (Открыть). Query Analyzer отобразит сценарий в окне Query (Запрос).



В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос)
для запуска сценария. Query Analyzer отобразит результаты во вкладке Grids (Сетка).



Закройте окно сценария.


Открытие объектов


Если вы в Object Browser нажмете правой кнопкой мыши на таблице или представлении и выберите Open (Открыть), анализатор запросов Query Analyzer отобразит строки в таблице (или результаты выполнения оператора SELECT для представления) в окне Open Table (Открытие таблицы).

Откройте таблицу

В Object Browser раскройте папку User Tables базы данных Aromatherapy. Query Analyzer отобразит список таблиц базы данных.


увеличить изображение

Правой кнопкой мыши щелкните на dbo.PlantParts и выберите Open (Открыть). Query Analyzer отобразит в окне Open Table (Открытие таблицы) строки из таблицы.


Закончив просмотр строк в таблице, закройте окно Open Table (Открытие таблицы).

Откройте представление

В Object Browser раскройте папку Views базы данных Aromatherapy. Query Analyzer отобразит список всех представлений в базе данных.


увеличить изображение

Правой кнопкой мыши щелкните на dbo.OilCautionsExtented и выберите Open (Открыть). Query Analyzer отобразит ряды, возвращенные после запроса, в окне Open Table (Открытие таблицы).


Закончив просмотр строк в таблице, закройте окно Open Table (Открытие таблицы).



Понятие о Query Analyzer


Хотя можно создавать и выполнять запросы и другие операторы Transact-SQL в Enterprise Manager, лучше выполнять это с помощью утилиты для администрирования базы данных. Анализатор запросов Query Analyzer в первую очередь является программным инструментом.

Query Analyzer предоставляет мощные средства для написания и отладки сложных наборов операторов Transact-SQL различных типов. (Мы рассмотрим один из таких типов – SQL-сценарии). Query Analyzer также предоставляет средства для анализа производительности запросов посредством выполнения планов или с помощью мастера настройки индексов Index Tuning Wizard, который мы рассмотрим в уроке 23.



Скриптование объектов


Скриптование (создание сценария действия) является более сложной версией приема "перетащить-и-оставить" Object Browser. Скриптование создает полный оператор Transact-SQL и может выполняться из контекстного меню большинства объектов. Не все типы сценариев применимы ко всем типам объектов, а к таким типам, как параметры функции или столбцы, операция скриптования не может быть применена вообще.

Имеющиеся сценарии и объекты, к которым они могут быть применены, представлены в Таблице 21.2. Большинство из этих сценариев мы рассмотрим в следующем уроке о, посвященном созданию и обслуживанию объектов базы данных.

Таблица 21.2. Опции скриптования

Команда сценарияОбъекты
Create (Cоздать)Таблица, индекс, ограничение, триггер, представление, хранимая процедура
Alter (Изменить)Триггер, вид
Drop (Изъять)Таблица, индекс, ограничение, триггер, представление, хранимая процедура
Select (Выбрать)Таблица, представление
Insert (Вставить)Таблица, представление
Update (Обновить)Таблица, представление
Delete (Удалить)Таблица, представление
Execute (Выполнить)Хранимая процедура, функция

Сценарии могут быть записаны в новое окне Query (Запрос), в файл сценария или в буфер обмена (откуда они могут быть вставлены в существующее окно запроса Query). Некоторые сценарии, такие как сценарии выполнения функции, используют замещаемые параметры. Query Analyzer предоставляет диалоговое окно для удобства замещения этих параметров соответствующими значениями.

Напишите сценарий для оператора SELECT

В Object Browser в базе данных Aromatherapy раскройте папку User Tables.Правой кнопкой мыши щелкните на таблице dbo.OilProperties, укажите на Script Object To New Window As (Описать объект в новом окне как) и выберите Select (Выбрать). Query Analyzer откроет новое окно Query (Запрос), содержащий оператор SELECT.


увеличить изображение

Совет. Object Browser создает оператор SELECT в отдельной строке. Для удобства вы можете отредактировать его, что показано на рисунке.

Для выполнения запроса нажмите кнопку Execute Query (Выполнить запрос)

в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит результаты в панели сетки Grids Pane.




После завершения работы с запросом закройте окно Query (Запрос).
Напишите сценарий для функции
В папке Common Objects раскройте папку String Functions.


Правой кнопкой мыши щелкните на функции LEFT, перейдите к Script Object To New Window As (Описать объект в новом окне как) и выберите Execute (Выполнить). Query Analyzer откроет новое окно Query (Зарос) с оператором SELECT, включающим функцию.

увеличить изображение

В меню Edit (Правка) выберите Replace Template Parameters (Заместить шаблонные параметры).


Для параметра character_expression введите значение 'Test Expression', а для параметра integer_expression введите значение 4.


Нажмите Replace All (Заместить все). Query Analyzer заместит параметры в запрос.


Для выполнения запроса нажмите кнопку Execute Query (Выполнить запрос)
в панели инструментов анализатора запросов Query Analyzer. Query Analyzer отобразит результаты в панели сетки Grids Pane.




Ввод операторов Transact-SQL


Простейшим способом использования окна Query (Запрос) является ввод операторов SQL, как мы это делали в панели SQL конструктора запросов Query Designer. В отличии от окна конструктора запросов Query Designer, окно Query (Запрос) анализатора запросов Query Analyzer предоставляет некоторый дополнительный сервис, выделяя различными цветами введенные вами операторов Transact-SQL. В Таблица 21.1 приведены цвета, используемые в окне Query (Запрос).

Таблица 21.1. Цветное кодирование, используемое в окне Query анализатора запросов Query Analyzer.

ЦветНазначение
СинийКлючевое слово
Темно зеленыйКомментарий
Темно красныйХранимая процедура
СерыйОператор
ЗеленыйСистемная таблица
ПурпурныйСистемная функция
КрасныйСимвольная строка

Выполните запрос SELECT

В окне Query введите следующий оператор SELECT:

SELECT OilName, LEFT(LatinName, 10) FROM Oils Окно Query (Запрос) изменит цвет введенного текста.


В панели инструментов анализатора запросов Query Analyzer нажмите на кнопке Execute Query (Выполнить запрос).

Анализатор запросов Query Analyzer добавит в окно Query (Запрос) панель, содержащую две вкладки: вкладку Grids (Сетка), содержащую результаты запроса и вкладку Messages (Сообщения), содержащую сообщения.


Выберите вкладку Messages(Сообщения). Окно Query (Запрос) отобразит сообщения, сформированные запросом.


Отобразите результаты запроса в отдельной таблице

В меню Tools (Сервис) анализатора запросов Query Analyzer выберите Options (Параметры). Query Analyzer отобразит диалоговое окно Options (Параметры).Выберите вкладку Editor (Редактор)


Установите флажок Tabbed Mode (Vs. Splitter Mode).Нажмите OK. Query Analyzer изменит способ отображения окна Query (Запрос).




Выбор базы данных


Query Analyzer будет использовать текущую выбранную базу данных для разрешения ссылок в запросах и других операторах Transact-SQL. Панель инструментов, показанная на рис. 21-1, содержит поле со списком, в котором отображается текущая выбранная база данных. Вы можете переключится на другую базу данных, выбрав ее имя в панели инструментов или в меню Query (Запрос).


увеличить изображение
Рис. 21.1. 

Выберите базу данных с помощью панели инструментов

В поле со списком панели инструментов выберите Northwind.


увеличить изображение

Выберите базу данных из меню Query (Запрос)

В меню Query (Запрос) выберите Change Database (Сменить базу данных). Query Analyzer отобразит диалоговое окно Select Database (Выбор базы данных).


Совет. Вы также можете воспользоваться комбинацией клавиш Ctrl + U для открытия диалогового окна Select Database (Выбор базы данных).

Нажмите в любое место этой таблицы для выбора базы данных Aromatherapy.


Нажмите OK. Query Analyzer выберет базу данных Aromatherapy.



Запуск Query Analyzer


Вы можете запустить Query Analyzer из Enterprise Manager или из меню Start (Пуск) в Windows. Если вы запустили Query Analyzer из Enterprise Manager, Query Analyzer будет передавать информацию о соединении из Enterprise Manager: если вы подключены к серверу, то Query Analyzer будет соединяться с этим сервером, и если у вас по умолчанию установлена какая-либо база данных, то Query Analyzer будет выбирать именно эту базу данных.

Совет. Для запуска Query Analyzer воспользуйтесь командой isqlw из командной строки.

Если вы запустили Query Analyzer из меню Start (Пуск) или если вы не создали в Enterprise Manager соединения с сервером или базой данных, вы должны будете в Query Analyzer создать соединение вручную.

Запустите Query Analyzer из Enterprise Manager

В Enterprise Manager в дереве консоли Console Tree найдите базу данных Aromatherapy. В рабочей панели Details Pane SQL Server отобразит список объектов базы данных.


увеличить изображение

В меню Tools (Сервис) выберите SQL Query Analyzer. SQL Server откроет Query Analyzer и автоматически соединиться с сервером и базой данных Aromatherapy.


увеличить изображение

Примечание. Если в Query Analyzer не отображается окно просмотра объектов Object Browser, нажмите F8 для его отображения.

Закройте Query Analyzer.

Запустите Query Analyzer из меню Start (Пуск)

В панели задач нажмите кнопку Start (Пуск).Перейдите к Programs (Программы) и выберите папку Microsoft SQL Server. Откроется папка Microsoft SQL Server со списком значков.Щелкните на значке Query Analyzer.

Query Analyzer отобразит диалоговое окно Connect To SQL Server (Соединение с SQL Server).


Убедитесь в правильном выборе сервера и режима аутентификации, а затем нажмите OK. Query Analyzer соединится с сервером, а затем откроется. Query Analyzer соединится с той базой данных, которая была выбрана по умолчанию для вашей учетной записи.

Совет. Если ваш сервер не настроен на автоматический запуск при соединении, вы можете установить флажок Start SQL Server If It Stopped (Запускать SQL Server, если он остановлен) для включения этой опции.


увеличить изображение



Использование Object Browser для определения данных


DDL-операторы являются не слишком сложными, хотя и составными, однако анализатор запросов Query Analyzer посредством Object Browser предоставляет два метода, с помощью которых DDL будет еще проще использовать. В прошлом уроке мы говорили, что контекстное меню большинства объектов поддерживает команды скриптования, и вы можете использовать их для операторов CREATE, ALTER и DROP применительно к этим объектам.

Query Analyzer также предоставляет шаблоны, которые являются образцами файлов SQL-сценариев с замещаемыми параметрами. Вы можете создать и свои собственные шаблоны, однако SQL Server 2000 предоставляет базовые шаблоны для большинства операторов CREATE.



Использование шаблонов


Язык SQL несколько отличается от большинства других языков программирования, таких как C++ или Microsoft Visual Basic, тем, что в нем есть относительно немного операторов, но синтаксис их может быть довольно сложным. Одна из претензий, часто предъявляемых к языку SQL, состоит в том, что все данные извлекаются с помощью одного оператора: оператора SELECT.

Шаблоны являются превосходным средством для работы с составными операторами SQL. При работе с SQL длительное время, вы начинаете замечать, что часто используете лишь несколько более или менее стандартных комбинаций основных команд: например оператор SELECT для двух таблиц, имеющих внутреннюю связь INNER JOIN, или оператор CREATE TABLE с идентификационным столбцом IDENTITY. Сохранив, эти операторы как шаблон, вы одной командой сможете воспроизвести весь содержащийся в шаблоне текст. Для настройки операторов вы можете воспользоваться удобным диалоговым окном.

Совет. Шаблоны могут применяться не только к одной команде. Они могут состоять из любого числа операторов, подобно файлам SQL-сценариев, и могут содержать множество команд и пакетов.

Несмотря на широту предоставляемых возможностей, шаблоны просты в использовании и создании. Они являются обычными файлами SQL-сценариев с расширением .tql (по умолчанию). Элементы шаблона могут настраиваться. Например, в операторе CREATE TABLE имена столбцов и таблиц могут быть определены как параметры. В шаблоне параметр имеет такую форму: <имя_параметра, тип_данных, значение>. Например, представленный ниже шаблон сценария, содержит два параметра: table_name и sort_name:

SELECT * FROM <table_name, sysname, test_view> ORDER BY <sort_column, sysname, test_column>

Сценарий определяет оба параметра как имеющие тип данных sysname, который является специальным типом, используемым для указания имен объектов. Параметр table_name имеет значение по умолчанию "test_view", а параметр sort_column имеет значение по умолчанию "test_column".

Анализатор запросов Query Analyzer предоставляет диалоговое окно Replace Template Parameters (Замещение параметров шаблона) для удобного ввода текста в шаблон. Чтобы отобразить это диалоговое окно, откройте шаблон в окне Query (Запрос) и выберите Replace Template Parameters (Замещение параметров шаблона) из меню Edit (Правка).

Совет. Для открытия диалогового окна Replace Template Parameters (Замещение параметров шаблона) вы также можете воспользоваться комбинацией клавиш Ctrl + Shift + M.

Сформируйте оператор CREATE TABLE с помощью шаблона

В Object Browser выберите вкладку Templates (Шаблоны). Query Analyzer отобразит список категорий для доступных шаблонов.



увеличить изображение

Раскройте папку CREATE TABLE и дважды щелкните на кнопке CREATE TABLE WITH IDENTITY. Query Analyzer откроет новое окно запроса и вставит туда шаблонный текст.


увеличить изображение

В меню Edit (Правка) выберите Replace Template Parameters (Замещение параметров шаблона). Query Analyzer откроет диалоговое окно Replace Template Parameters (Замещение параметров шаблона).



Установите следующие значения параметров: ПараметрЗначение
Table_nameTemplateTable
Column_1TemplateID
Datatype_for_column_1Smallint
Seed1
Increment1
Column_2Description
Datatype_for_column_2Varchar (20)


Нажмите Replace All (Заместить все). Query Analyzer закроет диалоговое окно и подставит значения параметра в параметр в шаблоне.


увеличить изображение

Убедитесь, что база данных Aromatherapy выбрана в панели инструментов анализатора запросов Query Analyzer.


увеличить изображение

Чтобы выполнить оператор, нажмите кнопку Execute Query (Выполнить запрос)
в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст таблицу.В Object Browser выберите вкладку Objects (Объекты), раскройте папку User Tables и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит в списке новую таблицу TemplateTable.


увеличить изображение

Закройте окно Query (Запрос), содержащее оператор CREATE TABLE.


Изменение объектов


В то время как оператор CREATE создает новый объект, оператор ALTER предоставляет механизм для изменения определения объекта. Не все объекты, созданные с помощью оператора CREATE, имеют соответствующий оператор ALTER. В таблице 22.2 приведен синтаксис для объектов, которые могут быть изменены.

Таблица 22.2. Операторы ALTER

Синтаксис оператора ALTERДействие
ALTER DATABASE <имя> <спецификация_файла>Изменяет файлы, используемые для хранения базы данных

ALTER FUNCTION <имя> RETURNS <возвращаемое_значение> AS < операторы_tsql>

Изменяет операторы Transact-SQL, содержащие функцию

ALTER PROCEDURE <имя> AS < операторы_tsql>

Изменяет операторы Transact-SQL, содержащие в себе хранимую процедуру (См. урок 28, "Хранимые процедуры")

ALTER TABLE <имя> <определение_изменения>

Изменяет определение таблицы (В этом уроке мы подробно рассмотрим <определение_изменения>.)

ALTER TRIGGER <имя> {FOR | AFTER | INSTEAD OF} <действие_dml>

Изменяет операторы Transact-SQL, содержащие в себе триггер (См. урок 29, "Триггеры")

ALTER VIEW <имя> AS <оператор_выборки>

Изменяет операторы SELECT, которые создают представление

Оператор ALTER TABLE является составным по той же причине, почему и оператор CREATE TABLE: определение таблицы состоит из нескольких различных частей. Упрощенная версия синтаксиса для оператора ALTER TABLE приведена ниже:

ALTER TABLE <имя> { [ALTER COLUMN <определение_столбца>] | [ADD <определение_столбца>] | [DROP COLUMN <имя_столбца>] | [ADD [WITH NOCHECK] CONSTRAINT <ограничение_для_таблицы>] }

Ключевые слова CHECK (подразумевается) и NOCHECK перед ограничением таблицы, предписывают SQL Server тестировать или не тестировать имеющиеся в таблице данные с учетом нового ограничения. WITH NOCHECK используется лишь в крайне редких случаях.

Изменение столбцов

Ниже представлено несколько ограничений для фразы ALTER COLUMN. Столбец не может быть изменена, если он:

имеет тип данных text, image, ntext или timestamp;определен в таблице как ROWGIDCOL;является вычисляемым столбцом или используется в вычисляемом столбце;является реплицированным;используется в индексе – если только столбец не имеет тип данных varchar, nvarchar или varbinary; тип данных не изменяется и размер столбца не уменьшается;используется в статистике, генерируемой оператором CREATE STATISTIC;используется в ограничении PRIMARY KEY;используется в ограничении FOREIGN KEY REFERENCES;используется в ограничении CHECK;используется в ограничении UNIQUE;указывается как DEFAULT.


Измените представления

В Object Browser раскройте папку Columns запроса SimpleView.


увеличить изображение

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)
для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

ALTER VIEW SimpleView AS SELECT SimpleDescription, RelatedDescription FROM RelatedTable INNER JOIN SimpleTable ON RelatedTable.SimpleID = SimpleTable.SimpleID



Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит только столбцы SimpleDescription и RelatedDescription.


увеличить изображение



Добавьте столбцы в таблицу

В Object Browser раскройте папку Columns таблицы SimpleTable.


увеличить изображение

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)
для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

ALTER TABLE SimpleTable ADD NewColumn varchar(20)



Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
Query Analyzer добавит столбец в таблицу.Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.


увеличить изображение



Измените столбцы в таблице

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)
для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

ALTER TABLE SimpleTable ADD COLUMN NewColumn varchar(10)





Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
Query Analyzer добавит столбец в таблицу. Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.


увеличить изображение



Удалите столбцы из таблицы

В окне запроса выберите вкладку Editor (Радактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)
для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

ALTER TABLE SimpleTable DROP COLUMN NewColumn



Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
Query Analyzer удалит столбец из таблицы.Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser больше не будет отображать столбец NewColumn.


увеличить изображение




Понятие о DDL


Язык SQL имеет две составляющие: язык обращения с данными Data Manipulation Language (DML) и язык определения данных Data Definition Language (DDL). DML состоит из операторов, используемых для создания и получения данных. DDL состоит из операторов, используемых для создания объектов в базе данных и для установки свойств и значений атрибутов самой базы данных.

DML и DDL

Чем же отличаются эти две группы операторов? В то время, как операторы DML достаточно однотипны для различных реализаций SQL (что дает возможность каждому поставщику программной продукции вводить свои расширения), DDL имеет существенные различия для разных продуктов. Каждый поставщик системы управления базой данных на физическом уровне различным образом реализует реляционную модель и каждый поставщик DDL неизбежно отражает эти различия. Большинство поставщиков предоставляют графические инструменты для определения данных и многие, включая и Microsoft, не ограничивают вас использованием только SQL DDL. Например, Microsoft предоставляет поддержку двух стандартов определения данных: ADO и DAO.

Мы уже успели рассмотреть основные операторы DML: SELECT, INSERT, UPDATE и DELETE. Базовыми же операторами SQL DDL являются CREATE, ALTER и DROP, каждый из которых имеет несколько вариаций для создания объектов различных типов. Несколько из этих операторов мы рассмотрим в этом уроке, а остальные в следующих уроках.



Скриптование DDL


Создать два сценария для операторов SELECT можно в панели Object Browser. Object Browser поддерживает сценарии CREATE, ALTER и DROP для большинства объектов базы данных. После генерации сценария вы можете видоизменить его для решения своих задач.

Совет. Операторы CREATE, созданные скриптованием, могут быть сохранены в файле сценария. Это удобно для документирования структуры базы данных.

Сформируйте сценарий CREATE TABLE

В Object Browser щелкните правой кнопкой мыши на таблице Cautions, перейдите к Script Object To New Window AS и выберите CREATE. Query Analyzer откроет новое окно запроса, содержащие оператор CREATE для создания таблицы Cautions.


увеличить изображение

Примечание. Поскольку база данных не может содержать несколько таблиц с одинаковыми именами, вы должны отредактировать оператор, если вы хотите выполнить его сейчас. Если вы не хотите создавать новую таблицу, просто закройте окно запроса и перейдите к следующему разделу.

Измените имя таблицы в операторе на DuplicateCautions, а имя в ограничении PRIMARY KEY на PK_ DuplicateCautions.


увеличить изображение

Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).

Query Analyzer создаст новую таблицу.Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит в списке новую таблицу DuplicateCautions.


увеличить изображение

Закройте окно запроса, содержащее оператор CREATE.



Создание объектов


Объекты базы данных создаются программным путем с помощью оператора CREATE. Точный синтаксис оператора CREATE различен для каждого объекта, однако объекты, которые вы можете создавать, а также базовый синтаксис оператора CREATE для каждого объекта, вы можете найти в таблице 22.1.

Таблица 22.1. Операторы CREATE.

Синтаксис оператора CREATEСоздаваемый объект
CREATE DATABASE <имя>Создает базу данных
CREATE DEFAULT <имя> AS < выражение_константы >Создает значение по умолчанию
CREATE FUNCTION <имя> RETURNS <возвращаемое_значение> AS <операторы_tsql>Создает пользовательскую функцию (См. урок 30, "Пользовательские функции")
CREATE INDEX <имя> ON <таблица_или_представление> (<индексируемые_столбцы>)Создает индекс в таблице или представление
CREATE PROCEDURE <имя> AS < операторы_tsql>Создает хранимую процедуру (См. урок 28, "Хранимые процедуры")
CREATE RULE <имя> AS <условное_выражение>Создает роль базы данных
CREATE SCHEMA AUTHORIZATION <владелец> <определения_объектов>Создает таблицы, представления и разрешения как один объект
CREATE STATISTICS <имя> ON < таблица_или_представление> (<столбцы>)Создает статистические данные, используемые оптимизатором запросов
CREATE TABLE <имя> (<определение_таблицы>)Создает таблицу
CREATE TRIGGER <имя> {FOR | AFTER | INSTEAD OF} < действие_dml> AS <операторы_tsql>Создает триггер (См. уроку 29, "Триггеры")
CREATE VIEW <имя> AS < оператор_выборки>Создает представление

Из операторов CREATE, рассмотренных в таблице 22.1, только оператор CREATE TABLE является достаточно сложным. Это вызвано тем, что определение таблицы составляет несколько различных элементов. Вы должны определить столбцы, а каждый столбец должен иметь имя и тип данных. Вы можете задать для столбцов возможность использования нулевых (NULL) значений идентификационной строке или в GUID, значение по умолчанию, любые ограничения, применимые к столбцу, а также несколько других свойств, которые мы не будем здесь рассматривать. Упрощенная версия синтаксиса, для определения столбцов имеет следующий вид:


<имя_столбца> <тип_данных> [NULL | NOT NULL] [ [DEFAULT <значение_по_умолчанию>] | [IDENTITY [(начальное_значение>, <шаг_увеличения>)[NOT FOR REPLLCATION]]]] [ROWGUIDCOL] [<ограничение_для_столбца>[, <ограничение_для_столбца>...]]

Учтите, что указывание значений по умолчанию и спецификации идентичности является взаимоисключающим. Так, вы можете задавать значения по умолчанию для столбца или для идентификационного столбца, но никак не для обоих.

Описание для <ограничение_для_столбца> представлено ниже:

[CONSTRAINT <имя_ограничения] [ [PRIMARY KEY | UNIQUE] [CLUSTERED | NONCLUSTERED] | [[FOREIGN KEY] REFERENCES <ссылочная_таблица> (имя_столбца)] | [CHECK [NOT FOR REPLICATION] (<логическое выражение>)] ]

Вы можете задавать более одного выражения <ограничение_для_столбца> для столбца, но при этом вы должны задать тип каждого ограничения (PRIMARY KEY/UNIQUE, FOREIGN KEY или CHECK).

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

MyColumn varchar(20) MyColumn varchar(20) NOT NULL MyColumn varchar(20) PRIMARY KEY CLUSTERED MyColumn varchar(20) IDENTITY (1, 1) PRIMARY KEY CLUSTERED MyColumn varchar(20) NOT NULL FOREIGN KEY REFERENCES Oils (OilName)




увеличить изображение

Нажмите клавишу F5, чтобы обновить содержимое экрана. В списке появится SimpleTable.


увеличить изображение



Совет. Если окно Query (Запрос) отобразит сообщение о том, что объект с именем "SimpleTable" уже существует, то вам не следует щелкать на Object Browser перед нажатием клавиши F5.

Создайте таблицу с ограничением внешнего ключа.

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)
для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

CREATE TABLE RelatedTable ( RelatedID smallint IDENTITY (1,1) PRIMARY KEY CLUSTERED, SimpleID smallint REFERENCES SimpleTable (SimpleID), RelatedDescription varchar(20) )



Чтобы выполнить оператор, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
Query Analyzer создаст таблицу.Чтобы выбрать Object Browser, щелкните на любом месте в его панели.Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке User Tables новую таблицу RelatedTable.


увеличить изображение



Создайте представление

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)
для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

CREATE VIEW SimpleView AS

SELECT RelatedID, SimpleDescription, RelatedDescription FROM RelatedTable INNER JOIN SimpleTable ON RelatedTable.SimpleID = SimpleTable.SimpleID



Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
Query Analyzer создаст представление.В Object Browser раскройте папку View для базы данных Aromatherapy. (Если папка View уже раскрыта, щелкните на любом месте в панели Object Browser для ее выбора.)


увеличить изображение

Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке View новое представление SimpleView.




увеличить изображение



Создайте индекс

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)
для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

CREATE INDEX SimpleIndex ON SimpleTable (SimpleDescription)



Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
Query Analyzer создаст индекс.В таблице SimpleTable раскройте папку Indexes и убедитесь, что индекс SimpleIndex добавлен.


увеличить изображение




Удаление объектов


Оператор DROP удаляет объект базы данных. В отличие от операторов CREATE и ALTER, операторы DROP имеют простой и неизменный синтаксис:

DROP <тип_объекта> <имя>

<тип_объекта> - любой объект из таблицы 22.1, исключая схему.

Удалите индекс

В Object Browser раскройте папку Indexes таблицы SimpleTable.


увеличить изображение

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)

для очистки содержимого панели редактирования Editor Pane.В панели редактирования введите следующий оператор:

DROP INDEX SimpleTable.SimpleIndex


Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).

Query Analyzer удалит индекс.Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит пустую папку индексов.


увеличить изображение

Удалите таблицу

В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)

для очистки содержимого панели редактирования Editor Pane. В панели редактирования введите следующий оператор:

DROP TABLE RelatedTable


Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).

Query Analyzer удалит таблицу.В панели Object Browser раскройте папку User Tables базы данных Aromatherapy и нажмите клавишу F5 для обновления содержимого экрана. Таблицы RelatedTable в списке уже не будет.


увеличить изображение