Introduction to databases and SQL. Нормализация. Добавление строк в таблицу. Выборка информации. Фильтрация. (Лекция 4)

Содержание

Слайд 2

Темы занятия Нормализация Добавление строк в таблицу Выборка информации – простейшие

Темы занятия

Нормализация
Добавление строк в таблицу
Выборка информации – простейшие варианты
Фильтрация
Сортировка
Уникальность строк и

ограничение длины выборки
Слайд 3

Нормализация Нормализация – процесс преобразования таблиц базы данных в одну из

Нормализация

Нормализация – процесс преобразования таблиц базы данных в одну из нормальных

форм.
Нормальная форма – набор требований к таблице, характеризующих таблицу с точки зрения избыточности.
Короче: нормализация – изменение структуры БД для устранения избыточности данных.
Слайд 4

Первая нормальная форма (1NF) Таблица находится в первой нормальной форме, если

Первая нормальная форма (1NF)

Таблица находится в первой нормальной форме, если каждое

её поле атомарно: значения в поле не может быть разделено на фрагменты, имеющие самостоятельный смысл.
Слайд 5

Первая нормальная форма (1NF) Что не так с этой таблицей? Непорядок

Первая нормальная форма (1NF)

Что не так с этой таблицей?
Непорядок с колонкой

Phones – не ясно, сколько там телефонов, и каким должен быть размер колонки.
Слайд 6

Первая нормальная форма (1NF) Приведём таблицу к первой нормальной форме.

Первая нормальная форма (1NF)

Приведём таблицу к первой нормальной форме.

Слайд 7

Вторая нормальная форма (2NF) Таблица находится во второй нормальной форме, если

Вторая нормальная форма (2NF)

Таблица находится во второй нормальной форме, если она

находится в 1NF и любая не ключевая колонка зависит от всего первичного ключа, а не от части ключа.
Хорошая новость: если первичный ключ атомарный и таблица в 1NF, то такая таблица уже находится в 2NF.
Слайд 8

Вторая нормальная форма (2NF) Первичным ключом таблицы является пара колонок (Module,Lecture).

Вторая нормальная форма (2NF)

Первичным ключом таблицы является пара колонок (Module,Lecture). Но

значения ModuleName зависят только от значений Module.
Слайд 9

Вторая нормальная форма (2NF) Приведём таблицу ко второй нормальной форме, выделив значения ModuleName в отдельную таблицу.

Вторая нормальная форма (2NF)

Приведём таблицу ко второй нормальной форме, выделив значения

ModuleName в отдельную таблицу.
Слайд 10

Третья нормальная форма (3NF) Таблица находится в третьей нормальной форме, если

Третья нормальная форма (3NF)

Таблица находится в третьей нормальной форме, если она

находится в 2NF и любая не ключевая колонка зависит от первичного ключа и только от первичного ключа.
Слайд 11

Третья нормальная форма (3NF) Первичный ключ – колонка ID. Значения в

Третья нормальная форма (3NF)

Первичный ключ – колонка ID. Значения в колонке

Position зависят только от колонки PositionCode.
Слайд 12

Третья нормальная форма (3NF) Приведём таблицу к третьей нормальной форме, выделив Position в отдельную таблицу.

Третья нормальная форма (3NF)

Приведём таблицу к третьей нормальной форме, выделив Position

в отдельную таблицу.
Слайд 13

Денормализация Денормализация – намеренное приведение структуры базы в состояние, не соответствующее

Денормализация

Денормализация – намеренное приведение структуры базы в состояние, не соответствующее критериям

нормализации.
Зачем денормализовать? Минимум две причины:
Повышение производительности запросов
Сохранение исторических данных
Слайд 14

Таблица Persons В дальнейших примерах презентации будет использоваться таблица Persons (данные сотрудников):

Таблица Persons

В дальнейших примерах презентации будет использоваться таблица Persons (данные сотрудников):

Слайд 15

Добавление строк в таблицу Добавление строк выполняется при помощи инструкции INSERT.

Добавление строк в таблицу

Добавление строк выполняется при помощи инструкции INSERT. Указывается

имя таблицы. В простейшем варианте в скобках задаётся значения всех полей добавляемой строки через запятую:
INSERT INTO Persons
VALUES (10, 'Alex', 'Volosevich', 'TC');
*) для IDENTITY-колонки значение не указывается.
Слайд 16

Добавление строк в таблицу Простейший вариант INSERT обладает недостатками: порядок значений

Добавление строк в таблицу

Простейший вариант INSERT обладает недостатками:
порядок значений в

скобках должен соответствовать порядку колонок таблицы;
не ясно, как (не)вставлять значения для колонок с DEFAULT и NULL.
Слайд 17

Добавление строк в таблицу При использовании INSERT можно после имени таблицы

Добавление строк в таблицу

При использовании INSERT можно после имени таблицы перечислить

в скобках колонки, значения для которых указываются в списке VALUES:
INSERT INTO Persons(ID, Department, FirstName)
VALUES (11, 'TC', 'Alex');
Слайд 18

Добавление множества строк T-SQL позволяет при помощи одной инструкции INSERT добавить

Добавление множества строк

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 извлекает информацию из всех колонок и всех строк одной указанной таблицы:
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, по сути, выполняет преобразование данных. Мы указываем,

как получить одну строку выборки, а 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,

Построение предиката

При построении предиката используются операции сравнения, логические операции 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

Чтобы сравнить значение с 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, строки можно сравнивать с

Сравнение строк с шаблоном

Используя оператор 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

Сортировка

Строки в выборке можно отсортировать, используя предложение ORDER BY:
SELECT FirstName, LastName

FROM Persons
WHERE Department = 'QA'
ORDER BY LastName
Слайд 30

Сортировка После ORDER BY указывает колонка или выражение, по которому производится

Сортировка

После ORDER BY указывает колонка или выражение, по которому производится сортировка.

Колонку можно указать с помощью имени или псевдонима. И эта колонка не обязана быть упомянута в SELECT.
Можно указать несколько колонок. Тогда выборка сортируется по первой колонке, затем упорядоченный набор сортируется по второй колонке и так далее.
Слайд 31

Сортировка по нескольким колонкам Сортируем данные из Persons по имени, а

Сортировка по нескольким колонкам

Сортируем данные из Persons по имени, а при

совпадении имён – по фамилии:
SELECT FirstName, LastName FROM Persons
ORDER BY FirstName, LastName
Слайд 32

Сортировка После имени колонки можно задать направление сортировки: ASC – по

Сортировка

После имени колонки можно задать направление сортировки: ASC – по возрастанию

значений (это работает по умолчанию), или DESC – по убыванию:
SELECT FirstName, LastName FROM Persons
ORDER BY FirstName DESC, LastName ASC
Слайд 33

Требование уникальности Указание DISTINCT сразу после ключевого слова SELECT приводит к

Требование уникальности

Указание DISTINCT сразу после ключевого слова SELECT приводит к удалению

повторяющихся строк из выборки:
SELECT DISTINCT FirstName FROM Persons
Слайд 34

Ограничение длины выборки Количество строк выборки можно ограничить, указав предложение TOP:

Ограничение длины выборки

Количество строк выборки можно ограничить, указав предложение TOP:
SELECT TOP

2 ID, FirstName FROM Persons
T-SQL позволяет задать в TOP процент от общего числа строк выборки:
SELECT TOP 25 PERCENT ID, FirstName FROM Persons
Слайд 35

Ограничение длины выборки В T-SQL есть опция WITH TIES – не

Ограничение длины выборки

В T-SQL есть опция WITH TIES – не разрывать

набор по отсортированным значениям. Её можно применять только вместе с ORDER BY:
SELECT TOP 2 WITH TIES Department FROM Persons
ORDER BY Department