Теоретические азы БД (введение в SQL)

 

Начинать изучать SQL лучше всего с азов реляционных баз данных. Я дам пояснение что такое реляционная база данных, что такое отношение и какие операции над ними можно производить.

 

ordinateur_off

 

Начнем с верхушки, далее походу действия будем разматывать клубок, погружаясь глубже и глубже, пока не дойдем до основания. Я думаю, это будет более демонстративно и понятнее, чем сухой текст.

 

Поехали …

 

Что такое SQL?

SQL (Structured Query Language) – структурированный язык запросов, универсальный компьютерный язык, применяемый для создания, модификации и управление данными в реляционных базах данных

 

Что такое реляционная база данных?

Это совокупность взаимосвязанных данных хранящихся в виде отношений

 

Что такое отношения?

Отношение это некое множество картежей

 

Что такое кортеж?

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

 

Продемонстрирую кортеж из двух элементов с помощью графа:

relation_graph

Вершины графа это элементы их некоторого множества, в данном случае, это элемент а1 из множества А и элемент b1 из множества B. Ребро между вершинами обозначает связь между элементами или как говорят элемент а1 находится в отношение с b1.

 

Продемонстрирую этот же кортеж с помощью таблицы:

 

relation_table

 

Номер 1 у а1 и b1, был выбран произвольно.

 

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

 

Как я сказал, отношение это множество кортежей, причем ограниченное (если отойти от теории). Представить отношения можно в виде матрицы, графа, таблицы.

 

Продемонстрирую, как представить отношение в виде графа:

relation_graph

На графике видно, что есть несколько кортежей, причем какой кортеж первый, а какой второй и третий не важно, это просто множество кортежей. В множестве нет такого понятия «первый», «второй» и «третий», это всё сразу и очередность не важна.

 

Продемонстрирую, как представить отношение в виде таблицы:

 

relation_table

 

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

 

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

 

Как было сказано в самом начале, что реляционная база данных это совокупность взаимосвязанных данных хранящихся в виде отношений. Если представлять отношения в виде таблиц, то реляционная БД это некий набор взаимосвязанных таблиц. Выходит SQL это язык создания, модификации и управление таблицами в реляционной БД.

 

Итак, с логической цепочкой мы разобрались: SQL, реляционная БД, отношения, кортеж..Теперь мы затронем язык SQL, т.е. тему манипулирования с отношениями, важно разобраться какие операции мы можем проводить над отношениями.

 

Все операции продемонстрировать не возможно, в связи с их большим количеством, приведу только базовые:

 

 

1.  Селекция (другие имена операции — выборка, ограничение)

 

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

 

Пусть есть отношение, назовем его «исходная таблица №1»:

 

relation_table

 

Результат «выборки» из исходной таблицу №1, при условии что А=а3

 

relation_1_result

 

На языке SQL:

синтаксис — SELECT * FROM имя_таблицы WHERE имя_столбца=значение

реализация для данного случая — SELECT * FROM исходная_таблица WHERE А=a3

 

 

2. Проекция

 

Операция «проекция» выполняется над одним отношением, в результате неё формируется новое отношение с указанными столбцами таблицы.

 

Например, есть отношение, назовем ее «исходная таблица №2»:

 

relation_2

 

Произведем над данным отношением операцию «проекция» по атрибутам А и С, результат:

 

relation_2_result

 

В результате мы получили два одинаковых картежа, в отношение такого быть не может, поэтому сократим их (в СУБД сокращения происходят автоматически):

 

relation_2_result_finish

 

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

 

На языке SQL:

синтаксис — SELECT список_столбцов FROM имя_таблицы

реализация для данного случая — SELECT А,С FROM исходная_таблица_№2

 

 

3.  Естественное соединение

 

Операция «естественное соединение» выполняется над двумя логическими связанными отношениями, в результате неё формируется новое отношение со столбцами первого и второго отношения и с кортежами, которые получаются в результате соединения каждого кортежа первого и второго отношения. На примере должно быть более понятно, пусть есть два отношения, назовем их исходная таблица №3.1 и исходная таблица №3.2:

 

Исходная таблица №3_1

Исходная таблица №3_2

relation_3

 

Проведем операцию «соединения» первого и второго отношения, результат:

 

relation_3_finish

 

Интересно заметить, что мы получили исходное отношение из раздела «2. Проекция», последовательность столбцов в отношение значения не имеет.

 

На языке SQL:

реализация для данного случая — SELECT исходная_таблица_№3_1.*, исходная таблица №3_2.В FROM исходная_таблица_№3_1, исходная таблица №3_2 WHERE исходная таблица №3_1.A= исходная таблица №3_2.A

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

 

 

4. Объединение

 

Операция «объединение» выполняется над двумя отношениями имеющих одинаковый набор столбцов и тип данных в этих столбцах, результат операции новое отношение, которое включает в себя все кортежи «первого» и «второго» отношения (повторяющиеся сокращаются).

 

Пример, пусть есть два отношения:

 

Исходная таблица №4_1

Исходная таблица №4_2

relation_4

 

Произведем операцию «объединения» отношения №4.1 и отношения №4.2 , результат:

 

relation_4_finish

 

 На языке SQL:

синтаксис — SELECT список_столбцов_таблицы1 FROM таблица1 UNION SELECT список_столбцов_таблицы2 FROM таблица2

реализация для данного случая — SELECT А,В FROM исходная_таблица_№4_1 UNION SELECT А,В FROM исходная_таблица_№4_2

 

 

5. Пересечение

 

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

 

Пример, пусть есть два отношения:

 

Исходная таблица №5_1

Исходная таблица №5_2

relation_5

 

Произведем операцию «пересечения» с данными отношениями, результат:

 

relation_5_finish

 

Т.е. в результирующее отношение, попали повторяющиеся кортежи из «первого» и «второго» отношения.

 

На языке SQL:

синтаксис — SELECT одна_из_таблиц.столбец1, одна_из_таблиц.столбец2, … FROM таблица1,таблица2 WHERE таблица1.столбец1=таблица2.столбец1 AND таблица1.столбец2= таблица2.столбец2 AND …

реализация для данного случая –

SELECT исходная_таблица_№5_1.А, исходная_таблица_№5_1.В FROM исходная_таблица_№5_1, исходная_таблица_№5_2 WHERE исходная_таблица_№5_1.А = исходная_таблица_№5_2.А AND исходная_таблица_№5_1.В = исходная_таблица_№5_2.В

 

 

6. Вычитание (разность)

 

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

 

Пример, пусть есть два отношения:

 

Исходная таблица №6_1

Исходная таблица №6_2

 

relation_6

 

Произведем операцию «разность», т.е. от исходной таблицы №6_1 отнимем исходную таблицу №6_2, результат:

 

relation_6_finish

 

Т.е. результирующее отношение, это «первое» отношение без повторяющихся кортежей  «второго» отношения.

 

На языке SQL:

реализация для данного случая – SELECT исходная_таблица_№6_1.А, исходная_таблица_№6_1.В FROM исходная_таблица_№6_1 WHERE NOT EXISTS (SELECT исходная_таблица_№6_2.А, исходная_таблица_№6_2.В FROM исходная_таблица_№6_2
WHERE исходная_таблица_№6_2.А= исходная_таблица_№6_1.А AND исходная_таблица_№6_2.В= исходная_таблица_№6_1.В)

 

 

7. Декартово произведение

 

Декартово произведение выполняется над двумя произвольными отношениями, результат операции новое отношение с количество столбцов равному сумме количества столбцов «первого» и «второго» отношения, а количество строк равному произведение количеству строк «первого» и «второго» отношения. Кортежи результирующего отношение, если говорить по-простому, получаются путем комбинации каждого кортежа «первого» отношения с кортежами «второго» отношения.

 

Пример, пусть есть два произвольных отношения:

 

Исходная таблица №7_1

Исходная таблица №7_2

 

relation_7

 

Произведем «декартово произведение» данных двух отношений, результат:

 

relation_7_finish

 

На языке SQL:

реализация для данного случая – SELECT исходная_таблица_№7_1.А, исходная_таблица_№7_1.В, исходная_таблица_№7_2.А, исходная_таблица_№7_2.В FROM исходная_таблица_№7_1, исходная_таблица_№7_2

Мы разобрались с основными операции над отношениями и напоследок теоретической части поста разберемся что такое ключ.

 

 

Что такое ключ?

 

Ключ – это один или не сколько столбцов таблицы, которые однозначно определяют запись (строку). Пример, пусть есть отношение представленное в виде таблицы:

 

example_key

 

Ключом данного отношения может быть столбец А. Т.к. значения только данного столбца  однозначно определяет запись в отношение, например: а3 определяет запись «а3 b1 d3», a2 определят запись «a2 b2 d3», a1 определяет запись «a1 b2 d1». Другие столбцы данную функцию нести не могут.

 

Если ключ состоит из одного столбца, то его называют простым, если из нескольких его называют составным. В данной таблице, помимо простого ключа, есть еще один – составной, состоящий из столбцов B и D. Значения этих столбцов однозначной определят запись (строки), пример: b1 и d3 однозначно определяет запись «a3 b1 d3», b2 и d3 однозначной определяет запись «a2 b2 d3», b2 и d1 однозначно определяет запись «a1 b2 d1».

 

На практике обычно выбирают один ключ, причем самый простой, в данном случае это столбец А. Такой ключ также называют «первичный ключ».




Буду признателен если вы поделитесь данным постом

Комментарии
  1. Константин пишет:

    Спасибо за статью, очень полезная!



Ваш комментарий


Ответ в цифрах

 
© s-engineer.ru, 2012-2017 | Все права защищены