Все запросы на получение любого количества данных из одного или нескольких отношений, выполняются с помощью предложения SELECT. В общем случае результатом реализации предложения SELECT будет новое отношение. К этому новому отношению может быть снова применена команда SELECT, т.е. такие операции могут быть вложены друг в друга.
Простейший синтаксис SELECT-выражения:
SELECT [DISTINCT] <список атрибутов>
FROM <список таблиц>
[WHERE <условие отбора>]
[ORDER BY <список атрибутов>]
[GROUP BY <список атрибутов>]
[HAVING <условие отбора>]
[UNION предложение SELECT];
Ключевое слово SELECT сообщает БД, что данное предложение является запросом на извлечение информации. После ключевого слова SELECT через запятую указываются атрибуты, сведения которых запрашиваются.
После ключевого слова FROMчерез запятую указывается список таблиц, из которых извлекается информация.
Пример: список студентов.
SELECT Фамилия, Имя
FROM Студенты;
Для того чтобы указать все атрибуты отношения вместо их перечисления можно использовать символ *.
Пример: список городов, в которых проживают студенты.
SELECT Город
FROM Студенты;
Для исключения дублирования значений атрибута используется ключевое слово DISTINCT.
Пример:
SELECT DISTINCT Город
FROM Студенты;
Предложение WHERE позволяет указать условие (предикат), по которому отбираются строки, входящие в результирующее отношение. В этом предложении могут использоваться операции сравнения и логические операторы.
Пример: студенты «Иванов», учащихся на 3 курсе, получающие стипендию.
SELECT *
FROM Студенты
WHERE Фамилия=’Иванов’ AND Курс=3 AND Стипендия IS NOT NULL;
При задании логического условия предложения WHERE могут использоваться операторы:
- IN – оператор списка. Справа после него в круглых скобках через запятую указывается список значений на проверку значения поля проверяемых строк.
Пример: вывести список студентов, проживающих в Пуховичах, Барановичах и Осиповичах.
SELECT *
FROM Студенты
WHERE Город IN (‘Пуховичи’, ‘Барановичи’, ’Осиповичи’);
- BETWEEN – используется для проверки условия вхождения значения поля в заданный интервал. Граничные значения входят в интервал, с которым происходит сравнение.
Пример: выведем студентов, у которых средний бал в промежутке от 7 до 9.
SELECT Фамилия, Имя
FROM Студенты
WHERE Средний бал BETWEEN 7 AND 9;
- LIKE – применим только к символьным полям. Этот оператор просматривает строковое значение полей с целью определения, входит ли заданное в операторе LIKE строка в символьную строку значения проверяемого поля. Для выборки строковых значений по заданному образцу можно применять шаблон искомого образца подстроки:
1 – знак подчеркивания (_) – определяет наличие в указанном месте подстроки одного любого символа.
2 – знак процента (%) – определяет наличие в указанном месте подстроки любого число символов.
Пример: найти человека (забыли Иващенко или Еващенко)
SELECT Фамилия
FROM Студенты
WHERE Фамилия LIKE ‘_ващенко’;
- IS NULL– ну тут всё понятно.
Не смотря на то, что SQL работает с данными, в понятиях строк, столбцов и таблиц имеется возможность применения значений выражений, построенных с использованием встроенной функции, констант, имен столбцов, определяемых как своего рода виртуальные столбцы. Они помещаются в списки столбцов и могут сопровождаться псевдонимами. Если вместо спецификации SQL обнаруживает число, то она воспринимается как числовая константа.
Пример:
SELECT ‘Фамилия’, Surname, ’Имя’, Name, 100
FROM Student;
Агрегирующие функции – позволяют получать из таблицы сводную информацию из таблицы, выполняя операции над группой строк. Для задания в SELECT запросе агрегирующих операций используются следующие ключевые слова:
-COUNT – определяет количество строк или значений поля.
- SUM – вычисляет арифметическую функцию.
- AVG –среднее.
- MIN –минимальное.
- MAX –максимальное.
В SELECT запросе агрегирующие функции используются аналогично именам полей, при этом имена полей используются в качестве аргументов этих функций.
Пример: найти среднее значение оценок по всем записям таблицы экзаменационные оценки.
SELECT AVG (Оценка)
FROM Экзаменационные оценки;
Предложение GROUP BYпозволяет группировать записи в подмножества, определяемое значениями какого-либо поля, и применять агрегирующие функции уже не ко всем записям таблицы, а отдельно к каждой сформированной группе. В предложении также может участвовать несколько атрибутов, по которым осуществляется группировка, а также указывается порядок разбиения столбцов на группы. В предложении GROUP BY должны быть указаны все выбираемые столбцы, приведенные после ключевого слова SELECT, кроме столбцов, указанных в качестве аргумента в агрегирующей функции. При необходимости часть сформированных групп может быть исключена с помощью предложения HAVING.
Пример: найти максимальную оценку каждого студента.
SELECT ID_Студента, MAX (Оценка)
FROM Экзаменационные оценки
GROUP BY ID_Студента
Пример 2: посчитать максимальную оценку каждого студента по каждому предмету
SELECT ID_Студента, ID_Предмета, MAX (Оценка)
FROM Экзаменационные оценки
GROUP BY ID_Студента, ID_Предмета
Пример 3: посчитать максимальную оценку каждого студента по каждому предмету> 6
SELECT ID_Студента, ID_Предмета, MAX (Оценка)
FROM Экзаменационные оценки
GROUP BY ID_Студента, ID_Предмета
HAVING MAX (Оценка) > 6;
Упорядочение выходных данных осуществляется с помощью предложения ORDER BY, после которого указываются имена атрибутов, используемых для сортировки. Сортировка по возрастанию применяется по умолчанию. При необходимости сортировать атрибут по убыванию, после спецификации столбца указывается слово DESC. В случае сортировки групп полей, предложение ORDER BY помещается после GROUP BY. После названия атрибута можно писать его порядковый номер.
Пример: отсортировать названия предметов таблицы предметы по убыванию.
SELECT Название предмета
FROM Предметы
ORDER BY Название предмета DESC;
Язык SQL позволяет использовать один запрос внутри других запросов (т.е. вкладывать запросы друг в друга).
Пример: вывести информацию об оценках студента Петрова.
SELECT *
FROM Экзаменационные оценки
WHERE ID_Студента IN (SELECT ID_Студента
FROM Студенты
WHERE Фамилия=’Петров’);
Пример: вывести оценки студентов, проживающих в Минске
SELECT Оценка
FROM Экзаменационные оценки
WHERE ID_Студента IN (SELECT ID_Студент
FROM Студенты
WHERE Город=’Минск’);
Формирование связных подзапросов:
При использовании подзапросов во внутреннем запросе можно ссылаться на таблицу, имя которой указано в предложении FROM внешнего запроса. В этом случае такой связанный подзапрос выполняется по одному разу для каждой таблицы.
Пример: выдать сведения обо всех предметах обучения, по которым проводился экзамен 20 января 2012 года.
SELECT *
FROM Предметы AS A
WHERE #20/01/2012# IN (SELECT Дата
FROM Экзаменационные оценки AS B
WHERE A.ID_Предмета=B.ID_Предмета);
SELECT A.ID_Предмета, Название, Часы, Семестр
FROM Предметы AS A, Экзаменационные оценки AS B
WHERE A.ID_Предмета=B.ID_Предмета AND B.Дата = #20/01/2012#;
Связывать можно еще с помощью команды INNER JOIN
Пример:
SELECT Название, ID_Студента, Оценка
FROM Предметы INNER JOIN Экзаменационные оценки ON Предметы.ID_Предмета=Экзаменационные Оценки.ID_предмета
Пример 2: найти студентов, получивших стипендию больше средней на курсе.
SELECT Фамилия
FROM Студенты AS A
WHERE A.Стипендия> (SELECT AVG (Стипендия)
FROM Студенты AS B
WHERE A.Курс=B.Курс);
SELECT Фамилия
FROM Студенты A, (SELECT Курс, AVG (Стипендия) AS F