Пример — студент 1:1 сессия. Каждый студент имеет определенный набор экзаменационных оценок в сессию.
Отношение «один-ко-многим» (1:М) означает, что каждой записи в одной таблице соответствует одна или несколько записей в другой таблице.
Пример — стипендия 1:M сессия. Установленный размер стипендии по результатам сдачи сессии может повторяться многократно для различных студентов.
Отношение «многие-к-одному» (М:1) аналогично рассмотренному ранее типу «один-ко-многим». Тип отношения между объектами зависит от вашей точки зрения.
Отношение «многие-ко-многим» (N:М) возникает между двумя таблицами в тех случаях, когда каждая запись в одной таблице соответствует 0, 1, 2 и более записей в другой таблице и наоборот.
Пример — студент N:M преподаватель. Один студент обучается у многих преподавателей, один преподаватель обучает многих студентов.
В большинстве случаев любые две таблицы связаны отношением «один-ко-многим». Это означает, что любая запись в первой таблице может быть связана с несколькими записями во второй, однако любая запись второй таблицы связана только с одной записью в первой.
2.3. Ключ
Ключ СУБД — это атрибут или набор атрибутов, который помогает идентифицировать строку (кортеж) в отношении (таблице).
Первичный ключ может состоять из единственного поля таблицы, значения которого уникальны для каждой записи. Так, например, на предприятии не может быть двух работников с одинаковыми табельными номерами, поэтому в таблице, содержащей записи о работниках, табельный номер может быть первичным ключом. Такой первичный ключ называют простым ключом.
Если таблица не имеет единственного уникального поля, первичный ключ может быть составлен из нескольких полей, совокупность значений которых гарантирует уникальность. Так, имя, фамилия, отчество, номер паспорта, серия паспорта не могут быть первичными ключами по отдельности, так как могут оказаться одинаковыми у двух и более людей. Но не бывает двух личных документов одного типа с одинаковыми серией и номером. Поэтому в таблице, содержащей записи о людях, первичным ключом может быть набор полей, состоящий из типа личного документа, его серии и номера. Такой первичный ключ называют составным ключом.
Все остальные ключи отношения называются возможными ключами. Внешние ключи позволяют установить связи между таблицами.
Внешний ключ устанавливается для столбцов из зависимой, подчиненной таблицы, и указывает на один из столбцов из главной таблицы. Как правило, внешний ключ указывает на первичный ключ из связанной главной таблицы.
2.4. Пример выгрузки данных
USE university; // Используем указанную базу данных
SELECT name, … [либо *] FROM имя_табл // Выводим
указанные параметры с указанной таблицы (* - означает вывод всех полей таблицы)
WHERE условие name = 'Ivan' // Условие |
- вывод всех |
||
полей, где имя = Ivan |
|
|
|
ORDER BY имя_поля, // Упорядочить |
данные |
по имя_поля |
|
GROUP BY имя_поля // Группировать |
записи |
по имя_поля |
|
LIMIT 5 // Максимальное количество записей = 5 |
|||
GROUP BY можно использовать в операторе SELECT |
для сбора данных |
||
по нескольким записям и группировки результатов по одному или нескольким столбцам.
Подробнее про ORDER BY: https://oracleplsql.ru/order-by-sql.html Подробнее про GROUP BY: https://oracleplsql.ru/group-by-sql.html
2.5. Заполнение таблиц
INSERT INTO имя_таблицы (список_столбцов_для_вставки)
VALUES (список_вставляемых_значений)
Если таблицу заполнили неправильными данными: Очистить всю таблицу — TRUNCATE TABLE имя_таблицы.
Очистить (удалить) записи в таблице выборочно — DELETE FROM
имя_табл WHERE имя_поля = чему-то.
Редактирование строки:
UPDATE table
SET column1 = expression1,
column2 = expression2,
…
[WHERE conditions];
2.6. Реляционные операции 1. Выборка
SELECT <columns...> FROM <table> WHERE <condition>
Выбирает все наборы значений (по столбцам <columns...>) таблицы <table>, для которых выполняется условие <condition>.
Пример
Имя |
Возраст |
Вес |
|
|
|
Harry |
34 |
80 |
|
|
|
Sally |
28 |
64 |
|
|
|
George |
29 |
70 |
|
|
|
Helena |
54 |
54 |
|
|
|
Peter |
34 |
80 |
SELECT * FROM Персоны WHERE Возраст >= 34
Имя |
Возраст |
Вес |
|
|
|
Helena |
54 |
54 |
|
|
|
2. Проекция
SELECT DISTINCT <columns...> FROM <table>
Выбирает все наборы значений (по столбцам <columns...>) таблицы <table> и удаляет все кортежи-дубликаты по указанным столбцам
<columns...>.
Пример
Имя |
Возраст |
Вес |
|
|
|
Harry |
34 |
80 |
|
|
|
Sally |
28 |
64 |
|
|
|
George |
29 |
70 |
|
|
|
Helena |
54 |
54 |
|
|
|
Peter |
34 |
80 |
SELECT DISTINCT Возраст, Вес FROM Персоны
Возраст |
Вес |
|
|
28 |
64 |
|
|
29 |
70 |
|
|
54 |
54 |
|
|
34 |
80 |
3. Объединение
SELECT <columns...> FROM <table1>
UNION
SELECT <columns...> FROM <table2>
Выбирает все наборы значений (по столбцам <columns...>) таблицы <table1> и все наборы значений (по тем же столбцам <columns...>) таблицы <table2>, по итогу их объединяя.
Пример
Имя |
Возраст |
Вес |
|
|
|
Harry |
34 |
80 |
|
|
|
Sally |
28 |
64 |
|
|
|
George |
29 |
70 |
|
|
|
Helena |
54 |
54 |
|
|
|
Peter |
34 |
80 |
|
|
|
Имя |
Возраст |
Вес |
|
|
|
Daffy |
24 |
19 |
|
|
|
Donald |
25 |
23 |
|
|
|
Scrooge |
81 |
27 |
SELECT Имя, Возраст, Вес FROM Персоны
UNION
SELECT Имя, Возраст, Вес FROM Персонажи
Имя |
Возраст |
Вес |
|
|
|
Harry |
34 |
80 |
|
|
|
Sally |
28 |
64 |
|
|
|
George |
29 |
70 |
|
|
|
Helena |
54 |
54 |
|
|
|
Peter |
34 |
80 |
|
|
|
Daffy |
24 |
19 |
|
|
|
Donald |
25 |
23 |
|
|
|
Scrooge |
81 |
27 |
4. Пересечение
SELECT <columns...> FROM <table1>
INTERSECT
SELECT <columns...> FROM <table2>