Введение
SQL-запрос, возвращающий результирующий набор строк из одной или нескольких таблиц. Оператор SQL SELECT возвращает результирующий набор строк из одной или нескольких таблиц базы данных или представлений базы данных. В большинстве приложений SELECT является наиболее часто используемой командой языка манипулирования данными (DML). Поскольку SQL является декларативным языком программирования, запросы SELECT задают результирующий набор, но не указывают, как его вычислить. База данных преобразует запрос в "план запроса", который может меняться в зависимости от выполнения, версии базы данных и программного обеспечения базы данных. Эта функциональность называется "оптимизатором запросов", поскольку он отвечает за поиск наилучшего возможного плана выполнения запроса в рамках действующих ограничений. Оператор SELECT имеет множество необязательных пунктов:
The SQL SELECT statement returns a result set of rows, from one or more tables. A SELECT statement retrieves zero or more rows from one or more database tables or database views. In most applications, SELECT is the most commonly used data manipulation language (DML) command. As SQL is a declarative programming language, SELECT queries specify a result set, but do not specify how to calculate it. The database translates the query into a "query plan" which may vary between executions, database versions and database software. This functionality is called the "query optimizer" as it is responsible for finding the best possible execution plan for the query, within applicable constraints. The SELECT statement has many optional clauses:
Список SELECT – это список столбцов или SQL-выражений, которые должны быть возвращены запросом. Это соответствует операции проекции в реляционной алгебре. Ключевое слово AS позволяет необязательно задать псевдоним для каждого столбца или выражения в списке SELECT. Это соответствует операции переименования в реляционной алгебре. FROM указывает, из какой таблицы извлекать данные. WHERE указывает, какие строки необходимо извлечь. Это соответствует операции выбора в реляционной алгебре. GROUP BY группирует строки, имеющие общие свойства, чтобы к каждой группе можно было применить агрегатную функцию. HAVING выбирает из групп, определенных предложением GROUP BY. ORDER BY указывает порядок сортировки возвращаемых строк.
Страничное оформление строк
Страничная навигация по записям — это метод, используемый для ограничения и отображения лишь части всех данных, полученных в результате запроса к базе данных. Вместо отображения сотен или тысяч записей одновременно, сервер запрашивает только одну страницу (ограниченное количество записей, например, только 10), а пользователь осуществляет навигацию, запрашивая следующую страницу, затем следующую и так далее. Это особенно полезно в веб-системах, где отсутствует постоянное соединение между клиентом и сервером, поэтому клиенту не требуется ждать загрузки и отображения всех записей с сервера.
Поддержка функций окна поставщиками СУБДР
Реализация оконных функций производителями реляционных баз данных и SQL-движков существенно различается. Большинство баз данных поддерживают хотя бы некоторые варианты оконных функций. Однако, при более детальном рассмотрении становится очевидным, что большинство поставщиков реализуют лишь часть стандарта. В качестве примера можно привести мощную конструкцию RANGE. Полную поддержку этой функции обеспечивают только Oracle, DB2, Spark/Hive и Google BigQuery. В последнее время поставщики добавляют в стандарт новые расширения, например, функции агрегации массивов. Они особенно полезны при выполнении SQL-запросов к распределённым файловым системам (Hadoop, Spark, Google BigQuery), где гарантии ко-локации данных слабее, чем в распределённых реляционных базах данных (MPP). Вместо равномерного распределения данных по всем узлам, SQL-движки, работающие с распределённой файловой системой, могут добиться ко-локации данных за счёт вложенности данных, тем самым избегая потенциально дорогостоящих соединений, требующих интенсивного обмена данными по сети. Ещё одной чрезвычайно мощной возможностью являются пользовательские агрегатные функции, которые можно использовать в оконных функциях.