Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 04.06.2009 | Доступ: свободный | Студентов: 15901 / 4924 | Оценка: 4.34 / 4.09 | Длительность: 14:55:00
Лекция 12:

Основные операторы языка SQL. Интерактивный SQL

< Лекция 11 || Лекция 12: 123 || Лекция 13 >

12.4. Использование SQL для выбора информации из нескольких таблиц

До сих пор мы рассматривали выбор информации из единственной таблицы. Можно запрашивать информацию из нескольких таблиц, реализуя описанные в соответствующем разделе учебника реляционные операции. Стоит упомянуть, что полное рассмотрение темы выходит за рамки данного учебника. Подробно этот вопрос можно изучить при помощи, например, [ [ 3.1 ] , [ 11.2 ] ]. Рассмотрим некоторые примеры того, как это делается.

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

Еще раз вернемся к примеру из "Физические модели данных (внутренний уровень)" . Рассмотрим соответствующую ER-диаграмму ( рис. 12.2.).

Пример связанных таблиц

Рис. 12.2. Пример связанных таблиц

В этом примере тоже присутствуют связанные таблицы. Рассмотрим таблицы student, mark_st и exam_st.

Таблица mark_st связана с таблицей exam_st по полю id_ex.

Таблица mark_st связана с таблицей student по полю id_st.

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

SELECT student.surname, mark_st.id_ex, mark_st.mark
FROM student, mark_st
WHERE  student.id_st = mark_st.id_st

Отметим следующие изменения по сравнению с запросами к одной таблице.

  1. В секции FROM указаны две таблицы.
  2. Так как таблиц стало больше одной, появилась некоторая неоднозначность при упоминании полей. Так, во многих случаях неизвестно, из какой таблицы из списка FROM брать поле. Для устранения неоднозначности имена полей указываются с префиксом – именем таблицы. Имя таблицы от имени поля отделяется точкой.
  3. В предложении WHERE указано условие соединения таблиц.

Нетрудно заметить, что использование префиксов-имен таблиц сильно загромождает запрос. Для того чтобы избежать подобного загромождения, используются псевдонимы. Так, можно переписать предыдущий запрос следующим образом:

SELECT E.surname, M.id_ex, M.mark
FROM student E, mark_st M
WHERE E.id_st = M. id_st

12.5. Использование SQL для вставки, редактирования и удаления данных в таблицах

Для добавления данных в таблицу в стандарте SQL предусмотрена команда INSERT. Рассмотрим ряд примеров запросов.

INSERT INTO mark_st
VALUES (1, 2, 5)

Данный запрос вставляет в таблицу mark_st строку, содержащую значения, перечисленные в списке VALUES. Если не нужно указывать значение какого-то поля, можно присвоить ему NULL:

INSERT INTO mark 
VALUES (1, 2, NULL)

В случае если необходимо использование для некоторых полей значений по умолчанию, SQL позволяет явно указать, какие поля необходимо заполнить конкретными данными, а какие – значениями по умолчанию:

INSERT INTO mark_st (id_st, id_ex)
VALUES (1, 2)

Для удаления данных из таблицы существует команда DELETE:

DELETE  
FROM student

Этот запрос удаляет все данные из таблицы student.

Можно ограничить диапазон удаляемой информации следующим образом:

DELETE  
FROM student
WHERE surname > 'И'

Для обновления данных используется команда UPDATE.

UPDATE 	mark_st 
SET mark = '5'
WHERE id_st = 100 AND id_ex = 10

При помощи этого запроса изменится на "5" оценка у студента с кодом 100 по экзамену с кодом 10.

12.5. Язык SQL и операции реляционной алгебры

Язык SQL является средством выражения мощного математического аппарата теории множеств и реляционной алгебры. В данном разделе рассматривается связь операторов языка SQL с операциями реляционной алгебры и теории множеств.

Операция объединения

Средствами языка SQL операция объединения представляется следующим образом:

SELECT *
FROM A
UNION
SELECT *
FROM B
Операция разности

Средствами языка SQL операция разности представляется следующим образом:

SELECT *
FROM A
EXCEPT
SELECT *
FROM B
Операция проекции
SELECT Fieldi1, ..., Fieldin
FROM A
Операция выборки (селекции)
SELECT *
FROM A
WHERE (<condition>)
Операция пересечения
SELECT *
FROM A
INTERSECT
SELECT *
FROM B
Операция соединения, эквисоединения
SELECT \ A.Field_{1}, \dots , A.Field_{n}, B.Field_{1}, \dots , B.Field_{m}
\\
FROM \ A, B
\\
WHERE (A.Field_{i} \ \Theta \  B.Field_{1})

Если \Theta – операция "=", то это эквисоединение.

Операция естественного соединения

Пусть есть отношения A(X1, ..., Xn, A1, ..., Am) и B(X1, ..., Xn, B1, ..., Br).

SELECT A.X1, ..., A.Xn, A.A1, ..., A.Am, B.B1, ..., B.Br
FROM A, B
WHERE (A.X1 = B.X1) AND ... AND (A.Xn = B.Xn)

Краткие итоги: В лекции дается общая характеристика операторов языка SQL, используемых, в частности, для работы с базой данных в интерактивном режиме (создание таблиц, выбор информации из таблиц, добавление, удаление и модификация элементов). Дается понятие интерактивного режима работы с SQL. Рассматриваются основные операторы SQL, используемые для манипулирования данными (выбор информации из таблиц, добавление, удаление и модификация элементов). Приводятся примеры записи запросов к базе данных на языке SQL с использованием операторов select, insert, update, delete. Рассматривается связь между операциями реляционной алгебры и операторами языка SQL.

Более подробно материалы лекции рассматриваются в [ [ 3.1 ] - [ 5.4 ] ].

< Лекция 11 || Лекция 12: 123 || Лекция 13 >
Александра Каева
Александра Каева
Карина Максутова
Карина Максутова