Слайд 2
Темы занятия
Нормализация
Добавление строк в таблицу
Выборка информации – простейшие
варианты
Фильтрация
Сортировка
Уникальность строк и ограничение длины выборки
Слайд 3
Нормализация
Нормализация – процесс преобразования таблиц базы данных в
одну из нормальных форм.
Нормальная форма – набор требований к
таблице, характеризующих таблицу с точки зрения избыточности.
Короче: нормализация – изменение структуры БД для устранения избыточности данных.
Слайд 4
Первая нормальная форма (1NF)
Таблица находится в первой нормальной
форме, если каждое её поле атомарно: значения в поле
не может быть разделено на фрагменты, имеющие самостоятельный смысл.
Слайд 5
Первая нормальная форма (1NF)
Что не так с этой
таблицей?
Непорядок с колонкой Phones – не ясно, сколько там
телефонов, и каким должен быть размер колонки.
Слайд 6
Первая нормальная форма (1NF)
Приведём таблицу к первой нормальной
форме.
Слайд 7
Вторая нормальная форма (2NF)
Таблица находится во второй нормальной
форме, если она находится в 1NF и любая не
ключевая колонка зависит от всего первичного ключа, а не от части ключа.
Хорошая новость: если первичный ключ атомарный и таблица в 1NF, то такая таблица уже находится в 2NF.
Слайд 8
Вторая нормальная форма (2NF)
Первичным ключом таблицы является пара
колонок (Module,Lecture). Но значения ModuleName зависят только от значений
Module.
Слайд 9
Вторая нормальная форма (2NF)
Приведём таблицу ко второй нормальной
форме, выделив значения ModuleName в отдельную таблицу.
Слайд 10
Третья нормальная форма (3NF)
Таблица находится в третьей нормальной
форме, если она находится в 2NF и любая не
ключевая колонка зависит от первичного ключа и только от первичного ключа.
Слайд 11
Третья нормальная форма (3NF)
Первичный ключ – колонка ID.
Значения в колонке Position зависят только от колонки PositionCode.
Слайд 12
Третья нормальная форма (3NF)
Приведём таблицу к третьей нормальной
форме, выделив Position в отдельную таблицу.
Слайд 13
Денормализация
Денормализация – намеренное приведение структуры базы в состояние,
не соответствующее критериям нормализации.
Зачем денормализовать? Минимум две причины:
Повышение производительности
запросов
Сохранение исторических данных
Слайд 14
Таблица Persons
В дальнейших примерах презентации будет использоваться таблица
Persons (данные сотрудников):
Слайд 15
Добавление строк в таблицу
Добавление строк выполняется при помощи
инструкции INSERT. Указывается имя таблицы. В простейшем варианте в
скобках задаётся значения всех полей добавляемой строки через запятую:
INSERT INTO Persons
VALUES (10, 'Alex', 'Volosevich', 'TC');
*) для IDENTITY-колонки значение не указывается.
Слайд 16
Добавление строк в таблицу
Простейший вариант INSERT обладает недостатками:
порядок значений в скобках должен соответствовать порядку колонок таблицы;
не ясно, как (не)вставлять значения для колонок с DEFAULT и NULL.
Слайд 17
Добавление строк в таблицу
При использовании INSERT можно после
имени таблицы перечислить в скобках колонки, значения для которых
указываются в списке VALUES:
INSERT INTO Persons(ID, Department, FirstName)
VALUES (11, 'TC', 'Alex');
Слайд 18
Добавление множества строк
T-SQL позволяет при помощи одной инструкции
INSERT добавить в таблицу несколько строк:
INSERT INTO Persons(ID, FirstName,
LastName, Department)
VALUES (1, 'Anna', 'Klimenok', 'QA'),
(2, 'Olga', 'Chekan', 'QA'),
(3, 'Olga', 'Naumik', 'QA'),
(4, 'Alexey', NULL, 'TC'),
(5, 'Oleg', NULL, 'TC'),
(6, 'Sergey', 'Pavlov', 'DV');
Слайд 19
Выборка информации
Инструкция SELECT возвращает набор данных (выборку), удовлетворяющих
заданным условиям.
В простейшем варианте SELECT извлекает информацию из всех
колонок и всех строк одной указанной таблицы:
SELECT * FROM Persons
Слайд 20
Указание колонок таблицы
Вместо * можно перечислить через запятую
колонки таблицы, из которых будет формироваться выборка (это называется
проекция). Колонки можно указывать в любом порядке или даже повторять:
SELECT FirstName, ID, ID FROM Persons
Слайд 21
Псевдонимы колонок
При выборке для колонки можно указать псевдоним,
и данные попадут в выборку под указанным именем:
SELECT ID,
FirstName AS Name FROM Persons
В T-SQL при задании псевдонимов можно не писать AS (просто пробел поставить) или вместо AS ставить = (в этом случае псевдоним пишем слева):
SELECT ID, Name = FirstName FROM Persons
Слайд 22
Псевдоним таблицы
Если выборка производится из нескольких таблиц, у
которых есть колонки с одинаковыми именами, то на колонку
нужно ссылаться так:
имя_таблицы.имя_колонки
Для удобства можно использовать псевдоним таблицы:
SELECT P.ID FROM Persons AS P
Слайд 23
Операции с данными при выборке
При выборке можно осуществить
операции с данными:
SELECT ID * 10, FirstName,
GETDATE(), 5 FROM Persons
Слайд 24
Что же делает SELECT?
SELECT, по сути, выполняет преобразование
данных. Мы указываем, как получить одну строку выборки, а
SELECT повторяет наши указания для всех строк.
SELECT X=A, B, Y=C+D, Z=10 FROM Tbl
X = A
B = B
Y = C+D
Z = 10
Слайд 25
Фильтрация
Данные в источнике для выборки можно отфильтровать при
помощи предложения WHERE, которое записывается после SELECT-части и содержит
условие-фильтр (это условие называется предикатом):
SELECT FirstName, LastName FROM Persons
WHERE Department = 'QA'
Слайд 26
Построение предиката
При построении предиката используются операции сравнения, логические
операции AND, OR, NOT, операции IN (NOT IN) и
BETWEEN (NOT BETWEEN):
SELECT FirstName, LastName FROM Persons
WHERE (Department <> 'QA' AND ID >= 5);
SELECT FirstName, LastName FROM Persons
WHERE ID IN (1, 3, 5);
SELECT FirstName, LastName FROM Persons
WHERE ID BETWEEN 2 AND 4;
Слайд 27
Сравнение с NULL
Чтобы сравнить значение с NULL, используются
операции IS NULL и IS NOT NULL:
SELECT FirstName, LastName
FROM Persons
WHERE LastName IS NULL
SELECT FirstName, LastName FROM Persons
WHERE LastName IS NOT NULL
Слайд 28
Сравнение строк с шаблоном
Используя оператор LIKE, строки можно
сравнивать с шаблоном. В шаблоне _ означает один произвольный
символ, а % – набор любых символов:
SELECT FirstName, LastName FROM Persons
WHERE FirstName LIKE 'Ol%' -- Oleg, Olga
SELECT FirstName, LastName FROM Persons
WHERE FirstName LIKE 'Ol_a' -- Olga
Слайд 29
Сортировка
Строки в выборке можно отсортировать, используя предложение ORDER
BY:
SELECT FirstName, LastName FROM Persons
WHERE Department = 'QA'
ORDER BY
LastName
Слайд 30
Сортировка
После ORDER BY указывает колонка или выражение, по
которому производится сортировка. Колонку можно указать с помощью имени
или псевдонима. И эта колонка не обязана быть упомянута в SELECT.
Можно указать несколько колонок. Тогда выборка сортируется по первой колонке, затем упорядоченный набор сортируется по второй колонке и так далее.
Слайд 31
Сортировка по нескольким колонкам
Сортируем данные из Persons по
имени, а при совпадении имён – по фамилии:
SELECT FirstName,
LastName FROM Persons
ORDER BY FirstName, LastName
Слайд 32
Сортировка
После имени колонки можно задать направление сортировки: ASC
– по возрастанию значений (это работает по умолчанию), или
DESC – по убыванию:
SELECT FirstName, LastName FROM Persons
ORDER BY FirstName DESC, LastName ASC
Слайд 33
Требование уникальности
Указание DISTINCT сразу после ключевого слова SELECT
приводит к удалению повторяющихся строк из выборки:
SELECT DISTINCT FirstName
FROM Persons
Слайд 34
Ограничение длины выборки
Количество строк выборки можно ограничить, указав
предложение TOP:
SELECT TOP 2 ID, FirstName FROM Persons
T-SQL позволяет
задать в TOP процент от общего числа строк выборки:
SELECT TOP 25 PERCENT ID, FirstName FROM Persons
Слайд 35
Ограничение длины выборки
В T-SQL есть опция WITH TIES
– не разрывать набор по отсортированным значениям. Её можно
применять только вместе с ORDER BY:
SELECT TOP 2 WITH TIES Department FROM Persons
ORDER BY Department