Материал: Письменные лекции по дисциплине «Базы данных»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Пример — студент 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>