Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Выдать список всех студентов, фамилии которых начинаются с буквы А.




В этом случае удобно использовать оператор LIKE.

Оператор LIKE применим исключительно к символьным полям и позволяет устанавливать, соответствует ли значение поля образцу. Образец может содержать специальные символы:

_ (символ подчеркивания) – замещает любой одиночный символ;

% (знак процента) – замещает последовательность любого числа символов.

 

SELECT id_st, surname

FROM student

WHERE surname LIKE 'А%'

 

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

MIN – минимальное значение в столбце;

MAX – максимальное значение в столбце;

SUM – сумма значений в столбце;

AVG – среднее значение в столбце;

COUNT – количество значений в столбце, отличных от NULL.

 

Следующий запрос считает среднее среди всех баллов, полученных студентами на экзаменах.

SELECT AVG(mark)

FROM mark_st

 

Естественно, можно использовать агрегатные функции совместно с предложением WHERE:

SELECT AVG(mark)

FROM mark_st

WHERE id_st = 100

Данный запрос вычислит средний балл студента с кодом 100 по результатам всех сданных им экзаменов.

SELECT AVG(mark)

FROM mark_st

WHERE id_ex = 10

Данный запрос вычислит средний балл студентов по результатам сдачи экзамена с кодом 10.

 

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

SELECT id_st, AVG(mark)

FROM mark_st

GROUP BY id_st

 

Все это, как обычно, может быть совмещено с предложением WHERE. При этом, не вдаваясь в тонкости выполнения запроса внутри СУБД, можно считать, что сначала выполняется выборка тех строк таблицы, которые удовлетворяют условиям из предложения WHERE, а потом производится группировка и агрегирование.

Приведем запрос, который вычисляет средний балл по оценкам, полученным на экзамене с кодом 100, для каждого студента.

SELECT id_st, AVG(mark)

FROM mark_st

WHERE id_ex = 100

GROUP BY id_st

 

Заметим, что группировка может производиться более чем по одному полю.

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

 

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

SELECT 'Средний балл=’, AVG(mark)

FROM mark_st

WHERE id_ex = 10

 

В результате данного запроса пользователь увидит не просто некоторое число, а число, сопровожденное поясняющим текстом.

 

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

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

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

Еще раз вернемся к примеру из лекции 8. Рассмотрим соответствующую 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 с операциями реляционной алгебры и теории множеств.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...