Базы данных

Запросы на выборку и модификацию данных

Нужно понимать, что все SQL запросы делятся на четыре группы:

  1. Инструкции или операторы для определения данных(Data Definition Language, DDL).
  2. Для манипуляции данными(Data Manipulation Language, DML).
  3. Для определения параметров доступа к данным(Data Control Language, DCL).
  4. Для управления транзакциями(Transaction Control Language, TCL).

Определение данных подразумевает создание, редактирование и удаление различных объектов базы данных, таких как таблицы (tables), табличные представления (views), синонимы (synonyms), хранимые процедуры, профили пользователя и т.п. Определение параметров доступа к данным – это процесс награждения или лишения объектов базы данных различного рода разрешениями, привилегиями и полномочиями, например, предоставление конкретному пользователю базы данных (имеется в виду объект типа user/schema, который определяет права доступа к разделам базы данных в распределенных СУБД, например, в Oracle) возможности осуществлять запросы к конкретной таблице. Управление транзакциями, в самом простом варианте, сводится к возможности сохранить текущие изменения, накопившиеся в результате выполнения последовательности запросов манипуляции данными или целиком их все отменить.

Чаще всего, под SQL запросами понимается именно группа операторов манипуляции данными. Каждая отдельно взятая СУБД поддерживает ту или иную группу SQL запросов в разной мере/объеме, но, наибольшим образом, все они пересекаются именно в реализации операций манипуляции данными. По этой причине будет рассматриваться только эта группа команд: выбор, обновление, добавление и удаление записей из таблиц.

Все запросы на получение практически любых данных из одной или нескольких таблиц выполняются с помощью единственного предложения SELECT.

В синтаксических конструкциях для обращения к БД используются следующие обозначения:

  • звездочка (*) для обозначения «все» употребляется в обычном для программирования смысле, т.е. «все случаи, удовлетворяющие определению»;
  • квадратные скобки ([]) означают, что конструкции, заключенные в эти скобки, являются необязательными (т.е. могут быть опущены);
  • фигурные скобки ({}) означают, что конструкции, заключенные в эти скобки, должны рассматриваться как целые синтаксические единицы, т.е. они позволяют уточнить порядок разбора синтаксических конструкций, заменяя обычные скобки, используемые в синтаксисе SQL;
  • многоточие (…) указывает на то, что непосредственно предшествующая ему синтаксическая единица факультативно может повторяться один или более раз;
  • прямая черта (|) означает наличие выбора из двух или более возможностей. Например, обозначение ASC|DESC указывает, можно выбрать один из терминов ASC или DESC; когда же один из элементов выбора заключен в квадратные скобки, то это означает, что он выбирается по умолчанию (так, [ASC]|DESC означает, что отсутствие всей этой конструкции будет восприниматься как выбор ASC);
  • точка с запятой (;) — завершающий элемент предложений SQL;
  • запятая (,) используется для разделения элементов списков;
  • пробелы ( ) могут вводиться для повышения наглядности между любыми синтаксическими конструкциями предложений SQL;
  • жирные прописные латинские буквы и символы используются для написания конструкций языка SQL и должны (если это специально не оговорено) записываться в точности так, как показано;
  • строчные буквы используются для написания конструкций, которые должны заменяться конкретными значениями, выбранными пользователем, причем, для определенности отдельные слова этих конструкций связываются между собой символом подчеркивания (_);
  • термины «таблица» и «столбец» заменяют (с целью сокращения текста синтаксических конструкций) термины «имя_таблицы», «имя_столбца», …, соответственно;
  • термин «таблица» — используется для обобщения таких видов таблиц, как базовая_таблица, представление или псевдоним; здесь псевдоним служит для временного (на момент выполнения запроса) переименования и (или) создания рабочей копии базовой_таблицы (представления).

Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Простейший оператор SELECT выглядит так: SELECT * FROM PC. Он осуществляет выборку всех записей из объекта БД табличного типа с именем PC. При этом, столбцы и строки результирующего набора не упорядочены. Чтобы упорядочить поля результирующего набора, их следует перечислить через запятую в нужном порядке после слова SELECT:

SELECT price, speed, hd, ram, cd, model, code

FROM PC.

В таблице 1 приводится результат выполнения этого запроса.

Таблица 1. – Запрос SELECT

Вертикальную проекцию таблицы РC можно получить, если перечислить только необходимые поля. Например, чтобы получить информацию только о скорости процессора и объеме оперативной памяти компьютеров, следует выполнить запрос:

SELECT speed, ram FROM PC;

который вернет следующие данные (Таблица 2.):

Таблица 2. – Запрос SELECT speed.

Следует отметить, что вертикальная выборка может содержать дубликаты строк в том случае, если она не содержит потенциального ключа, однозначно определяющего запись. В таблице PC потенциальным ключом является поле code, которое выбрано в качестве первичного ключа таблицы. Поскольку это поле отсутствует в запросе, в приведенном выше результирующем наборе имеются дубликаты строк (например, строки 1 и 3). Если требуется получить уникальные строки (скажем, нас интересуют только различные комбинации скорости процессора и объема памяти, а не характеристики всех имеющихся компьютеров), то можно использовать ключевое слово DISTINCT:

SELECT DISTINCT speed, ram FROM PC;

что даст такой результат (Таблица 3.):

Таблица 3. – 1-й результат запроса SELECT DISTINCT speed.

Помимо DISTINCT, может применяться также ключевое слово ALL (все строки), которое принимается по умолчанию. Чтобы упорядочить строки результирующего набора, можно выполнить сортировку по любому количеству полей, указанных в предложении SELECT. Для этого используется предложение ORDER BY, являющееся всегда последним предложением в операторе SELECT. При этом, в списке полей могут указываться как имена полей, так и их порядковые позиции в списке предложения SELECT. Так, если требуется упорядочить результирующий набор по объему оперативной памяти в порядке убывания, можно записать:

SELECT DISTINCT speed, ram

FROM PC

ORDER BY ram DESC

Или

SELECT DISTINCT speed, ram

FROM PC

ORDER BY 2 DESC

Результат, приведенный ниже, будет одним и тем же.

Таблица 4. – 2-й результат запроса SELECT DISTINCT speed.

Сортировку можно проводить по возрастанию (параметр ASC принимается по умолчанию) или по убыванию (параметр DESC). Сортировка по двум полям:

SELECT DISTINCT speed, ram

FROM PC

ORDER BY ram DESC, speed DESC

даст следующий результат (Таблица 5.):

Таблица 5. – 3-й результат запроса SELECT DISTINCT speed.

Горизонтальную выборку реализует предложение WHERE , которое записывается после предложения FROM. При этом, в результирующий набор попадут только те строки из источника записей, для каждой из которых значение предиката равно TRUE. То есть предикат проверяется для каждой записи.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments