SQL означает Структурированный Язык Запросов (Structured Query Language). Это — язык, который дает возможность создавать и работать в реляционных базах данных, которые являются наборами связанной информации, сохраняемой в таблицах.
SQL предназначен для работы только с реляционными БД. С помощью этого языка можно создавать структуру БД, создавать реляционные таблицы, заполнять данными таблицы, манипулировать данными, извлекать информацию из БД, создавать представления, защищать БД от несанкционированного доступа, представлять права и полномочия, администрировать БД и т. д. Все это делается с помощью команд SQL. Наиболее часто используемой командой SQL яв-ся запрос.
Запрос – это команда, которая формируется для СУБД и требует представить определенную информацию. Вообще говоря, такие запросы называются запросами на извлечение информации. Но существуют запросы на создание таблицы, на создание структуры БД, на удаление таблицы и т.д.
Запросы на выборку из базы данных строятся с помощью единственного оператора Select. В этом операторе, кроме того, могут присутствовать при необходимости уточняющие предложения: Where, Group by, Having, Order by. Но использование уточняющего предложения From обязательно.
Для построения SQL- запросов, рассмотрим базу данных, которая моделирует сдачу сессии в некотором учебном заведении. Пусть она состоит из 3 отношений R1, R2, R3 соответственно.
R1 (ФИО, Дисциплина, Оценка); R2 (ФИО, Группа); R3 (Группа, Дисциплина).
ФИО | Дисциплина | Оценка |
Гаджиев | МАП | |
Грушев | МАП | |
Грушев | БД | |
Иванов | ИПС | |
Иванов | БД | |
Ивлев | МАП | |
Ивлев | ОС | |
Петров | ИПС | |
Петров | МАП | |
Петров | БД |
R1: R2: R3
ФИО | Группа |
Гаджиев | |
Грушев | |
Иванов | |
Ивлев | |
Петров |
Группа | Дисциплина |
БД | |
ИПС | |
МАП | |
МАП | |
ИПС | |
БД | |
ОС | |
БД | |
МАП | |
МАП |
Приведем несколько примеров оператора Select.
· Вывести список всех групп (без повторений), где должны пройти экзамены:
Select Distinct Группа
From R3;
· Вывести список студентов, которые сдали экзамен по дисциплине “БД” на “отлично”
Select ФИО
From R1
Where Дисциплина=”БД” and Оценка=5
· Вывести список студентов, которые обучаются не в группах 3941 и 3931
SELECT ФИО
FROM R2
WHERE Группа Not In (3941,3931);
· Вывести список всех студентов, которым надо сдавать экзамены с указанием названий дисциплин, по которым должны проводиться эти экзамены
Select R2.ФИО, R3.Дисциплина
From R2, R3
Where R2.Группа=R2.Группа;
· Список студентов, имеющих несколько двоек
Select distinct a.ФИО
From R1 as a, R1 as b
Where (a.ФИО=b. ФИО) and (a.Дисциплина<>b.Дисциплина) and (a.Оценка=2) and
(b.Оценка=2);
Контрольные упражнения
Написать запросы к вышеприведенной базе данных:
- Вывести список всех дисциплин (без повторений), по которым проводятся экзамены
- Вывести список студентов, которые имеют оценку “3” по ОС.
- Вывести список студентов, которые не сдавали дисциплину по ИПС
Функции агрегирования в SQL- запросах
В SQL добавлены дополнительные функции, которые позволяют вычислять обобщенные групповые значения. Для применения агрегатных функций предполагается предварительная операция группировки. В чем состоит суть операции группировки? При группировке все множество кортежей отношения разбивается на группы, в которых собираются кортежи, имеющие одинаковые значения атрибутов, которые заданы в списке группировки. Например, если сгруппировать отношение R1 по значению столбца Дисциплина, то получим 4 группы, для которых можем вычислить некоторые групповые значения, например количество кортежей в группе, максимальное или минимальное значение столбца Оценка.
Это делается с помощью агрегатных функций.
Вычислим количество студентов, сдавших экзамены по каждой дисциплине:
Select Дисциплина, count (Дисциплина)
From R1
Group by Дисциплина;
Можно применять агрегатные функции также и без операции предварительной группировки, вэтом случае все отношение рассматривается как одна группа и для этой группы можно вычислить одно значение на группу. Например, найдем количество успешно сданных экзаменов:
SELECT count(*)
FROM R1
WHERE Оценка<>2;
Контрольные упражнения
Написать запросы к вышеприведенной базе данных:
- Найти максимальный бал, полученный студентом Ивлевым.
- Количество студентов, сдавшие дисциплину “БД”
- Вывести средний бал оценок, полученный каждым студентом