Основы Transact-SQL презентация

Содержание

Слайд 2

Содержание

Введение 3
1: Архитектура SQL Server 7
2: Типы данных 18
3: Инструкция SELECT 20
4: Фильтрация данных 30
5: Сортировка

данных 41
6: Типы данных (продолжение) 45
7: Функции и выражения 51
8: Суммирование и группировка данных 68
9: Выбор данных из нескольких таблиц 77
10: Управление данными 92

Слайд 3

ВВЕДЕНИЕ

История SQL
DML, DDL, DCL

SQL

SQL EVERYWHERE

Слайд 4

Введение | История SQL

SQL – Structured Query Language (язык структурированных запросов)
Это стандартный язык,

который был разработан для формирования запросов и управления данными в системах управления реляционными базами данных (СУРБД)
СУРБД – система управления базой данных, основанная на реляционной модели
В начале 70-х годов прошлого века корпорация IBM разработала язык SEQUEL (сокращение от Structured English QUEry Language) для своей СУРБД System R. Позже название языка изменили с SEQUEL на SQL из-за споров по поводу торговой марки. Сначала в 1986 г. появился стандарт ANSI языка SQL, а затем в 1987 г. и стандарт ISO. Начиная с 1986 г. ANSI и ISO выпускали релизы стандарта языка каждые несколько лет. До настоящего времени были выпущены следующие стандарты языка: SQL-86 (1986), SQL-89 (1989), SQL-92 (1992), SQL:1999 (1999), SQL:2003 (2003), SQL:2006 (2006), SQL:2008 (2008), SQL:2011 (2011).

Слайд 5

Введение | DML, DDL, DCL

У языка SQL есть несколько категорий инструкций:
Data Manipulation

Language (DML, язык манипулирования данными)
Data Definition Language (DDL, язык описания данных)
Data Control Language (DCL, язык управления данными).
Язык DML позволяет запрашивать и изменять
данные и включает такие команды,
как SELECT, INSERT, UPDATE, DELETE и MERGE.
DDL имеет дело с определениями
и включает такие команды, как
CREATE, ALTER и DROP.
Язык DCL связан с правами доступа или полномочиями и включает такие команды, как GRANT и REVOKE. Эта книга посвящена DML.

Слайд 6

1: Архитектура SQL Server

Экземпляры
Базы данных
Схемы и объекты
Целостность данных

Слайд 7

Экземпляры

Экземпляр SQL Server — это установка службы базы данных SQL Server. На одном

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

Слайд 8

Базы данных

База данных – можно представить как контейнер для хранения объектов, таких как

таблицы, представления, хранимые процедуры и т.п.
master – хранит все данные системного уровня для экземпляра SQL Server.
msdb - используется агентом SQL Server для планирования предупреждений и задач.
model - используется в качестве шаблона
для всех баз данных, создаваемых в
экземпляре SQL Server. 
tempdb - рабочее пространство для
временных объектов или взаимодействия
результирующих наборов.

Слайд 9

Базы данных

Физическая структура базы данных

Слайд 10

Схемы и объекты

Схема - представляет собой именованный контейнер для объектов базы данных, позволяющий

группировать объекты по отдельным пространствам имен. Например, образец базы данных AdventureWorks содержит схемы для Production, Sales и HumanResources.
Четырехкомпонентный синтаксис ссылок на объекты указывает имя схемы:
Server.Database.DatabaseSchema.DatabaseObject

Слайд 11

Схемы и объекты

Таблицы (Tables)
Все данные в SQL содержатся в объектах, называемых таблицами. Таблицы представляют собой совокупность

каких-либо сведений об объектах, явлениях, процессах реального мира. Никакие другие объекты не хранят данные, но они могут обращаться к данным в таблице. Таблицы содержат:
Cтроки - каждая строка (или запись) представляет собой совокупность атрибутов (свойств) конкретного экземпляра объекта ;
Столбцы - каждый столбец (поле) представляет собой атрибут или совокупность атрибутов. Поле строки является минимальным элементом таблицы. Каждый столбец в таблице имеет определенное имя, тип данных и размер.

Слайд 12

Схемы и объекты

Представления (Views)
Представлениями называют виртуальные таблицы, содержимое которых определяется запросом. Подобно реальным таблицам,

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

Слайд 13

Схемы и объекты

Хранимые процедуры (Stored procedures)
Хранимые процедуры представляют собой группу команд SQL, объединенных

в один модуль. Такая группа команд компилируется и выполняется как единое целое.
Функции (Functions)
Функции в языках программирования – это конструкции, содержащие часто исполняемый код. Функция выполняет какие-либо действия над данными и возвращает некоторое значение.
Триггеры (Triggers)
Триггерами называется специальный класс хранимых процедур, автоматически запускаемых при добавлении, изменении или удалении данных из таблицы.

Слайд 14

Схемы и объекты

Индексы (Indexes)
Индекс – структура, связанная с таблицей или представлением и предназначенная

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

Слайд 15

Целостность данных

Ограничения целостности – механизм, обеспечивающий автоматический контроль соответствия данных установленным условиям (или ограничениям)
Ограничение PRIMARY

KEY – первичный ключ, обеспечивает уникальность строк и запрещает значения NULL.
- В таблице возможно наличие только одного ограничения по первичному ключу.
- Все столбцы с ограничением PRIMARY KEY должны иметь признак NOT NULL.
Ограничение UNIQUE – так же обеспечивает уникальность строк, давая возможность реализовать концепцию альтернативных ключей. Позволяет определить несколько ограничений в одной таблице.

Слайд 16

Целостность данных

Ограничение FOREIGN KEY – внешний ключ, обеспечивает ссылочную целостность.
Ограничение CHECK – позволяет

определить логическое выражение (предикат), которому должна удовлетворять строка для того, чтобы быть включенной в таблицу или измененной.
Ограничение DEFAULT – связано с конкретным атрибутом, представляет собой выражение применяемое по умолчанию.

Слайд 17

2: ТИПЫ ДАННЫХ

Обзор типов данных

Слайд 19

3: Инструкция SELECT

Логический порядок обработки инструкций
Литералы
Получение данных
Select-list
Удаление повторяющихся строк
Ограничение возвращаемого
набора данных
Задания

Слайд 20

Логический порядок обработки инструкции

Порядок обработки:
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY

Правильная запись запроса:

Логическая последовательность обработки:

Слайд 21

Инструкция SELECT

В отличие от всех других ключевых слов, SELECT является единственным оператором

извлечения информации из баз данных.
SELECT – отвечает на любой вопрос типа: кто, что, где, когда, что если и сколько.

Слайд 22

Инструкция SELECT Литералы

Литерал (англ. literal ) — запись в исходном коде компьютерной программы, представляющая

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

Слайд 23

Инструкция SELECT Получение данных из таблиц

Для получения данных из таблиц и представлений используется

ключевое слово FROM

Слайд 24

Инструкция SELECT Select-list

Для получения всех полей таблицы можно использовать символ * (астериск, звезда)
Допускается

смешивание литералов и название полей в одном выражении:

Слайд 25

Инструкция SELECT Select-list

Для именования полей допускается использовать – двойные кавычки, одинарные кавычки, квадратные скобки:
Ключевое

слово AS опционально и может быть опущено.

Слайд 26

Удаление повторяющихся строк DISTINCT

Структура реляционных баз данных такова, что столбцы очень часто содержат

одинаковые значения в разных строках. Поэтому вполне естественно желать от произвольного запроса такого результата, в котором каждая строка была бы уникальной. Для устранения этого неудобства служит ключевое слово DISTINCT.
Синтаксис:
SELECT [ALL | DISTINCT] ,
FROM
ALL – значение по умолчанию, выводит все наборы строк
DISTINCT – выводит уникальный набор строк

Слайд 27

Ограничение возвращаемого набора данных

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

TOP.
Синтаксис:
SELECT [ TOP (expression) [PERCENT] [WITH TIES] ]
expression – числовое выражение, которое задает количество возвращаемых строк
PERCENT – ключевое слово, указывает, что значение expression указано в процентах
WITH TIES – ключевое слово, указывает, что будут возвращены дополнительные строки, у которых повторяется набор отсортированный в ORDER BY.
Ключевое слово TOP допустимо использовать с предложениями SELECT, INSERT, DELETE, UPDATE

Слайд 28

Инструкция SELECT Задания

Напишите инструкцию SELECT, в которой перечислен список клиентов вместе с их идентификационными

номерами (CustomerID). Включают StoreID и AccountNumber из таблицы Sales.Customer
Напишите инструкцию SELECT, в которой содержится список имен (Name), номер продукта (ProductNumber) и цвет (Color) каждого продукта из таблицы Production.Product
Напишите инструкцию SELECT, в которой содержится список идентификаторов клиентов (CustomerID) и идентификаторы заказов на продажу (SalesOrderId) из таблицы Sales.SalesOrderHeader
Ответьте на вопрос: Почему вы должны указывать имена колонок, а не использовать символ * (звездочка) при написании запроса?
Напишите запрос используя таблицу Sales.SalesOrderDetail для отображения списка заказанных товаров (ProductId) удалив повторения.
Выведите первые 9 процентов записей из таблицы Production.Product.

Слайд 29

4: ФИЛЬТРАЦИЯ ДАННЫХ

Предложение WHERE
Операторы сравнения
Операторы BETWEEN, LIKE, IN
Комбинирование условий
Работа с Неизвестным
Задания

Слайд 30

Предложение WHERE Операторы сравнения

Для фильтрации возвращаемого набора данных добавляется не обязательное предложение WHERE. Оператор

WHERE содержит выражения – предикаты, которые возвращает TRUE, FALSE или Неизвестно (NULL):
SELECT ,
FROM .

WHERE = ;

Операторы
> (больше)
< (меньше)
= (равно)
!< (не меньше чем)
сравнения:
>= (больше или равно)
<= (меньше или равно)
<> (не равно) или !=
!> (не больше чем)

Слайд 31

Оператор BETWEEN и NOT BETWEEN

Оператор BETWEEN
Применяют для того, чтобы определить, находится или

нет значение в пределах выбранного диапазона.
Синтаксис:
SELECT ,
FROM .

WHERE [ NOT ] BETWEEN AND ;
BETWEEN работает со строками символов, числами и значениями даты и времени
Эквивалентная запись:
WHERE column >= low_value AND column <= high_value;
Оператор BETWEEN можно инвертировать оператором NOT

Слайд 32

Сравнение по шаблону оператором LIKE

Оператор LIKE
Синтаксис:
SELECT ,
FROM .


WHERE match_expression [ NOT ]
LIKE pattern [ ESCAPE escape_character ] ;
match_expression – любое текстовый столбец или текстовое выражение
pattern – текстовая строка представляющая собой образец, задающий правило поиска (иногда называют Шаблоном, Маской)
escape_character – cимвол, помещаемый перед символом-шаблоном, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон.
- Оператор LIKE можно инвертировать оператором NOT

Слайд 33

Сравнение по шаблону оператором LIKE

Слайд 34

Оператор IN

Оператор IN
Чтобы определить, соответствует ли определенное значение какому-либо значению из произвольного списка,

применяют оператор IN.
Синтаксис:
SELECT ,
FROM .

WHERE match_expression [ NOT ] IN (, , … );
работает со строками символов, числами и значениями даты и времени;
представляет собой одно или несколько неупорядоченных значений, разделенных запятыми и заключенных в круглые скобки;
оператор IN можно инвертировать оператором NOT;

Слайд 35

Комбинирование условий AND OR NOT

Оператор AND
объединяет два условия и принимает значение true (истина)

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

Слайд 36

Комбинирование условий AND OR NOT

Оператор OR
объединяет два условия и принимает значение true (истина)

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

Слайд 37

Комбинирование условий AND OR NOT

Оператор NOT
в отличие от операторов AND и OR, не

связывает двух условий, а инвертирует одно-единственное условие;
в сравнениях следует ставить оператор NOT перед именем столбца или выражением, значение которого предполагается инвертировать, но не перед соответствующим оператором (например, WHERE NOT state = 'CA' скомпоновано правильно, а предложение WHERE state NOT = 'CA' – неверно, хотя и читается «естественнее»);

Слайд 38

Работа с Неизвестным (Unknown)

NULL означает отсутствие, неизвестность информации. Значение NULL не является значением в

полном смысле слова: по определению оно означает отсутствие значения и не принадлежит ни одному типу данных. Поэтому NULL не равно ни логическому значению FALSE, ни пустой строке, ни нулю. При сравнении NULL с любым значением будет получен результат NULL, а не FALSE и не 0. Более того, NULL не равно NULL!
Оператор IS NULL
работает со столбцами любых типов данных;
его можно инвертировать в оператор IS NOT NULL;
можно объединять условия IS NULL с другими условиями операторами AND и OR.

Слайд 39

Фильтрация данных Задания [1/2]

Напишите запрос с использование предложения WHERE, который выберет всех сотрудников из

таблицы HumanResources.Employee с должностями «Research and Development Manager» или начинающиеся с «Vice». Выведите поля BusinessEntityID, LoginID и JobTitle.
Выберите из таблицы Person.Person все записи, где MiddleName соответствует букве J. Вывести BusinessEntityID, FirstName, MiddleName, LastName.
Выберите из таблицы Production.ProductCostHistory записи, которые были изменены 17 июня 2007 года.
Изменить запрос по заданию №1 таким образом, чтобы отобразить сотрудников должности которых не являются «Research and Development Manager» и не начинаются с «Vice»
Выберите все продукты из таблицы Production.Product названия которых начинаются со слова «Chain» или содержат слово «helmet»
Выберите заказы из таблицы Sales.SalesOrderHeader оформленные в сентябре 2005 года (OrderDate) и полная стоимость (total due) которых превышает 1000$.
Измените запрос №6 таким образом, чтобы дата заказа была с 1 по 3 сентября 2005 года. Решите данную задачу тремя способами.

Слайд 40

Фильтрация данных Задания [2/2]

Измените один из запросов №7 оставив только те записи, у которых

идентификатор заказчика (SalesPersonID) соответствует 279 или идентификатор территории (TerritoryID) соответствует 4 или 6.
Выберите продукты из таблицы Production.Product которые имеют цвет отличный от голубого (blue), включите в выборку продукты у которых не указан цвет.
Выберите продукты из таблицы Production.Product у которых заполнено хотя бы одно из полей Style, Size или Color.

Слайд 41

5: СОРТИРОВКА ДАННЫХ

Предложение ORDER BY
Ограничение возвращаемого набора данных

Слайд 42

Предложение ORDER BY

Синтаксис:
SELECT ,
FROM .


ORDER BY [], []

- направление сортировки, указывается для каждой колонки, принимает значения ASC и DESC
ASC (по умолчанию) [ascend] – сортировка по возрастанию
DESC [descend] – сортировка по убыванию
В качестве выражения сортировки допускается использовать:
Имя столбца
Псевдоним (алиас) столбца
Положительное число, указывающее на позицию сортируемой колонки в Select-list

Слайд 43

Ограничение возвращаемого набора данных

Синтаксис:
ORDER BY [], []
OFFSET

n ROWS
[ FETCH NEXT n ROWS ONLY ] ;
OFFSET n ROWS – ограничивает возвращаемый набор данных, пропуская n записей сначала
FETCH NEXT n ROWS ONLY – ограничивает набор данных, оставляя только первые n записей

Слайд 44

Сортировка данных Задания

Выберите все записи из таблицы Person.Person отсортировав по полям LastName, FirstName, и

MiddleName в порядке убывания каждого поля.
Измените запрос в задании №1 таким образом, чтобы отобразить только 10 записей начиная с 20.
Напишите запрос, который выведет список победителей акции, проведенной в магазине. По условиям акции победителями считаются те покупатели, которые сделали заказ во втором полугодии 2006 года (OrderDate), при этом сумма покупки (TotalDue) должна быть от 300 до 500 долларов. В акции не участвуют заказы которые были сделаны в другой валюте (заполнено поле CurrencyRateID). Под акцию выделено 10 денежных призов, для тех, кто сделал самую крупную покупку(TotalDue), в случае если участников больше 10, то учтите и их. Используйте таблицу Sales.SalesOrderHeader, результат должен содержать поля SalesOrderID, OrderDate, CustomerID, TotalDue.

Слайд 45

6: ТИПЫ ДАННЫХ (продолжение)

Функции преобразования типов данных
Таблица преобразования типов данных
Приоритет типов данных
Усечение и округление

результатов
Стили даты и времени

Слайд 46

Функции преобразования типов данных

В реализациях языка SQL может быть выполнено неявное преобразование типов.

Так, например, в SQL Server при сравнении или комбинировании значений типов smallint и int, данные типа smallint неявно преобразуются к типу int.
Для явного преобразования типов в SQL Server доступно две
функции CAST и CONVERT
Синтаксис:
CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
expression – любое допустимое выражение
data_type – целевой тип данных
length – целое число, обозначающее длину целевого типа данных, умолчание – 30
style – целое число, определяющее, как функция CONVERT преобразует выражение

Слайд 48

Приоритет типов данных

Если оператор связывает два выражения различных типов данных, то по правилам

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

Слайд 49

Усечение и округление результатов

При преобразовании символьных или двоичных выражений (char, nchar, nvarchar, varchar,

binary или varbinary) к выражению другого типа данных данные могут быть усечены, отображаться только частично или вызывать ошибку, так как результат слишком мал для отображения. Результаты преобразований в char, varchar, nchar, nvarchar, binary и varbinary усекаются всегда, за исключением случаев, перечисленных в таблице ниже.

Слайд 50

Стили даты и времени

Слайд 51

7: ФУНКЦИИ И ВЫРАЖЕНИЯ

Соединение строк
Обработка Неизвестных значений
Математические операции
Строковые функции
Функции даты
Математические функции
Системные функции
Задания

Слайд 52

Соединение строк

Соединение (конкатенация) строк
Оператор «+» сложение позволяет соединять строки.
Синтаксис:
<строка или колонка таблицы> +

<строка или колонка таблицы >
Соединение (конкатенация) строк с NULL
Внимание! При соединении любых значений с NULL всегда возвращается NULL.
CONCAT – возвращает строку которая является результатом соединения двух и более строк. Функция CONCAT самостоятельно обрабатывает значения NULL.
Синтаксис:
CONCAT ( string_value1, string_value2 [, string_valueN ] )

Слайд 53

Обработка Неизвестных значений

В SQL Server реализовано две функции позволяющие заменить NULL значения.
ISNULL –

заменяет значение NULL указанным значением.
Синтаксис:
ISNULL(, )
COALESCE – возвращает первое выражение из списка аргументов, не равное NULL.
Синтаксис:
COALESCE(, ,..., )
NULLIF – Возвращает NULL если переданные выражения равны.
Синтаксис:
NULLIF ( expression , expression )

Слайд 54

Математические операции

Вы можете использовать математические операторы для выполнения простых вычислений.
Арифметические операторы:
+ сложение expression + expression
-

вычитание expression - expression
* умножение expression * expression
/ деление expression / expression
% остаток от деления expression % expression

Слайд 55

Строковые функции

RTRIM и LTRIM – удаляют пробелы справа (RTRIM) или слева (LTRIM)
Синтаксис:
LTRIM (expression)


RTRIM (expression)
expression – строковое выражение
LEFT и RIGHT – возвращают указанное количество символов с левой или правой стороны строки соответственно.
Синтаксис:
LEFT (expression, length)
RIGHT (expression, length)
expression – строковое выражение
length – количество возвращаемых символов

Слайд 56

Строковые функции

LEN и DATALENGTH – применяются для получения количества символов в строках (LEN)

и для получения размера строки в байтах (DATALENGTH)
Синтаксис:
LEN (expression)
DATALENGTH (expression)
expression – строковое выражение
CHARINDEX – ищет в выражении другое выражение и возвращает его начальную позицию, если оно найдено.
Синтаксис:
CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
expressionToFind - последовательность символов, которую надо найти.
expressionToSearch - строка, в которой производится поиск
start_location - целое число, определяющее позицию, с которой начинается поиск

Слайд 57

Строковые функции

SUBSTRING – возвращает часть символьного, двоичного, текстового
Синтаксис:
SUBSTRING ( expression, start ,

length )
expression – строковое выражение
start – начальная позиция возвращаемых символов
length – количество возвращаемых символов
CHOOSE – возвращает элемент по указанному индексу из списка значений
Синтаксис:
CHOOSE ( index, val_1, val_2 [, val_n ] )
index – целочисленное выражение, которое представляет отсчитываемый от единицы индекс в списке элементов, следующих за ним
val_1 … val_n – список значений любого типа данных с разделителями-запятыми

Слайд 58

Строковые функции

UPPER и LOWER – возвращают символьные выражение, в котором символы преобразованы в

символы верхнего или нижнего регистра соотвественно
Синтаксис:
UPPER ( character_expression )
LOWER ( character_expression )
character_expression – строковое выражение
REPLACE – заменяет все вхождения указанного строкового значения другим строковым значением.
Синтаксис:
REPLACE ( string_expression , string_pattern , string_replacement )
string_expression – строковое выражение, в котором выполняется поиск. string_pattern – подстрока для поиска
string_replacement – Строка замещения

Слайд 59

Функции даты

GETDATE – возвращает текущую системную временную метку базы данных в виде значения

datetime без смещения часового пояса базы данных.
SYSDATETIME – возвращает значение типа datetime2(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server.
Синтаксис:
GETDATE ( )
SYSDATETIME ( )
SYSDATETIME имеет большую точность в долях секунды, чем GETDATE.

Слайд 60

Функции даты

DATEADD – возвращает дату, полученную как сумму исходной даты date и интервала

number (целое число со знаком), добавленного к заданному компоненту datepart даты date
Синтаксис: DATEADD (datepart , number , date )
DATEDIFF – возвращает количество границ даты и времени, пересекающихся у двух указанных дат
Синтаксис: DATEDIFF (datepart , startdate , enddate)
DATENAME  – возвращает символьную строку, содержащую определенную часть указанной даты
Синтаксис: DATENAME (datepart , date)
DATEPART  – возвращает целое число, представляющее определенную часть указанной даты
Синтаксис: DATEPART (datepart , date)
DAY, MONTH, и YEAR - являются частными случаями функции DATEPART и возвращают День, Месяц и Год соответственно

Слайд 61

Функции даты

Допустимые значения параметра datepart и их сокращения

Слайд 62

Математические функции

ABS – возвращает абсолютное (положительное) значение указанного выражения
Синтаксис: ABS ( numeric_expression )
POWER

– вычисляет значение указанного выражения в степени y
Синтаксис: POWER ( numeric_expression, y )
SQUARE – возвращает квадрат указанного числа с плавающей точкой.
Синтаксис: SQUARE ( float_expression )
SQRT – возвращает квадратный корень указанного числа с плавающей точкой.
Синтаксис: SQRT ( float_expression )
ROUND – возвращает числовое значение, округленное до указанной длины или точности
Синтаксис: ROUND (numeric_expression, length [, function ] )
numeric_expression – округляемое числовое выражение
length – точность округления, положительное значение указывает, что округляется десятичная часть, отрицательные – слева от точки
function – 0 – округление, любое число отличное от нуля – усечение значения.

Слайд 63

Системные функции

Выражение CASE
Выражение CASE имеет два формата:
простое выражение CASE для определения результата сравнивает

выражение с набором простых выражений;
поисковое выражение CASE для определения результата вычисляет набор логических выражений.
Оба формата поддерживают дополнительный аргумент ELSE.
Выражение CASE может использоваться в любой инструкции или предложении, которые допускают допустимые выражения.
Синтаксис простого CASE:
CASE
WHEN THEN
WHEN THEN
[ELSE ] END

Слайд 64

Системные функции

Выражение CASE
Синтаксис поискового CASE:
CASE WHEN THEN
WHEN

THEN
[ELSE ] END

Слайд 65

ФУНКЦИИ И ВЫРАЖЕНИЯ Задания (1)

Вывести список адресов из таблицы Person.Address в формате «AddressLine1 (City

PostalCode)»
Из таблицы Production.Product выбрать продукты в названии которых (Name) встречается слово «Road» (любая позиция). Вывести Код продукта (ProductId), Цвет (Color) заменив неопределенные значения на «No color», Название (Name)
Изменить запрос №2 добавив поле Описание (Description) в формате «Name: Color», для не указанных цветов вывести «Name».
Вывести записи из таблицы Production.Product в формате «ProductId: Name» (обратите внимание на типы данных).
Вычислить разницу полей MaxQty и MinQty в таблице Sales.SpecialOffer, вывести идентификатор предложения (SpecialOfferID), описание Description и вычисленную разницу (Diff).
В таблице Sales.SalesOrderDetail вычислить конечную стоимость строки умножив количество (OrderQty) на цену (UnitPrice).

Слайд 66

ФУНКЦИИ И ВЫРАЖЕНИЯ Задания (2)

Напишите запрос, который выведет первые 10 символов столбца AddressLine1 из

таблицы адресов Person.Address, укажите алиас нового столбца.
Из таблицы адресов Person.Address выберите записи отобразив в столбце AddressLine1 символы с 10 по 15ый
Номер продукта (ProductNumber) из таблицы Production.Product содержит дефис разделяющий название на код и номер (CA-1234, X-45454). Напишите запрос выводящий номера продуктов следующие за знаком дефис.
Напишите запрос вычисляющий количество дней между датой заказа (OrderDate) и датой отправки (ShipDate) в таблице Sales.SalesOrderHeader. Дополнительно включите в выборку SalesOrderId, OrderDate и ShipDate.
Напишите запрос отображающий только дату (отбросить время) для полей дата заказа (OrderDate) и дата отгрузки (ShipDate) в таблице Sales.SalesOrderHeader.
Для каждой записи в таблице Sales.SalesOrderHeader увеличьте дату заказа на 6 месяцев.

Слайд 67

ФУНКЦИИ И ВЫРАЖЕНИЯ Задания (3)

Выберите из таблицы Sales.SalesOrderHeader заказы оформленные в 2007 году (OrderDate).

В выборке выведите SalesOrderID, год (OrderYear), месяц (OrderMonth). Используйте функция извлечения части даты.
Для все заказов в таблице Sales.SalesOrderHeader выведетие номер заказа (SalesOrderId) и подитог (SubTotal) округленный до двух знаков после запятой.
Для каждого сотрудника в таблице HumanResources.Employee определить является ли его идентификатор (BusinessEntityID) четным. Используйте целочисленное деление и выражение CASE для вывода информации.
Выберите все детализации заказов из таблицы sales.SalesOrderDetail напротив каждой детализации выведите информацию о количестве заказов (OrderQty). 'Менее 10‘, 'Между 10 и 19‘, 'Между 20 и 29‘, 'Между 30 и 39‘, 'Более 40‘ в столбец Range

Слайд 68

8: Суммирование и группировка данных

Агрегатные функции
Предложение GROUP BY
Предложение GROUP BY и ORDER BY
Предложение

GROUP BY и WHERE
Предложение GROUP BY и HAVING
CUBE и ROLLUP
Задания

Слайд 69

Агрегатные функции

Агрегатные функции являются специальным типом запросов используемых для группирования и суммирования данных.

Данный тип функций оперирует наборами данных.
Часто используемые агрегатные функции:
COUNT – подсчитывает количество строк или не NULL значений в столбце
SUM – вычисляет сумму значений, используется только с числовыми типами данных
AVG – вычисляет среднее значение
MIN и MAX – ищут минимальное или максимальное значение в наборе данных
Основные свойства агрегатных функций:
AVG и SUM возможно использовать только с числовыми типами данных
MIN, MAX и COUNT возможно использовать с числовыми и текстовыми типами данных
агрегатные функции игнорируют NULL значения
все агрегатные функции, за исключением COUNT (*), игнорируют значения NULL

Слайд 70

Агрегатные функции

COUNT
Синтаксис: COUNT ( { [ [ ALL | DISTINCT ] expression ]

| * } )
ALL – применяет агрегатную функцию ко всем значениям (по умолчанию)
DISTINCT – указывает, что нужно вернуть все уникальные не NULL значения
expression – выражение любого типа кроме text, image, ntext.
* – указывает, что все колонки должны быть агрегированы, возвращает количество всех записей в таблице
MIN, MAX, AVG
Синтаксис: Fn ( [ ALL | DISTINCT ] expression )
ALL – применяет агрегатную функцию ко всем значениям (по умолчанию)
DISTINCT – указывает, что нужно вернуть все уникальные не NULL значения
expression – выражение над которым нужно выполнить вычисление

Слайд 71

Предложение GROUP BY

Используя предложение GROUP BY можно указать по каким колонкам или выражения

необходимо сгруппировать данные, при этом агрегатные функции будут работать в разрезе заданных групп.
Синтаксис:
SELECT (),
FROM

GROUP BY
Указанные колонки после предложения GROUP BY могут быть использованы в Select-list.

Слайд 72

Предложение GROUP BY и ORDER BY

Предложение GROUP BY допускает использование сортировки добавив предложение

ORDER BY в конце запроса.
Синтаксис:
SELECT (),
FROM

GROUP BY
ORDER BY
В предложении ORDER BY можно использовать колонки перечисленные в GROUP BY , агрегатные функции, алиасы или порядковые номер столбцов из Select-list.

Слайд 73

Предложение GROUP BY и WHERE

Для фильтрации данных можно добавить предложение WHERE при этом

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

WHERE
GROUP BY

Слайд 74

Предложение GROUP BY и HAVING

Для исключения записей основанных на агрегатных выражениях применяется предложение

HAVING. HAVING предложение допускает использование как агрегатных функций так и не агрегируемые колонки, но указанные в GROUP BY
Синтаксис:
SELECT (),
FROM

GROUP BY
HAVING () =

Слайд 75

CUBE и ROLLUP

Операторы ROLLUP и CUBE являются расширениями предложения GROUP BY. Применяя эти

операторы можно сформировать такой же результирующий набор, который получится в результате использования оператора UNION ALL для объединения одиночных запросов группирования, однако использование одного из операторов предложения GROUP BY обычно является более эффективным.
Синтаксис:
SELECT (),
FROM

GROUP BY (, )

Слайд 76

Предложение OVER

Определяет секционирование и упорядочение набора строк до применения оконной функции.
Синтаксис:
SELECT ()


OVER ( [ PARTITION BY value_expression] [ORDER BY value_expression] )
FROM

PARTITION BY – Разделяет результирующий набор на секции. Оконная функция применяется к каждой секции отдельно, и вычисление начинается заново для каждой секции.
value_expression – Указывает столбец, по которому секционируется набор строк, произведенный соответствующим предложением FROM

Слайд 77

Суммирование и группировка данных Задания (1)

Посчитайте количество заказчиков в таблице Sales.Customer
Посчитайте количество заказанных товаров

(OrderQty) из таблицы Sales.SalesOrderDetail
Выберите из таблицы детализации заказов Sales.SalesOrderDetail самую высокую и низкую цену за товар.
Вычислите среднюю стоимость доставки (Freight) из таблицы Sales.SalesOrderHeader
Вычислите количество заказанных продуктов (OrderQty) в разрезе каждого продукта (ProductId) из таблицы Sales.SalesOrderDetail. Результат отсортируйте в порядке убывания количества.
Для каждого заказа SalesOrderId из таблицы Sales.SalesOrderDetail вычислите количество строк. Выведите 12 самых крупных заказов по количеству строк, необходимо учесть заказы разделившие последнее место.

Слайд 78

Суммирование и группировка данных Задания (2)

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

Sales.SalesOrderHeader по каждому клиенту (CustomerId) в разрезе года размещения заказа (OrderDate). Отсортируйте результат по годам, в порядке убывания количества заказов.
Из таблицы Sales.SalesOrderDetail выберите заказы (SalesOrderId) количество строк по которым находится в интервале от 10 до 20. Отсортируйте результат по количеству строк заказа.
Выберите заказы из таблицы Sales.SalesOrderDetail выбрав только те заказы (SalesOrderId), сумма строк по которым превышает 1000$. Отсортируйте результат в порядке убывания суммы за заказ.
Напишите запрос который группирует продукты по моделям (ProductModelID) синего и красного цвета (Color) из таблицы Production.Product, отберите только те модели по которым есть только один продукт каждого цвета.
Из таблицы Sales.SalesOrderDetail выберите количество уникальных заказанных товаров (ProductID)
Из таблицы Sales.SalesOrderHeader посчитайте уникальное количество клиентов (CustomerId) в разрезе территорий TerritoryID

Слайд 79

9: Выбор данных из нескольких таблиц

INNER JOINs
OUTER JOINs
Подзапросы
Объединения

Слайд 80

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

Любой запрос, который выбирает данные из более чем одной таблицы, выполняет какое-либо

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

Слайд 81

Типы соединений

Соединения можно разделить на следующие категории.
Внутренние соединения INNER JOIN
используют оператор сравнения

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

Слайд 82

Типы соединений

Полное [внешнее] соединение FULL JOIN или FULL OUTER JOIN
Возвращает все строки из

правой и левой таблицы. Каждый раз, когда строка не имеет соответствия в другой таблице, столбцы списка выбора другой таблицы содержат значения NULL.
Перекрестные с соединения CROSS JOIN
Возвращает все строки из левой таблицы. Каждая строка из левой таблицы соединяется со всеми строками из правой таблицы. Перекрестные соединения называются также декартовым произведением.
Таблицы или представления в предложении FROM могут указываться в любом порядке с внутренним соединением или полным внешним соединением. Однако важен порядок таблиц или представлений, заданных при использовании левого или правого внешнего соединения. 

Слайд 83

Типы соединений

Слайд 84

Внутреннее соединение INNER JOIN

INNER JOIN
Синтаксис:
SELECT
FROM
LEFT [OUTER] JOIN

ON . =
LEFT [OUTER] JOIN ON . = .
AND . = .
В этом соединении сначала проводится сравнение значений связанных столбцов. Но в результат объединения включаются все строки левой таблицы, а не только те, для которых в правой таблице нашлись строки с удовлетворяющими сравнению значениями связанных столбцов. Если некой строке слева не нашлось ни одной строки справа, SQL Server объединяет ее с искусственной строкой, состоящей из значений null.

Слайд 86

Внешние соединения OUTER JOIN

RIGHT [OUTER] JOIN
Синтаксис:
SELECT
FROM
FULL [OUTER] JOIN

ON . =
Включает и все строки левой таблицы, и все строки правой таблицы. Если у какой-либо строки (слева или справа) нет пары по связанным столбцам, SQL Server объединяет ее с искусственной строкой, состоящей из значений null.

Слайд 88

Перекрестное соединение CROSS JOIN

CROSS JOIN
Синтаксис:
SELECT
FROM t1
[INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER |CROSS] JOIN t2 ON …
[INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER |CROSS] JOIN t3 ON …
GROUP BY t1., t2., t3.

Слайд 90

Подзапросы

Подзапросы представляют собой вложенные запросы в основной запрос. Одна из причин использования подзапросов

– найти связанные записи в таблицах при этом не соединяясь с другой таблицей.
Синтаксис:
SELECT
FROM
WHERE [NOT] IN (SELECT FROM
WHERE . = .)

Слайд 91

Производные таблицы

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

таблиц.
Синтаксис:
SELECT
FROM
GROUP BY ) AS B ON A. = B.

Слайд 92

Объединения

Для объединения нескольких наборов (запросов) применяют оператор UNION
Синтаксис:
SELECT , , FROM
UNION

[ALL]
SELECT , , FROM
Ограничения:
Количество и порядок столбцов должны быть одинаковыми во всех запросах.
Типы данных должны быть совместимыми.
Ключевое слово ALL указывает, что в результирующем наборе необходимо оставить все строки. Если не указано, то дублирующиеся строки наборов будут удалены.

Слайд 93

Соединение таблиц Задания (1)

В таблице HumanResources.Employee размещена информация о сотрудниках, но в этой таблице

нет данных о фамилиях. Присоедините таблицу Person.Person по столбцу BusinessEntityID и выведите JobTitle, BirthDate, FirstName, LastName.
Имена поставщиков можно найти в таблице Person.Person, присоедините таблицу поставщиков Sales.Customer по столбцам Person.BusinessEntityID и Customer.PersonID. Выведите CustomerID, StoreID, TerritoryID, FirstName, MiddleName, LastName
Расширьте запрос №2 присоединив таблицу Sales.SalesOrderHeader и выведети из нее столбец SalesOrderid. Соединение выполните с таблицей Sales.Customer по полю CustomerId
Описание (CatalogDescription) для каждого продукта хранится в таблице Production.ProductModel. Выведите информацию об описании (CatalogDescription), дополнив ее цветом (Color) и размером (Size) продукта из таблицы Production.Product.
Напишите запрос который выведет информацию о клиентах (ФИО) и наименовании продуктов, которые они приобрели. Необходимо соединить 5 таблиц.

Слайд 94

Соединение таблиц Задания (2)

Выведите информацию о продуктах (Production.Product) идентификатор продукта (ProductID), название (Name) и

идентификатор заказа (SalesOrderID) из таблицы Sales.SalesOrderDetail, если такие имеются.
Измените запрос №6 таким образом, чтобы отобразить только те продукты, которые небыли заказаны.
Напишите запрос который вернет все записи из таблицы Sales.SalesPerson и соединив ее с Sales.SalesOrderHeader по столбцам BusinessEntityID и SalesPersonID. Включите в выборку поля SalesYTD, SalesOrderID и SalesPersonID
Измените запрос №8 дополнив его информацией из таблицы о фамилиях и именах покупателей.
Напишите запрос который выведет имена клиентов (FirstName, MiddleName, LastName) из таблицы Person.Person и вычислит количество сделанных заказов по каждому из этих клиентов
Для каждого товара вычислите проданное количество (OrderQty) и вырученную сумму от продаж (LineTotal) в разрезе по годам (OrderDate). Выведите идентификатор продукта (ProductID), название (Name), год продажи, вырученная сумма, проданное количество

Слайд 95

Соединение таблиц Задания (3)

Подзапросы:
Выведите название номер и название продукта (ProductID, Name) из табилцы Production.Product,

для тех продуктов, которые были заказаны (проверить в таблице Sales.SalesOrderDetail)
Измените запрос №10 оставив в результирующем наборе ни разу не заказанные товары
Напишите запрос использую UNION объединив даты изменения записей (ModifiedDate) из таблицы Person.Person и даты трудоустройства сотрудников (HireDate) из таблицы HumanResources.Employee
* Определите сколько в среднем каждый год француженки тратят на товары нашего магазина.
Подсказка: Sales.SalesOrderHeader – Заказы
Sales.Customer – Клиенты
Sales.vPersonDemographics – Расширенная информация о клиентах
Sales.SalesTerritory – Информация о территориях, где делали заказы
Sales.Customer и Sales.vPersonDemographics связывается по PersonID и BusinessEntityID соответственно.

Слайд 96

10: Управление данными

Вставка данных
Удаление данных
Изменение данных
Задания

Слайд 97

Вставка данных

Вставка строки с литералами в качестве значений
Синтаксис:
INSERT [INTO] [(,)] SELECT ,;


INSERT [INTO] [(,)] VALUES (,);
Вставка множества строк
Синтаксис:
INSERT [INTO] [(,)]
SELECT , UNION [ALL] SELECT ,;
INSERT [INTO] [(,)]
VALUES (,), (,), (,) ;

Слайд 98

Вставка данных

Вставка строк из другой таблицы
Синтаксис:
INSERT [INTO] [(,)]
SELECT ,
FROM
WHERE …

;
Создание таблицы и вставка одновременно
Синтаксис:
SELECT ,
INTO
FROM ;

Слайд 99

Вставка данных

Вставка строк со значениями по умолчанию
При создании таблиц можно добавить ограничение DEFAULT

на колонку, которое будет использоваться в качестве значения по умолчанию. Для использования значения по умолчанию оператор INSERT можно написать двумя способами:
Не указывать колонку, со значением по умолчанию, в списке колонок;
Использовать ключевое слово DEFAULT

Слайд 100

Удаление данных

Предложение DELETE
Синтаксис:
DELETE [FROM]
[WHERE … ];
Удаление используя соединения или подзапросы
DELETE
FROM

AS
INNER JOIN ON . = .
[WHERE ]
DELETE [FROM]
WHERE IN (SELECT FROM )

Слайд 101

Удаление данных

Очистка таблиц
Синтаксис:
TRUNCATE TABLE ;
Удаляет все строки в таблице, не записывая в журнал

удаление отдельных строк. Инструкция TRUNCATE TABLE похожа на инструкцию DELETE без предложения WHERE, однако TRUNCATE TABLE выполняется быстрее и требует меньших ресурсов системы и журналов транзакций.
Преимущества:
Использует меньший объем журнала транзакций;
Обычно использует меньшее количество блокировок (всегда блокирует таблицу);
Сохраняет структуру таблицы без изменений;
Сбрасываются все счетчик идентификаторов.

Слайд 102

Изменение данных

Простое изменение данных
Синтаксис:
UPDATE
SET = , =


[WHERE ]
Изменение данных с использование соединений
Синтаксис:
UPDATE
SET =
FROM AS
INNER JOIN ON . = .

Слайд 103

Задания (INSERT) [1/2]

Напишите SELECT для получения первых двух записей из таблицы Production.Product ,

отсортировав по полю StandardCost в порядке убывания. Из полученных данных составьте два предложение INSERT для вставки в таблицу dbo.demoProduct. Используемые поля: ProductID, Name, Color, StandardCost, ListPrice, Size, Weight.
Расширьте результат выборки SELECT в задании №1 до 4х записей и две новые строки вставьте в таблицу dbo.demoProduct используя только одно предложение INSERT.
Напишите предложение INSERT для вставки в таблицу dbo.demoSalesOrderHeader всех записей из таблицы Sales.SalesOrderHeader. Используемые поля: SalesOrderID, OrderDate, CustomerID, SubTotal, TaxAmt, Freight.
Напишите запрос используя предложение SELECT INTO для создания таблицы dbo.tempCustomerSales и запишите в нее информацию о количестве сделанных клиентом заказов, посчитайте сумму этих заказов. Результирующая таблица должна содержать поля: CustomerID, CountOfOrders, TotalDue.

Слайд 104

Задания (INSERT) [2/2]

Напишите запрос который вставит в таблицу dbo.demoProduct не достающие записи из

таблицы Production.Product. Ключ для проверки поле ProductID.

Слайд 105

Задания (DELETE) [1/1]

Напишите запрос который удалит из таблицы dbo.demoCustomer все записи у которых

LastName начинается с буквы S.
Удалите из таблицы dbo.demoCustomer удалите тех клиентов, у которых не было заказов либо сумма всех заказов (TotalDue) из таблицы dbo.demoSalesOrderHeader была меньше 1000$.
Удалите записи из таблицы dbo.demoProduct все записи о продуктах которые никогда не заказывались, для проверки используйте таблицу dbo.demoSalesOrderDetail.

Слайд 106

Задания (UPDATE) [1/1]

Для всех записей в таблице dbo.demoAddress, у которых AddressLine2 имеет неопределенно

значение установите значение «N/A».
Обновите цену ListPrice в таблице dbo.demoProduct увеличив ее на коэфициент 1,1.
Обновите записи в таблице dbo.demoSalesOrderDetail установив значение UnitPrice равную ListPrice связанных продуктов из таблицы demoProduct.
Измените данные в таблице dbo.demoSalesOrderHeader установив значение поля SubTotal равное сумме LineTotal соответствующего заказа из таблицы dbo.demoSalesOrderDetail.
Имя файла: Основы-Transact-SQL.pptx
Количество просмотров: 130
Количество скачиваний: 0