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

Возможности языка запросов




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

Рассмотрим сначала задачи по выбору данных из одной таблицы [1]:

· включить в результат поле (или несколько полей), значение которого вычисляется для каждой записи. Пусть, например, в исходной таблице Товары есть поля Наименование (текстовое), Цена (числовое) и Количество (числовое). Тогда результатом выполнения следующего выражения будет таблица, содержащая также поле Стоимость:

SELECT Наименование, Цена, Количество, Цена * Количество AS Стоимость FROM Товары

· сортировать результат по какому-либо (каким-либо) из полей. Для этого используется служебное слово ORDER BY. Пусть, например, в таблице Студенты имеются текстовые поля Фамилия, Имя, Отчество, Пол, Группа и числовые поля Курс и ГодРождения. Результатом выполнения следующего выражения будет список всех студентов по порядку групп, а внутри каждой группы по алфавиту:

SELECT Фамилия, Имя, Отчество, ГодРождения, Пол, Курс, Группа FROM Студенты ORDER BY Группа, Фамилия, Имя, Отчество

Результатом выполнения следующего выражения будет список всех студентов, отсортированных по годам рождения в порядке убывания года (то есть от самых младших до самых старших), а внутри каждого года – по алфавиту:

SELECT Фамилия, Имя, Отчество, ГодРождения, Пол, Курс, Группа FROM Студенты ORDER BY ГодРождения DESC, Фамилия, Имя, Отчество

Служебное слово DESC означает сортировку по убыванию. Для сортировки по возрастанию используется служебное слово ASC. Если ни одно из служебных слов не указано, подразумевается сортировка по возрастанию.

· получить вместо выборки данных некоторые итоговые результаты. Для этого используются, так называемые, агрегатные функции: COUNT (общее число записей), SUM (сумма значений поля), MAX (максимальное значение поля), MIN (минимальное значение поля), AVG (среднее значение поля). Перечисленные итоги можно получить для всей таблицы сразу, например, общее число студентов в таблице Студенты:

SELECT COUNT(*) AS ЧислоСтудентов FROM Студенты

или максимальное и минимальное значения года рождения:

SELECT MAX(ГодРождения) AS MaxГод, MIN(ГодРождения) AS MinГод FROM Студенты

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

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

SELECT Курс, COUNT(Курс) AS ЧислоСтудентов FROM Студенты GROUP BY Курс

Результатом выполнения данного выражения будет таблица, содержащая 2 поля – Курс и ЧислоСтудентов. Число записей в этой таблице будет равно числу различных курсов.

Аналогично можно определить максимальное и минимальное значения года рождения студентов на каждом курсе:

SELECT Курс, MAX(ГодРождения) AS MaxГод, MIN(ГодРождения) AS MinГод FROM Студенты GROUP BY Курс

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

SELECT Группа, COUNT(Группа) AS ЧислоСтудентов FROM Студенты GROUP BY Группа HAVING COUNT(Группа) > 25

Использование HAVING не исключает наложения простых условий с помощью служебного слова WHERE (в условии после WHERE нельзя использовать агрегатные функции.). Например, считать можно только мальчиков или только девочек:

SELECT Группа, COUNT(Группа) AS ЧислоСтудентов FROM Студенты WHERE Пол = “М” GROUP BY Группа HAVING COUNT(Группа) > 25

Теперь рассмотрим задачи по выбору данных из двух и более таблиц.

Мы уже рассмотрели эквисоединение (конструкция INNER JOIN … ON). Такой запрос в комбинации с проекцией и/или селекцией встречается наиболее часто.

Конструкция INNER JOIN … ON объединяет все записи таблиц, в которых значение объединяющего поля совпадает. В языке SQL есть две других разновидности этой конструкции – LEFT JOIN … ON и RIGHT JOIN … ON, которые называют левым и правым внешними соединениями.

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

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


[1] Все рассмотренные в этом разделе возможности сохраняются и при выборе данных из нескольких таблиц.

Поделиться:





Читайте также:





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



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