Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Microsoft SQL.doc
Скачиваний:
27
Добавлен:
16.12.2018
Размер:
1.83 Mб
Скачать

Раздел into позволяет создать новую таблицу для хранения результатов запроса, структура которой будет определяться списком выбора, т.Е. Динамически при выполнении запроса.

Раздел FROM является обязательным в команде SELECT и определяет таблицы и представления для выборки данных. Если таблица одновременно является и источником данных, и получателем результатов, то ей необходимо задать псевдоним с помощью конструкции AS, что обеспечит правильную работу сервера. Для таблиц можно указывать уровни блокировок: HOLDLOCK, NOLOCK и т.д.

В разделе FROM можно задавать связанные таблицы для формирования сложных запросов:

исходная таблица, тип связи, исходная таблица

ON условие поиска или

исходная таблица CROSS JOIN исходная таблица.

При использовании ключевых слов CROSS JOIN или запятой происходит связывание каждой строки левой таблицы с каждой строкой правой таблицы, так что количество строк при выполнении запроса определяется как произведение количества строк первой таблицы на количество строк второй таблицы.

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

При использовании ключевых слов LEFT [OUTER] JOIN в результат будут включены все строки левой таблицы, независимо от того, есть для них соответствующая строка в правой таблице или нет, при этом для соответствующих столбцов правой таблицы, включенных в запрос, при отсутствии соответствия будут заноситься значения NULL.

При использовании ключевых слов RIGHT [OUTER] JOIN в результат будут включены все строки правой таблицы, независимо от того, есть для них соответствующие строки в левой таблице. В столбцах левой таблицы, для тех строк, для которых нет соответствия, запишутся значения NULL.

При использовании ключевых слов FULL [OUTER] JOIN в результат будут включены все строки как правой, так и левой таблицы.

Логическое условие связывания двух таблиц, которое записывается после ключевого слово ON, должно быть логическим выражением, включающим любые операторы сравнения: =, <,

>, <=, >=,! =, <>. В ряде случаев в запросах используются опции оптимизации: LOOP, HASH, MERGE, REMOTE. Если эти опции не заданы, то оптимизацию запросов осуществляет сервер.

С помощью раздела WHERE можно сузить количество обрабатываемых строк данных,

написав одно или несколько логических условий:

WHERE условие поиска

или имя колонки * = имя колонки -- LEFT OUTER JOIN

или имя колонки * = имя колонки -- RIGHT OUTER JOIN

Логическое условие может быть произвольным, в том числе и не связанным с данными. Оно может включать логические операторы NOT, AND и OR. В ряде случаев, в особенности для сложных запросов предпочтительнее использовать условия связывания * = (аналог LEFT OUTER JOIN) или = * (аналог RIGHT OUTER JOIN), которые выполняются гораздо эффективнее.

Раздел GROUP BY позволяет выполнить группировку строк таблиц по определенным критериям. Для каждой группы можно выполнить специальные функции агрегирования, которые будут применены ко всем строкам группы:

AVG (имя столбца) – среднее значение в группе; SUM (имя столбца) – сумма значений группы;

MIN (имя столбца) – минимальное значение в группе; MAX (имя столбца) – максимальное значение в группе;

COUNT (имя столбца) – число строк в группе с непустым значением; COUNT (*) – число строк в группе, включая и пустые (NULL).

Синтаксис раздела следующий:

GROUP BY условие группировки --или BY ALL [WITH CUBE или ROLLUP] --супергруппировка.

В качестве условия группировки задается имя одного или нескольких столбцов таблицы. Именно эти столбцы должны быть включены в запрос. Наличие других столбцов не допускается. Если в запросе было определено условие, сужающее диапазон группировки выбираемых строк, то включение слова ALL обеспечит вывод всех групп, но функции агрегирования для дополнительных групп выполняться не будут.

Ключевое слово WITH CUBE инициирует суперагрегирование, когда в результат включаются строки, являющиеся результатом агрегирования уже агрегированных данных. В итоге получается многоуровневое агрегирование с итоговыми данными по всем уровням. Опция WITH ROLLUP позволяет устранить лишние строки при суперагрегировании.

Раздел HAVING задает условия поиска при определении групп с помощью раздела

GROUP BY:

HAVING условие поиска

Этот раздел аналогичен разделу WHERE.

Раздел UNION позволяет выполнить объединение данных из нескольких таблиц, имеющих одинаковый список столбцов, порядок их следования и свойства, при этом по умолчанию дублирующие строки не включаются, если не задано ключевое слово ALL:

SELECT список столбцов FROM имя первой таблицы

UNION [ALL]

SELECT список столбцов FROM имя второй таблицы и т.д.

Раздел ORDER BY используется, когда необходимо отсортировать данные в результирующем наборе:

ORDER BY

имя столбца в запросе [ASC или DESC],

имя столбца в запросе [ASC или DESC]…

Здесь ключевые

слова ASC и DESC обеспечивают сортировку соответственно

по

возрастанию или убыванию значений в соответствующем столбце.

Раздел COMPUTE позволяет применять к выбираемым столбцам функции агрегирования:

COMPUTE функция агрегирования (имя столбца запроса)

BY имена для группировки

Порядок использования столбцов в функциях агрегирования должен соответствовать порядку следования столбцов, указанному в разделе ORDER BY. Не допускается также использование ключевого слова DISTINCT.

Изменение данных в таблицах или задание значений переменным производится командой

UPDATE:

UPDATE имя таблицы или представления WITH блокировка SET имя колонки или переменной = выражение… FROM имена исходных таблиц

WHERE условия поиска

Удаление данных из таблиц производится командой DELETE: DELETE FROM имя таблицы или представления

или

DELETE FROM имя таблицы

WHERE условие поиска OPTION (уровни блокировки)

Экспорт данных из таблиц в файлы и импорт из файлов производиться утилитой bcp: Bcp “Northwind..shippers” out file.txt-c--символьный.

Задание 1. Создать базу данных InsertDB и необходимые таблицы для выполнения следующих команд INSERT:

A)Использование простой команды INSERT:

Create Database InsertDB

Create Table TabA(Col1 int,Col2 varchar(30)) Insert TabA Values(1,'Пример 1')

Select * From TabA

B)Использование произвольной последовательности колонок таблицы:

Create Table TabB(Col1 int,Col2 varchar(30)) Insert TabB (Col2,Col1) Values('Пример В',1)

Select * From TabB

C)Использование нулевых значений и значений по умолчанию:

Create Table TabC(Col1 int IDENTITY, Col2 varchar(30)

CONSTRAINT default_name DEFAULT('Значение TabC.Col2'), Col3 int NULL,

Col4 varchar(40))

Insert Into TabC(Col4) Values('Значение 1 TabC.Col4')

Insert Into TabC(Col2,Col4) Values('Явное значение TabC.Col2','Значение 2 TabC.Col4') Insert Into TabC(Col2,Col3,Col4) Values('SAV',44, 'ABC')

Select * From TabC

D) Явное задание значения для колонки-счетчика (с ограничением IDENTITY):

Create Table TabD(Col1 int IDENTITY, Col2 varchar(30))

Insert Into TabD Values('Счетчик изменяется автоматически') Insert Into TabD(Col2) Values('Вторая строка')

Set IDENTITY_INSERT TabD ON

Insert Into TabD(Col1,Col2) Values(-99, 'Явное значение') Select * From TabD

E)Использование представления для занесения значений в таблицу:

Create Table TabE(Col1 int,Col2 varchar(30)) GO

Create View ViewE AS Select Col2,Col1 From TabE GO

Insert Into ViewE Values('Строка 1',1) -- порядок ViewE Select * From TabE -- порядок TablE

F)Использование опции DEFAULT VALUES:

Create Default bound_default2 AS 'Col4' GO

Create Table TabF(Col1 int IDENTITY, Col2 varchar(30)

CONSTRAINT Fdefault_name DEFAULT('Значение TabF.Col2'), Col3 timestamp,

Col4 varchar(30), Col5 int NULL

)

GO

EXEC sp_bindefault 'bound_default2','TabF.Col4' GO

USE InsertDB

Insert Into TabF DEFAULT VALUES Select * From TabF

G)Использование команды SELECT для копирования данных в таблицу:

Create Table TabG(Col1 int IDENTITY, Col2 varchar(50))

GO

Set IDENTITY_INSERT TabG ON GO

Insert Into TabG (Col1,Col2) Select Col1,Col2 From TabD GO

Select * From TabG GO

Использование команды SELECT для копирования данных из таблицы:

Create Table TabG(Col1 int IDENTITY, Col2 varchar(30))

Set IDENTITY_INSERT TabG ON Insert Into TabG

Select * From TabD Select * From TabG

H)Копирование таблиц из базы данных Northwind в базу данных НордОст:

USE НордОст

[Set IDENTITY_INSERT имя таблиц из НордОст ON] Insert Into имя таблицы из НордОст

Select * From Northwind.dbo. Имя таблицы из Northwind