Очень часто возникает ситуация, когда выборку данных надо производить из отношения, которое является результатом слияния (join) двух других отношений. Например, нам нужно получить из базы данных students информацию о всех студентах в виде следующей таблицы:
ФИО
Группа
Год рождения
Для этого СУБД предварительно должна выполнить слияние таблиц students и groups, а только затем произвести выборку из полученного отношения.
Для выполнения операции такого рода в операторе SELECT после ключевого слова FROM указывается список таблиц, по которым производится поиск данных. После ключевого слова WHERE указывается условие, по которому производится слияние. Для того, чтобы выполнить данный запрос, нужно дать команду:
А вот пример, где одновременно задаются условия и слияния, и выборки (результат предыдущего запроса ограничивается студентами, рожденными до 1982 года):
Следует обратить внимание на то, что когда в разных таблицах присутствуют одноименные поля, то для устранения неоднозначности перед именем поля указывается имя таблицы и знак «.» (точка). (Хорошее правило: имя таблицы указывать всегда!)
Естественно, имеется возможность производить слияние и более чем двух таблиц. Например, чтобы дополнить описанную выше выборку городом, где живут студенты, необходимо составить оператор следующего вида:
SELECT students.FIO, students.God_rogdenia, groups.Group_name, student_adres.gorod FROM students, groups, student_adres
WHERE (students.id_group = groups. id_group)
AND (students. God_rogdenia <= 1982)
AND (student_adres.id = students.id);
SQL позволяет выполнять различные арифметические операции над столбцами результирующего отношения. В конструкции <список_выбора> можно использовать константы, функции и их комбинации с арифметическими операциями и скобками. Например, чтобы узнать возраст студентов можно выполнить команду:
SELECT FIO, 2003 - God_rogdenia FROM students;
В арифметических выражения допускаются операции сложения (+), вычитания (-), деления (/), умножения (*), а также различные функции (COS, SIN, ABS - абсолютное значение и т.д.). Также в запрос можно добавить строковую константу:
SELECT ‘Студент ’, FIO, ‘, возраст ’, 2003 - God_rogdenia FROM students;
В SQL также определены так называемые агрегатные функции, которые совершают действия над совокупностью одинаковых полей в группе записей. Среди них:
§ AVG(<имя поля>) - среднее по всем значениям данного поля
§ COUNT(<имя поля>) или COUNT (*) - число записей
§ MAX(<имя поля>) - максимальное из всех значений данного поля
§ MIN(<имя поля>) - минимальное из всех значений данного поля
§ SUM(<имя поля>) - сумма всех значений данного поля
Следует учитывать, что каждая агрегирующая функция возвращает единственное значение. Примеры: определить самого старшего студента
SELECT FIO, MIN(God_rogdenia) FROM students;
подсчитать количество студентов:
SELECT COUNT(*) FROM students;
Область действия данных функции можно ограничить с помощью логического условия. Например, количество студентов, рожденных в 1981 году:
SELECT COUNT(*) FROM students WHERE God_rogdenia=1981;