Мы узнаем, что большинство языков классифицируются как «отношения на основе» или «высокий уровень».
Эти понятия ортогональны. «На основе отношений» означает, что семантика языка основана на концепции отношения, то есть связи многих ко многим между двумя наборами (отношения являются математической основой таблиц SQL). «Высокий уровень» означает, что язык содержит множество абстракций, которые скрывают большую часть технических деталей (таких как области памяти, регистры ЦП, доступ к диску, побитовые операции и т. Д.). SQL, безусловно, основан на отношениях, поскольку его основная цель - описать реляционные данные и операции над ними. SQL также довольно высокого уровня; он не предоставляет никаких средств для непосредственного доступа к байту на диске и не сообщает никаких подробностей о том, как он хранит свои данные (по крайней мере, стандартный SQL этого не делает;
На самом деле существует гораздо больше осей, по которым можно классифицировать языки программирования (и данных); особенно интересным является декларативный против императив . Декларативные языки описывают то , что что - то есть ; императивные языки описывают, как сделать что-то. DDL часть SQL в основном декларативный, несмотря на настоятельные перспективных ключевых слов (» CREATE TABLE
», „ DROP DATABASE
“ и т.д.), и даже манипулирования данными часть ( SELECT
, UPDATE
, INSERT
, DELETE
) все еще довольно декларативным. Очень интересное свойство SQL состоит в том, что он не является полным по Тьюрингу: вы не можете написать неограниченный цикл в простом стандартном ANSI SQL.
Функциональное программирование сосредоточено вокруг нескольких основных идей:
- функции являются гражданами первого класса (то есть их можно использовать как значения, как входные данные для других функций и как выходные данные для других функций)
- функции высшего порядка (функции, которые работают с функциями, или функции, которые возвращают функции)
- чистота (чистая функция - это та, которая не имеет побочных эффектов; чистая функция не может выполнять какие-либо операции ввода-вывода, она не может читать или изменять любое глобальное состояние и не может принимать неконстантные ссылочные аргументы. Чистые функции особенно интересны, потому что они будут всегда выдают одинаковый результат при одинаковых входах)
SQL, конечно, не вращается вокруг функций как основного инструмента для моделирования вещей, но он в некоторой степени охватывает идею чистоты - один и тот же запрос, выполняемый в одной и той же базе данных, каждый раз будет давать один и тот же результат (кроме порядка). Называть SQL «функциональным» языком немного сложнее, хотя IMO.