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

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

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

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

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

  1. Изложение приводится не для конкретной СУБД или приложения, а с общетеоретической точки зрения.
  2. Дается основа, а не полный объем. Назначение — понять, как это работает для простейшего использования.
  3. Какого бы то ни было «разжевывания» теории строения БД здесь не будет. В случае непонимания сути или терминологии, следует обратиться к начальному материалу.

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

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

...

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

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

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

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

Для мало-мальски серьезной работы нужно еще знать язык (функции) конкретной СУБД. Плюс, потребуются знания для формирования интерфейса.

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

Условие

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

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

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

[WHERE <условие поиска>]

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

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

WHERE Field1 = "Москва"
WHERE Field1 != "Москва"
WHERE Field3 > "Москва"
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

UPDATE

INSERT

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

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

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

DELETE

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

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

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

CREATE ALTER DROP

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

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

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

Во-вторых, в большинстве своем, скрытые.


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