Стандарт языка SQL был принят в 1992 году и используется до сих пор. Именно он и стал эталоном для многих систем управления базами данных. Конечно, некоторые производители используют свои интерпретации стандарта. Но в любой системе все же имеются главные составляющие — операторы SQL.
Введение
С помощью операторов SQL в базах данных происходит управление значениями, таблицами и получение их для дальнейшего анализа и отображения. Они представляют собой набор ключевых слов, по которым система понимает, что делать с данными.
Определяют несколько категорий операторов SQL:
- определение объектов базы данных;
- манипулирование значениями;
- защита и управление;
- параметры сеанса;
- информация о базе;
- статический SQL;
- динамический SQL.
Операторы SQL для манипулирования данными
К этой категории относятся ключевые слова, с помощью которых можно управлять размещением значений в базе.
INSERT. Вставляет строки в существующую таблицу. Может использоваться как для одного значения, так и нескольких, определённых по некоему условию. Например:
INSERT INTO
имя таблицы (имя столбца 1, имя столбца 2)
VALUES (значение 1, значение 2).
Для использования оператора SQL запроса INSERT при нескольких значениях, применяется такой синтаксис:
INSERT INTO
имя таблицы 1 (имя столбца 1, имя столбца 2)
SELECT имя столбца 1, имя столбца 2
FROM имя таблицы 2
WHERE имя таблицы 2.имя столбца 1>2
Этот запрос выберет все данные из таблицы 2, которые больше 2 по столбцу 1 и вставит их в первую.
UPDATE. Как видно из названия, этот оператор SQL запроса обновляет данные в существующей таблице по определённому признаку.
Пример:
UPDATE имя таблицы 1
SET имя столбца 2 = «Василий»
WHERE имя таблицы 1.имя столбца 1 = 1
Данная конструкция заполнит значением Василий все строки, в которых встретит цифру 1 в первом столбце.
DELETE. Удаляет данные из таблицы. Можно указать какое-либо условие или же убрать все строки.
DELETE FROM имя таблицы
WHERE имя таблицы.имя столбца 1 = 1
Приведённый запрос удалит из базы все данные со значением один в первом столбце. А вот так можно очистить всю таблицу:
DELETE FROM имя таблицы.
Далее стоит рассказать об операторе SELECT. Он является одним из самых важных, поэтому ему придётся посвятить отдельную главу.
Оператор SELECT
Главное назначение SELECT — выборка данных по определенным условиям. Результатом его работы всегда является новая таблица с отобранными данными. Оператор MS SQL SELECT может быть использован в массе различных запросов. Поэтому наряду с ним можно рассмотреть и другие смежные ключевые слова.
Для выбора всех данных из определённой таблицы используется знак «*».
SELECT *
FROM имя таблицы 1
Результатом работы данного запроса будет точная копия таблицы 1.
А здесь происходит выборка по условию WHERE, которое достаёт из таблицы 1 все значения, больше 2 в столбце 1.
SELECT *
FROM имя таблицы 1
WHERE имя таблицы 1.имя столбца 1 > 2
Также можно указать в выборке, что нужны только определённые столбцы.
SELECT имя таблицы 1.имя столбца 1
FROM имя таблицы 1
Результатом данного запроса будут все строки, со значениями из столбца 1. С помощью операторов MS SQL можно составить собственную таблицу, на ходу заменив, вычислив и подставив определённые значения.
SELECT
имя таблицы 1.имя столбца 1
имя таблицы 1.имя столбца 2
имя таблицы 1.имя столбца 3
«=» AS EQ
имя таблицы 1.имя столбца 2 * имя таблицы 1.имя столбца 3 AS SUMMA
FROM имя таблицы 1
Данный, на первый взгляд сложный запрос выполняет выборку всех значений из таблицы 1, затем создаёт новые колонки EQ и SUMMA. В первую заносит знак «+», во вторую произведение данных из столбца 2 и 3. Полученный результат можно представить в виде таблицы, для понимания как это работает:
Столбец 1 | Столбец 2 | Столбец 3 | EQ | SUMMA |
Имя товара 1 | 10 | 50 | + | 500 |
Имя товара 2 | 15 | 100 | + | 1500 |
При использовании оператора SELECT, можно сразу провести упорядочивание данных по какому-либо признаку. Для этого используется слово ORDER BY.
SELECT
имя таблицы 1.имя столбца 1
имя таблицы 1.имя столбца 2
имя таблицы 1.имя столбца 3
FROM имя таблицы 1
ORDER BY имя столбца 2
Результирующая таблица будет выглядеть таким образом:
Столбец 1 | Столбец 2 | Столбец 3 |
1 | 1 | 54 |
3 | 2 | 12 |
7 | 3 | 100 |
2 | 5 | 1 |
То есть все строки были установлены в таком порядке, чтобы в столбце 2 значения шли по возрастанию.
Данные можно получать и из нескольких таблиц. Для наглядности сначала нужно представить, что их в базе имеется две, примерно такие:
Таблица «Сотрудники»
Номер | Имя | Фамилия |
1 | Вася | Васин |
2 | Петя | Петин |
Таблица «Зарплата»
Номер | Ставка | Начислено |
1 | 1 | 10000 |
2 | 0,5 | 3500 |
Теперь нужно, как-то связав эти две таблицы получить общие значения. Используя основные операторы SQL сделать это можно так:
SELECT
Сотрудники.Номер
Сотрудники.Имя
Зарплата.Ставка
Зарплата.Начислено
FROM Сотрудники, Зарплата
WHERE Сотрудники.Номер = Зарплата.Номер
Здесь происходит выборка из двух разных таблиц значений, объединённых по номеру. Результатом будет следующий набор данных:
Номер | Имя | Ставка | Начислено |
1 | Вася | 1 | 10000 |
2 | Петя | 0,5 | 3500 |
Ещё немного о SELECT. Использование агрегатных функций
Один из основных операторов SQL SELECT может производить некоторые вычисления при выборке. Для этого он использует определённые функции и формулы.
К примеру, чтобы получить количество записей из таблицы «Сотрудники», нужно использовать запрос:
SELECT COUNT (*) AS N
FROM Сотрудники
В результате получится таблица с одним значением и столбцом.
N |
2 |
В запросах можно использовать функции, вычисляющие сумму, максимальные и минимальные значения, а также среднее. Для этого применяются ключевые слова SUM, MAX, MIN, AVG.
Например, нужно провести выборку из уже известной таблицы «Зарплата»:
Номер | Ставка | Начислено |
1 | 1 | 10000 |
2 | 0,5 | 3500 |
Можно применить такой запрос и посмотреть что получится:
SELECT
SUM(Зарплата.Начислено) AS SUMMA
MAX(Зарплата.Начислено) AS MAX
MIN(Зарплата.Начислено) AS MIN
AVG(Зарплата.Начислено) AS SRED
FROM Зарплата
Итоговая таблица будет такой:
SUMMA | MAX | MIN | SRED |
13500 | 10000 | 3500 | 6750 |
Вот таким образом, можно выбрать из базы данных нужные значения, на лету выполнив вычисление различных функций.
Объединение, пересечение и разности
Объединить несколько запросов в SQL
SELECT Сотрудники.Имя
FROM Сотрудники
WHERE Сотрудники.Номер = 1
UNION
SELECT Сотрудники.Имя
FROM Сотрудники, Зарплата
WHERE Зарплата.Номер = 1
При этом стоит учитывать, что при таком объединении таблицы должны быть совместимы. То есть иметь одинаковое количество столбцов.
Синтаксис оператора SELECT и порядок его обработки
Первым делом SELECT определяет область, из которой он будет брать данные. Для этого используется ключевое слово FROM. Если не указано, что именно выбрать.
Затем может присутствовать SQL оператор WHERE. С его помощью SELECT пробегает по всем строкам таблицы и проверяет данные на соответствие условию.
Если в запросе имеется GROUP BY, то происходит группировка значений по указанным параметрам.
Операторы для сравнения данных
Их имеется несколько типов. В SQL операторы сравнения могут проверять различные типы значений.
«=». Обозначает, как можно догадаться, равенство двух выражений. Например, он уже использовался в примерах выше - WHERE Зарплата.Номер = 1.
«>». Знак больше. Если значение левой части выражения больше, то возвращается логическое TRUE и условие считается выполненным.
«<». Знак меньше. Обратный предыдущему оператор.
Знаки «<=» и «>=». Отличается от простых операторов больше и меньше, тем, что при равенстве операндов условие также будет истинным.
«<>». Не равно. Условие будет считаться TRUE, только если один операнд не равен другому. У него имеется ещё одна интерпретация - «!=».
LIKE
Перевести данное ключевое слово можно как «похожий». Оператор LIKE в SQL используется примерно по такому же принципу — выполняет запрос по шаблону. То есть он позволяет расширить выборку данных из базы используя регулярные выражения.
Например, поставлена такая задача: из уже известной базы «Сотрудники» получить всех людей, чьё имя заканчивается на «я». Тогда запрос можно составить так:
SELECT *
FROM Сотрудники
WHERE Имя LIKE `%я`
Знак процента в данном случае означает маску, то есть любой символ и их количество. А по букве «я» SQL определит что последний символ должен быть именно таким.
CASE
Данный оператор SQL Server представляет собой реализацию множественного выбора. Он напоминает конструкцию switch во многих языках программирования. Оператор CASE в SQL выполняет действие по нескольким условиям.
Например, нужно выбрать из таблицы «Зарплата» максимальное и минимальное значение.
Номер | Ставка | Начислено |
1 | 1 | 10000 |
2 | 0,5 | 3500 |
Тогда запрос можно составить так:
SELECT *
FROM Зарплата
WHERE CASE WHEN SELECT MAX(Начислено) THEN Максимум
WHEN SELECT MIN(Начислено) THEN Минимум
END итог
В данном контексте система ищет максимальное и минимальное значение в столбце «Начислено». Затем с помощью END создаётся поле «итог», в которое будет заноситься «Максимум» или «Минимум» в зависимости от результата выполнения условия.
Кстати, в SQL имеется и более компактная форма CASE — COALESCE.
Операторы определения данных
Это вид позволяет проводить разнообразное изменение таблиц — создание, удаление, модификации и работу с индексами.
Первый из них, который стоит рассмотреть — CREATE TABLE. Он делает не что иное, как создаёт таблицу. Если просто набрать запрос CREATE TABLE, ничего не случится, так как нужно ещё указать несколько параметров.
Например, для создания уже знакомой таблицы «Сотрудники» нужно использовать команды:
CREATE TABLE Сотрудники
(Номер number(10) NOT NULL
Имя varchar(50) NOT NULL
Фамилия varchar(50) NOT NULL)
В это запросе, в скобках сразу же определяются имена полей и их типы, а также может ли он быть равен NULL.
DROP TABLE
Выполняет одну простую задачу — удаление указанной таблицы. Имеет дополнительный параметр IF EXISTS. Он поглощает ошибку при удалении, если искомая таблица не существует. Пример использования:
DROP TABLE Сотрудники IF EXISTS.
CREATE INDEX
В SQL имеется система индексов, которая позволяет ускорить доступ к данным. В общем, он представляет собой ссылку, которая указывает на определённый столбец. Создать индекс можно простым запросом:
CREATE INDEX название_индекса
ON название_таблицы(название_столбца)
Используется данный оператор в T-SQL, Oracle, PL SQL и многих других интерпретациях технологиях.
ALTER TABLE
Очень функциональный оператор, обладающий многочисленными вариантами. В общем случае производит изменение структуры, определения и размещения таблиц. Используется оператор в Oracle SQL, Postgres и многих других.
Далее будут представлены различные варианты использования ALTER TABLE.
ADD. Осуществляет добавление столбца в таблицу. Синтаксис его такой: ALTER TABLE название_таблицы ADD название_столбца тип_хранимых_данных. Может иметь параметр IF NOT EXISTS, что подавить ошибку, если создаваемый столбец уже есть;
DROP. Удаляет столбец. Также имеет ключ IF EXISTS, без которого сгенерируется ошибка, говорящая о том, что требуемый столбец отсутствует;
CHANGE. Служит для переименования имени поля в указанное. Пример использования: ALTER TABLE название_таблицы CHANGE старое_имя новое_имя;
MODIFY. Данная команда поможет сменить тип и дополнительные атрибуты определённого столбца. А используется он вот так: ALTER TABLE название_таблицы MODIFY название_столбца тип_данных атрибуты;
CREATE VIEW
В SQL имеется такое понятие, как представление. Вкратце, это некая виртуальная таблица с данными. Образуется она в результате выборки с помощью оператора языка SQL SELECT. Представления могут ограничивать доступ к базе данных, скрывать их, заменять реальные имена столбцов.
Процесс создания происходит с помощью простого запроса:
CREATE VIEW название представления AS SELECT FROM * название таблицы
Выборка может происходить как всей базы целиком, так и по некоторому условию.
Немного о функциях
В SQL запросах очень часто используются различные встроенные функции, которые позволяют взаимодействовать с данными и преобразовывать их на лету. Стоит рассмотреть их, так как они составляют неотъемлемую часть структурированного языка.
COUNT. Производит подсчёт записей или строк в конкретной таблице. В качестве параметра можно указать имя столбца, тогда данные будут взяты из него. SELECT COUNT * FROM Сотрудники;
AVG. Данная функция применяется только на столбцы с числовыми данными. Ее результатом является определение среднего арифметического всех значений;
MIN и MAX. Эти функции уже использовались в этой статье. Определяют они максимальное и минимальное значения из указанного столбца;
SUM. Все просто — функция вычисляет сумму значений столбца. Применяется исключительно для числового вида данных. Добавив в запрос параметр DISTINCT, будут суммироваться только уникальные значения;
ROUND. Функция округления десятичных дробных чисел. В синтаксисе используется название столбца и количество знаков после запятой;
LEN. Простая функция, вычисляющая длину значений столбца. Результатом будет новая таблица с указанием количества символов;
NOW. Это ключевое слово используется для вычисления текущей даты и времени.
Дополнительные операторы
Многие примеры с операторами SQL имеют ключевые слова, которые выполняют небольшие задачи, но тем не менее сильно упрощают выборку или действия с базами данных.
AS. Применяется, когда нужно визуально оформить результат, присваивая указанное имя получившейся таблице.
BETWEEN. Очень удобный инструмент для выборки. Он указывает область значений, среди которых нужно получить данные. На вход принимает параметр от и до какого числа используется диапазон;.
NOT. Оператор придаёт противоположность выражению.
TRUNCATE. Удаляет данные из указанного участка базы. Отличается от аналогичных операторов тем, что восстановить данные после его использования невозможно. Стоит учесть, что реализация данного ключевого слова в различных интерпретациях SQL может отличаться. Поэтому перед тем как пробовать использовать TRUNCATE, лучше ознакомиться со справочной информацией.
LIMIT. Устанавливает количество строк для вывода. Особенность оператора в том, что он всегда располагается в конце. Принимает один обязательный параметр и один опциональный. Первый указывает, сколько строк с выбранными данными нужно показать. А если используется второй, то оператор срабатывает как для диапазона значений.
UNION. Очень удобный оператор для объединения нескольких запросов. Он уже встречался среди примеров этой в этой статье. Можно вывести нужные строки из нескольких таблиц, объединив их UNION для более удобного использования. Синтаксис его такой: SELECT имя_столбца FROM имя_таблицы UNION SELECT имя_другого_столбца FROM имя_другой таблицы. В результате получится сводная таблица с объединёнными запросами.
PRIMARY KEY. Переводится как «первичный ключ». Собственно, именно такая терминология и используется в справочных материалах. Он означает уникальный идентификатор строки. Применяется, как правило, при создании таблицы для указания поля, которое и будет содержать его.
DEFAULT. Так же, как и предыдущий оператор, используется в процессе выполнения создающего запроса. Он определяет значение по умолчанию, которым будет заполнено поле при его создании.
Несколько советов при разработке платформы для работы с SQL
NULL. Начинающие и не только программисты при составлении запросов очень часто забывают о возможности получения значения NULL. В итоге в код закрадывается ошибка, которую трудно отследить в процессе отладки. Поэтому при создании таблиц, выборке или пересчёте значений нужно остановиться и подумать, а учтено ли возникновение NULL в это участке запроса.
Память. В этой статье были показаны несколько функций, способные выполнять некоторые задачи. При разработке оболочки для работы с базой, можно «перевесить» вычисление простых выражений на систему управления базами данных. В некоторых случаях это даёт значительный прирост в производительности.
Ограничения. Если нужно получить из базы с тысячами строк всего лишь двух, то стоит использовать операторы типа LIMIT или TOP. Не нужно извлекать данные средствами языка разработки оболочки.
Соединение. После получения данных из нескольких таблиц многие программисты начинают сводить их воедино средствами памяти оболочки. Но зачем? Ведь можно составить один запрос в котором это все будет присутствовать. Не придётся писать лишний код и резервировать дополнительную память в системе.
Сортировка. Если есть возможность применять упорядочивание в запросе, то есть силами СУБД, то нужно её использовать. Это позволит значительно сэкономить на ресурсах при работе программы или сервиса.
Много запросов. Если приходится вставлять множество записей последовательно, то для оптимизации следует задуматься о пакетной вставке данных одним запросом. Это также позволит увеличить производительность всей системы в целом.
Продуманное размещение данных. Перед составлением структуры базы нужно задуматься о том, а необходимо ли такое количество таблиц и полей. Может есть способ объединить их или отказаться от некоторых. Очень часто программисты применяют избыточное количество данных, которые нигде и никогда не будут использоваться.
Типы. Для экономии места и ресурсов нужно чутко относиться к видам используемых данных. Если есть возможность воспользоваться менее «тяжёлым» для памяти типом, то надо применять именно его. Например, если известно, что в данном поле числовое значение не будет превышать 255, то зачем использовать 4-байтный INT, если есть TINYINT в 1 байт.
Заключение
В заключение нужно отметить, что язык структурированных запросов SQL сейчас используется практически повсеместно — сайты, веб-сервисы, программы для ПК, приложения для мобильных устройств. Поэтому знание SQL поможет всем отраслям разработки.
Вместе с тем модификации исконного стандарта языка иногда отличаются друг от друга. Например, операторы PL SQL могут иметь иной синтаксис, нежели в SQL Server. Поэтому перед тем как начать разработку с этой технологией, стоит ознакомиться с руководствами по ней.
В будущем аналоги, которые могли бы превзойти по функциональности и производительности SQL, вряд ли появятся, поэтому данная сфера является довольно перспективной нишей для любого программиста.