Базы данных: SQL

Содержание

Введение
Дополнительные знания
Условие (WHERE)
SELECT
Упорядочивание
JOIN
COUNT
UPDATE
INSERT
DELETE
Управление объектами БД

Введение

Многолетние рассуждения на эту тему начинались с того, что её знание как для рядовых, так и для продвинутых пользователей — пустая трата времени на их получение. Все подобные вопросы с учетом их сложности должны реализовываться программно, а не за счет погружения в синтаксис тысячесимвольных команд.

Тенденции развития ПО в последнее десятилетие XX века позволяли надеяться на то, что будут реализованы программные интерфейсы, в достаточно дружелюбном варианте. По крайней мере для людей с нормальным интел­лектом.

Но этого не произошло. Разбирать причины нет ни желания, ни времени. Поэтому ограничимся констатацией факта: развитие происходит по синусоиде, постепенно опускающейся вниз. То есть без знания основ SQL становится невоз­можным использование встроенных во многие программы (модули) обращений к базам данных, а, значит, ограни­чивается их потенциал. Иногда настолько, что теряется больше половины смысла. Также, информация будет полезна любым начинающим программистам БД.

Принципиально важными являются три момента.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Итак, SQL — аббревиатура от англ. Structured Query Language (язык структурированных запросов). Как уже понятно из контекста, запросы осуществляются к базам данных, точнее — к их таблицам. Соответственно, по умолчанию данный язык распространяется на реляционные базы данных, пусть это и не совсем так.

Стандарт SQL не открыт для свободного доступа и распространяется ISO: ISO/IEC 9075(1-4, 9-11, 13, 14, 15):2016/2019 (последняя действующая версия) по 178 швейцарских франков за том (~193$). К большому сожалению, у нас в стране действует достаточно архаическая версия ГОСТ Р ИСО/МЭК 9075-93 (Аутентичный текст с ISO/IEC 9075:1989).

....

Принципиально можно говорить о том, что весь SQL для пользователя сводится всего к четырем командам (операторам в терминологии ГОСТ). Большинство остальных действий совершается посредством интерфейсов, то есть незаметно для пользователя.

  1. SELECT — выбор строк (записей) из таблицы. Эта команда является абсолютно необходимой и самой важной!
  2. UPDATE — изменение данных в имеющиихся записях.
  3. INSERT — добавление (вставка) записей в таблицу.
  4. DELETE — удаление записей.
  5. Дополнительно следует выделить управление объектами БД.

Дополнительные знания

К бочке меда с небольшим набором команд надо добавить еще одну — с дёгтем.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Условие (WHERE)

Начнем с базового вопроса. Большинство случаев выполнения команд поиска и обновления определяется с учетом соответствия строк таблицы какому-либо требованию. Обновить нужно данные в конкретной строке или нескольких, относимых к группе по признаку. Удалить — аналогично. Выборка записей — и подавно. Отобрать всё подряд из базы с 10 млрд записей немного накладно.

Во всех СУБД для этой цели служит ключевое слово WHERE (спецификатор выборки)

Общий синтаксис

команда... [WHERE <условие поиска>]

Как видно, выражение является необязательным, но среды, ориентированные на работу с большими таблицами, навязывают его использование через интерфейс, например, WHERE 1 (для phpMyAdmin, управляющую MySQL), означающее «всё подряд» (1=True), но заставляющее и задуматься.

В простейшем виде, условием поиска будет имя поля, сопоставляемое оператором отношения с выражением:

WHERE Field1 = "Москва"
WHERE Field1 != "Москва"
WHERE Field1 > "Москва"
WHERE Field2 <= 2020

В самом примитивном (но, по-видимому, и самом частом) виде, условием поиска будет соответствие ключевого поля значению, что позволяет однозначно идентифицировать конкретную запись:

WHERE KeyField = 100

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

WHERE Field1 = "Москва" AND Field2 <= 2020
WHERE (Field1 = "Москва" OR Field1 = "Уфа") AND Field2 <= 2020

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


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

SELECT

Со всех точек зрения эту команду следует считать единственной нужной для всех категорий пользователей. Только её полный синтаксис занимает половину страницы текста, а ограничение на количество символов в ней измеряется десятками тысяч.

Общий синтаксис (упрощен для типичного прикладного случая):

SELECT <что> FROM <откуда> [WHERE <условие>] [ORDER BY <порядок>] [<куда>]

<что> определяет перечень полей таблицы БД, которые должны быть выбраны в результате.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


<откуда> заменяется именем таблицы, из которой выбираются данные и располагается после ключевого слова FROM (спецификатор отображения).

<условие> обсуждено выше.

ORDER BY указывает на сортировку результата по параметру <порядок>, который может быть полем, их совокупностью или результатом работы функции(й).

<куда> опционно указывает направление вывода. По умолчанию, таковым является курсор (временная таблица в памяти), к которому можно обратиться для последующего вывода или обработки.

<>


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

Упорядочивание

Если из базы выбирается несколько записей, предполагаемых для показа человеку, то вполне естественным будет, если они расставлены по порядку.

Каким будет условие, в данном случае неважно, сортируется итоговый результат. Принципиально, что для этого используется ключевое слово ORDER BY.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

UNION

Оператор, который можно рассматривать как «присоединение снизу», то есть добавление строк. Позволяет объединить две или более таблиц (частей) с идентичной структурой.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

JOIN

В отличие от сравнительно редко нужного UNION, данный оператор предназначен для «присоединения сбоку», то есть для обратной сборки реляционных таблиц БД в простую таблицу.

Таблиц может быть много (для каждой дополнительной нужен ещё один оператор JOIN), но начнем рассмотрение со слияния двух таблиц: tabl1 и tabl2. Попутно подчеркну, что речь пойдет исключительно про команду SELECT.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

COUNT

Очень нужная и важная процедура, реализуемая принципиально по разному, далеко не всегда разумно. Надеюсь понятно, что речь идет о подсчете числа записей.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

UPDATE


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

INSERT

Общий синтаксис

INSERT INTO <куда> [[<поле1>, [<поле2>...]] [VALUES (<значение1>, [<значение2>...])]

Добавить (вставить) можно пустую запись, а можно сразу присвоить значения полям: всем или избранным.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


....

DELETE

Общий синтаксис

DELETE FROM <откуда> [WHERE <условие>]

....

Управление объектами БД

В первую очередь речь идет о командах:

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

Если угодно, то их можно сравнить с плотницким топором: отрубить что-нибудь — раз плюнуть. Поэтому ограничимся тем, что назовем несколько функций.

Во-первых, те, которые в интерфейсах обычно все же есть.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Дополнительные источники

При обращении к литературе настоятельно советую внимательно следить за применимостью текстов к конкретной СУБД. В противном случае можно получить неработающие варианты. Или, что намного страшнее — дающие некорректный результат, обнаружение чего может быть крайне сложным.

  1. Онлайн-справочник по языку запросов SQL

Copyright © 1993–2021 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.