[МУЗЫКА] [МУЗЫКА] [МУЗЫКА] Мы рассмотрели с вами создание процедур, сейчас поговорим о функциях. В любой СУБД есть огромное количество встроенных функций, которые можно использовать при написании запросов. Какие это функции? В первую очередь, это функции по работе со строками, которые могут, например, вычислять длину строки, преобразовывать их к верхнему или нижнему регистру или выделять какую-то подпоследовательность из заданной строки. Кроме того, в любую СУБД встроены числовые функции, например, математические функции: синусы, косинусы, возведение в степень и так далее. Также нам могут понадобиться функции даты и времени. Они могут вычислять разницу между двумя диапазонами дат, учитывая и високосные года, и разную длительность месяцев, могут вычленять из даты и времени какую-то определенную компоненту, например: день, месяц, минуту. Также нам обязательно понадобятся функции приведения типов этой функции, CAST и CONVERT, которые могут преобразовывать данные из одного типа к другому. В СУБД также хранятся другие виды функций, например, системные функции. Как вызвать встроенную функцию? Функцию можно вызвать либо от какой-то константы, от значения переменной или от столбца таблицы. На экране вы видите пример вычисления синуса от константы, функция вызывается после слова SELECT. Вы указываете название функции и в круглых скобках указываете параметры, если у функции таковые есть. Если нам недостаточно встроенной функции, то мы можем создавать свои, реализующие логику бизнес-приложения. Создание функций очень похоже на создание процедуры. Они также создаются при помощи команды CREATE, только мы пишем не слово «процедура», а слово «функция», после этого описываем тело функции. Какие будут отличия между функциями и процедурами? Во-первых, функция возвращает результат в отличие от процедуры, и этот результат должен быть обязательно определен сразу после объявления имени функции. Кроме того, функции в отличие от процедур не могут вносить изменения в таблицы базы данных. То есть они могут считывать значения из каких-то таблиц, но не могут выполнять операции вставки, изменения и удаления по отношению к данным. Параметры функций могут быть только входными. В определении функций должен быть обязательно оператор RETURN, который специфицирует значения, которые функция будет возвращать. Давайте рассмотрим пример. Создадим функцию, которая будет определять номер мобильного телефона студента по номеру его зачетки. Мы создаем функцию, даем ей название, вводим входной параметр — идентификатор студента, определяем, что функция будет возвращать нам строковые значения, определяем внутри функции переменные, обращаемся к таблице телефонов, находим нужный телефон и возвращаем его в качестве результата функции. Пример создания такой функции мы видим сейчас на экране. Рассмотрим вызов функции. После оператора SELECT мы вызываем имя функции, в скобках указываем параметр — идентификатор студента, чей мобильный телефон мы хотим определить. Результат вы видите на экране. Мы можем выполнять не только одиночные вызовы функции, но и использовать функции в контексте запроса. В таком случае мы перед именем столбца таблицы можем использовать имя функции. Тогда имя столбца таблицы заключается в круглые скобки. Рассмотрим пример вызова функции в контексте запроса, когда функция обрабатывает поля таблицы, выдаваемые в результате выборки. Приведем еще один пример функции. Создадим функцию, которая вычисляет средний балл студента. Определяем функцию, у которой параметром будет являться идентификатор студента, возвращать она будет вещественное число. Мы обращаемся к таблице экзаменационных ведомостей, находим все оценки студента, вычисляем средний балл и возвращаем это число в качестве результата функции. Пример создания такой функции в контексте MySQL мы видим на экране. Приведем еще один пример использования функции в контексте запроса: выведем всех студентов и их средние баллы. Для этого мы пишем запрос, обращаясь к таблице STUDENT, и выводим идентификатор студента, имя студента и обрабатываем идентификатор студента функцией, которая вычисляет средний балл, обращаясь внутри себя к другой таблице. На этом мы закончим рассмотрение функций. [БЕЗ_ЗВУКА]