Автор работы: Пользователь скрыл имя, 19 Мая 2013 в 07:10, шпаргалка
Базы данных и файловые системы
СУБД определение, функции
СУБД определение, классификация
БД основные определения, классификация
Объекты базы данных
Физическая структура БД в SQL Server
Структурная часть реляционной модели
Фундаментальные свойства отношений
Реляционная алгебра Кодда
Целостность реляционных данных, стратегии поддержания ссылочной целостности
Этапы разработки баз данных
Нормальные формы отношений
Модель сущность-связь.
По умолчанию реализуется сортировка по возрастанию. Явно она задается ключевым словом ASC. Для выполнения сортировки в обратной последовательности необходимо после имени поля, по которому она выполняется, указать ключевое слово DESC.
Построение вычисляемых полей
В общем случае для создания вычисляемого (производного) поля в списке SELECT следует указать некоторое выражение языка SQL.
В этих выражениях применяются арифметические операции сложения, вычитания, умножения и деления, а также встроенные функции языка SQL.
Можно указать имя любого столбца (поля) таблицы или запроса, но использовать имя столбца только той таблицы или запроса, которые указаны в списке предложения FROM соответствующей инструкции. При построении сложных выражений могут понадобиться скобки.
Стандарты SQL позволяют явным образом задавать имена столбцов результирующей таблицы, для чего применяется фраза AS.
Использование итоговых функций
С помощью итоговых (агрегатных) функций в рамках SQL-запроса можно получить ряд обобщающих статистических сведений о множестве отобранных значений выходного набора.
Пользователю доступны следующие основные итоговые функции:
Count (Выражение) - определяет количество записей в выходном наборе SQL-запроса;
Min/Max (Выражение) - определяют наименьшее и наибольшее из множества значений в некотором поле запроса;
Avg (Выражение) - эта функция позволяет рассчитать среднее значение множества значений, хранящихся в определенном поле отобранных запросом записей.
Sum (Выражение) - вычисляет сумму множества значений, содержащихся в определенном поле отобранных запросом записей.
Чаще всего в качестве выражения выступают имена столбцов. Выражение может вычисляться и по значениям нескольких таблиц.
18) Построение
нетривиальных запросов с
Параметр Join
При работе в
нормализованном окружении
Параметр JOIN помещает (объединяет) информацию из двух таблиц в одно результирующее множество, которое можно представить в виде “виртуальной таблицы”. С этим множеством можно работать как с обычной таблицей и использовать его для других подзапросов.
Способ объединения таблиц задается выбором одного из четырех различных видов JOIN. Общим для всех видов JOIN является то, что они для одной записи некоторой таблицы находят одну или более соответствующих записей в других таблицах чтобы создать запись-супермножество, которая будет содержать поля обеих записей.
Базовый синтаксис JOIN выглядит следующим образом.
SELECT <SELECT-список>
FROM <первая_таблица>
<тип_объединения> <вторая_таблица>
[ON <условие_объединения>]
Параметр INNER JOIN является наиболее распространенным видом JOIN, он объединяет записи на основе одного или более общих полей, но возвращает только те записи, для которых имеет место соответствие по полям, указанным в JOIN.
SELECT <SELECT-список>
FROM <первая_таблица>
INNER JOIN <вторая_таблица>
ON <условие_объединения>
Если использовать * в списке полей вывода, тогда будут возвращены все столбцы таблиц.
Для того чтобы * использовать для отдельной таблицы, нужно указать следующим образом:
SELECT Orders.*, CompanyName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.
Если необходимо обратиться к столбцу, имя которого присутствует более одного раза в JOIN-результате, нужно полностью определить имя столбца:
Таблица.ИмяСтолбца, Псевдоним.ИмяСтолбца
OUTER JOIN
SELECT <SELECT-список>
FROM <первая_таблица (считается левой)>
{LEFT|RIGHT|FULL} [OUTER] JOIN <вторая_таблица (считается правой)>
ON <условие_объединения>
OUTER JOIN является включающим объединением. Объединение происходит по совпадающим данным, но также в случае LEFT включается вся информация из левой таблицы, RIGHT- из правой, FULL включает всю информацию из обеих таблиц.
CROSS JOIN (перекрестное объединение) объединяет каждую запись с одной стороны JOIN с каждой записью с другой стороны JOIN.
SELECT <SELECT-список>
FROM <первая_таблица >
CROSS JOIN <вторая_таблица >
UNION – специальный оператор, с помощью которого можно построить из двух или более запросов одно результирующее множество.
По сути работа этого параметра похожа на присоединение выходных данных одного запроса к выходным данным другого запроса:
- Все запросы,
объединенные этим оператором
должны иметь одинаковое
- В качестве заголовков столбцов результирующего множества будут использоваться заголовки столбцов первого запроса.
- Тип данных каждого столбца должен быть хотя бы неявно совместим с типом данных соответствующего столбца другого запроса.
- По умолчанию используется режим вывода DISTINCT, а не ALL.
Использование
в объединении производных
Производная таблица создается из столбцов и строк, полученных в результате запроса.
Для её создания необходимо заключить запрос в скобки и задать для результата запроса псевдоним.
Затем эту производную таблицу можно использовать в операторе JOIN как обычную.
Вывести названия компаний, заказавших ‘Chocolade’ и ‘Tofu’
SELECT DISTINCT c.CompanyName FROM dbo.Customers c
INNER JOIN
(SELECT CustomerID FROM dbo.Orders o
INNER JOIN dbo.[Order Details] od ON o.OrderID=od.OrderID
INNER JOIN dbo.Products p ON p.ProductID=od.ProductID
WHERE p.ProductName='Chocolade') AS choc
ON c.CustomerID=choc.CustomerID
INNER JOIN
(SELECT CustomerID FROM dbo.Orders o
INNER JOIN dbo.[Order Details] od ON o.OrderID=od.OrderID
INNER JOIN dbo.Products p ON p.ProductID=od.ProductID
WHERE p.ProductName='Tofu') AS T
ON c.CustomerID=T.CustomerID
Понятие подзапроса
Часто невозможно решить поставленную задачу путем одного запроса. Это особенно актуально, когда при использовании условия поиска в предложении WHERE значение, с которым надо сравнивать, заранее не определено и должно быть вычислено в момент выполнения оператора SELECT.
В таком случае приходят на помощь законченные операторы SELECT, внедренные в тело другого оператора SELECT.
Внутренний подзапрос представляет собой также оператор SELECT, а кодирование его предложений подчиняется тем же правилам, что и основного оператора SELECT.
Внешний оператор SELECT использует результат выполнения внутреннего оператора для определения содержания окончательного результата всей операции. Внутренние запросы могут быть помещены непосредственно после оператора сравнения (=, <, >, <=, >=, <>) в списке полей вывода оператора SELECT, в предложения WHERE и HAVING внешнего оператора SELECT – они получают название подзапросов или вложенных запросов.
Подзапрос – это инструмент создания временной таблицы, содержимое которой извлекается и обрабатывается внешним оператором.
Текст подзапроса должен быть заключен в скобки.
К подзапросам применяются следующие правила и ограничения:
- фраза ORDER BY
не используется, хотя и может
присутствовать во внешнем
- список в
предложении SELECT состоит из имен
отдельных столбцов или
- по умолчанию
имена столбцов в подзапросе
относятся к таблице, имя
- если подзапрос
является одним из двух
Можно выделить типы подзапросов:
1. Скалярный подзапрос возвращает единственное значение. В принципе, он может использоваться везде, где требуется указать единственное значение.
2. Табличный подзапрос возвращает множество значений, т.е. значения одного или нескольких столбцов таблицы, размещенные в более чем одной строке. Он возможен везде, где допускается наличие таблицы.
Определить Номер компании, сделавшей самый последний заказ
SELECT CustomerID FROM Orders
WHERE OrderDate=(SELECT MAX(OrderDate) FROM Orders)
Указать для каждого заказа номер, стоимость, и отклонение стоимости данного заказа от максимальной стоимости заказа
SELECT OrderID, SUM(UnitPrice*Quantity*(1-
SUM(UnitPrice*Quantity*(1-
(SELECT TOP 1 SUM(UnitPrice*Quantity*(1-
GROUP BY OrderID
ORDER BY SUM(UnitPrice*Quantity*(1-
FROM [Order Details]
GROUP BY OrderID
Подзапросы, возвращающие множество значений
Во многих случаях значение, подлежащее сравнению в предложениях WHERE или HAVING, представляет собой не одно, а несколько значений.
Вложенные подзапросы генерируют непоименованное промежуточное отношение, временную таблицу. Оно может использоваться только в том месте, где появляется в подзапросе. К такому отношению невозможно обратиться по имени из какого-либо другого места запроса. Применяемые к подзапросу операции основаны на тех операциях, которые, в свою очередь, применяются к множеству, а именно:
- { WHERE | HAVING } выражение [ NOT ] IN (подзапрос);
- { WHERE | HAVING } выражение оператор_сравнения { ALL | SOME | ANY }(подзапрос);
- {WHERE | HAVING } [ NOT ] EXISTS (подзапрос);
Использование операций IN и NOT IN
Оператор IN используется для сравнения некоторого значения со списком значений, при этом проверяется, входит ли значение в предоставленный список или сравниваемое значение не является элементом представленного списка.
Определить номера заказов, сделанных клиентами из Berlin
SELECT OrderID FROM Orders
WHERE CustomerID IN
(SELECT CustomerID FROM Customers WHERE City=‘Berlin’)
Использование ключевых слов ANY и ALL
Ключевые слова ANY и ALL могут использоваться с подзапросами, возвращающими один столбец чисел.
Если подзапросу будет предшествовать ключевое слово ALL, условие сравнения считается выполненным, только когда оно выполняется для всех значений в результирующем столбце подзапроса.
Если записи подзапроса предшествует ключевое слово ANY, то условие сравнения считается выполненным, когда оно выполняется хотя бы для одного из значений в результирующем столбце подзапроса.
Если в результате
выполнения подзапроса получено пустое
значение, то для ключевого слова
ALL условие сравнения будет
Все эти операторы применяется с любыми операторами сравнения
Найти номера заказов, сделанных в 1996 году, в которых количество товара с номером 36, превышает хотя бы раз такой же показатель в заказах 1998 на этот товар.
SELECT [Order Details].OrderID,Quantity FROM [Order Details] INNER JOIN Orders
ON [Order Details].OrderID=Orders.
WHERE Quantity>SOME
(SELECT Quantity FROM [Order Details] INNER JOIN Orders
ON [Order Details].OrderID=Orders.
WHERE ProductID=36 AND YEAR(OrderDate)=1998)
AND ProductID=36 AND YEAR(OrderDate)=1996
Использование операций EXISTS и NOT EXISTS
Ключевые слова
EXISTS и NOT EXISTS предназначены для
Результат их обработки представляет собой логическое значение TRUE или FALSE.
Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка.
Если результирующая таблица подзапроса пуста, результатом обработки операции EXISTS будет значение FALSE.
Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS.
Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.
Определить названия компаний, разместивших по крайней мере один заказ
SELECT CompanyName FROM Customers cu
WHERE EXISTS
(SELECT OrderID FROM Orders o WHERE o.CustomerID=cu.CustomerID )
Коррелированные подзапросы
Коррелированные
подзапросы от обычных вложенных
отличает то, что обмен информацией
между коррелированными подзапросами
и основными запросами