
- •Введение
- •Прочие команды
- •Структура базы данных
- •Ключи, ограничения
- •Индексы
- •Представления
- •Процедуры и функции
- •Триггеры
- •Пользователи и сессии
- •Инструментарий скачать субд
- •Инсталляция
- •Выполнение запросов
- •Использование примеров
- •Комментарий
- •Идентификаторы
- •Обзор типов данных
- •Интервал времени
- •Литералы
- •Выражения и операции
- •Cтроковые операции
- •Алгебраические операции
- •Операции отношения
- •Логические операции и предикаты
- •Условные выражения
- •Прочие операции
- •Обзор функций
- •Математические функции
- •Строковые функции
- •Работа с датами
- •Преобразование типов
- •Функции Oracle
- •Функции PostgreSql
- •Функции MySql
- •Создание таблицы
- •Значения полей по умолчанию
- •Ключи и ограничения
- •Настройка внешнего ключа
- •Создание по выборке
- •Дополнительные параметры таблицы
- •Изменение, удаление таблицы
- •Переименование таблицы или ее столбца
- •Добавление/удаление столбца
- •Первичный ключ
- •Уникальный ключ
- •Внешний ключ
- •Безошибочное удаление таблиц
- •Добавление записей
- •Значения по умолчанию
- •Подзапросы
- •Вставка по условию
- •Обновление записей
- •Обновление подзапросом
- •Обновление по данным другой таблицы
- •Удаление записей
- •Выборка записей
- •Выборка констант
- •Выборка по столбцам таблиц
- •Синонимы (алиасы)
- •Уникальные записи
- •Выборка по условию
- •Выборка по группам
- •Соединения
- •Агрегатные функции, группировка данных
- •Операции над выборками
- •Добавление итогов
- •Нумерация записей
- •Обеспечение уникальности первичного ключа
- •Столбцы с автоинкрементом
- •Индексы
- •Представления
- •Динамический sql (dsql)
- •Процедурные операторы блоковая структура кода
- •Присвоение
- •Условный оператор
- •Оператор выбора
- •Безусловный цикл
- •Цикл с предусловием
- •Цикл по счетчику
- •Цикл по элементам
- •Операторы выхода/продолжения итерации
- •Выборка в переменные
- •Хранимые процедуры
- •Вызов процедур
- •Исключения
- •Курсоры
- •Триггеры
- •Числа прописью
- •Транзакции, конкурирующие запросы
- •Управление аккаунтами пользователи
- •Права доступа
- •Права доступа MySql
- •Права доступа PostgreSql
- •Права доступа Oracle
- •Удаление прав доступа
- •Роли PostgreSql
- •Роли Oracle
- •Роли MySql
- •Файловый вывод/ввод
- •Информация о базе данных
Комментарий
В SQL коде комментарий оформляется следующим образом.
/* много
строчный комментарий
*/
-- однострочный комментарий
Для MySQL после начала однострочного комментария пробел обязателен.
Идентификаторы
Идентификатор - последовательность символов и цифр, служащая для именавания различных объектов как таблицы, имена столбцов и т.д.
Допустимыми символами являются: 'A'-'Z', 'a'-'z','_', '0'-'9'. Цифры не могут быть первым символом. Регистр букв обычно значения не имеет.
По станадарту строка, заключенная в двойные кавычки, также является идентификатором. Причем в строку могут входить прочие символы, например, буквы русского алфавита и пробелы. В MysQL дополнительно поддерживаются идентификаторы в обратных одинарных кавычках `` (не апостроф, а кавычка где ~ или русская Ё, перед клавишей 1). А двойные кавычки могут использоваться только в режиме ANSI_QUOTES.
Обзор типов данных
Ниже приведен список основных типов данных для столбцов таблиц:
BOOLEAN - логический тип;
TINYINT - целочисленный тип размером в один байт;
SMALLINT - целочисленный тип размером в два байта;
INT,INTEGER - целочисленный тип размером в четыре байта;
BIGINT - целочисленный тип размером в восемь байт;
DEC, NUMERIC, DECIMAL - тип для вещественных чисел с фиксированной точкой;
FLOAT - тип для вещественных чисел с плавающей точкой малой точности;
DOUBLE PRECISION - тип для вещественных чисел с плавающей точкой двойной точности;
CHAR - строка фиксированного размера;
NCHAR - строка фиксированного размера с поддержкой национальных символов;
VARCHAR - строка переменного размера;
NVARCHAR - строка переменного размера с поддержкой национальных символов;
DATE - дата;
TIME - время;
TIMESTAMP - временная отметка;
INTERVAL - интервал времени;
BINARY LARGE OBJECT - двоичные данные больших размеров. В большинстве СУБД называется BLOB;
CHARACTER LARGE OBJECT - символьные данные больших размеров. Может называться как CLOB или TEXT.
В Oracle все числовые типы реализованы через собственный встроенный тип NUMBER. В некоторых базах как MySQL DOUBLE PRECISION можно заменить на просто DOUBLE. При определении вещественных типов возможны два параметра, определяющих общее число знаков в числе и число знаков после запятой, например DOUBLE PRECISION(10,2).
Строки также имеют параметр определяющие размер строки или максимальный размер строки.
Вместо ANSII типов VARCHAR и NVARCHAR в Oracle рекомендуется использовать типы VARCHAR2 и NVARCHAR2. Для символьных типов приставка N в Oracle подразумевает использование Unicode символов. MS Access всегда использует только Unicode символы (т.е. VARCHAR и NVARCHAR являются синонимами). В MySQL тип символов задается настройкой базы, или явным указанием используемой кодировки и таблицы сравнения строк без учета регистра.
В некоторых базах нет строгого разграничения между временными типами, и все имена типов являются синонимами.
Интервал времени
Синтаксис и реализация интервалов отличается на разных СУБД.
Oracle
Данный тип разделен на два: интервал по годам и интервал по дням. В первом случае можно указать точность интервала только до месяца (по умолчанию год). Во втором случае до различных долей секунды. Кроме этого указывается точность значения временных промежутков в количестве цифр. Если точность не совпадает, то выводится сообщение об ошибке.
-- годовые интервалы
-- интервал в 99 лет
INTERVAL '99' YEAR
-- интервал в 999 лет в скобках
-- указана точность для годов
INTERVAL '999' YEAR(3)
-- интервал в 999 лет и 3 месяца в скобках
-- после TO указывается точность самого промежутка
-- месяцы указываются через -
INTERVAL '999-3' YEAR(3) TO MONTH
-- интервал в 99 лет и два месяца
-- это отрицательный интервал
INTERVAL '-99-2' YEAR TO MONTH
-- дневные интервалы
-- интервал в 200 дней
INTERVAL '200' DAY(3)
-- интервал в 200 дней и 6 часов
INTERVAL '200 6' DAY(3) TO HOUR
-- интервал в 200 дней, 6 часов
-- и 10 минут
INTERVAL '200 6:10' DAY(3) TO MINUTE
-- интервал в 200 дней, 6 часов,
-- 10 минут и 7 секунд
INTERVAL '200 6:10:7' DAY(3) TO SECOND
-- интервал в 200 дней, 6 часов,
-- 10 минут, 7 секунд и 333 милисекунды
INTERVAL '200 6:10:7.333' DAY(3) TO SECOND(3)
-- пример интервала в запросе
-- выборка интервала в два дня
select INTERVAL '2' day from dual;
PostgreSQL
интервалы указываются в виде строки, в которой перечисляются значение и тип промежутка:
microsecond - микросекунды;
millisecond - милисекунды;
second - секунды;
minute - минуты;
hour - часы;
day - дни;
week - недели;
month - месяцы;
year - года;
century - век;
millennium - тысячелетие.
Слова можно употреблять и во множественном числе. Если интервал начинается с дней, то можно использовать короткий формат строки как в Oracle для дневных интервалов.
-- интервал в три года
INTERVAL '3 year'
-- интервал в три года и три дня
INTERVAL '3 years 3 day'
-- интервал в три года, три дня
-- и 3 минуты
INTERVAL '3 year 3 day 3 minute'
-- интервал в 3 дня, 7 часов,
-- 7 минут и 5 секунд
INTERVAL '3 7:07:05'
-- пример интервала в запросе
-- выборка интервала в два дня
select INTERVAL '2 day';
MySQL
Только сложные интервалы, состоящие из более одного типа промежутков, указываются в строке. Для этих целей введены дополнительные по сравнению с PostgreSQL имена для промежутков:
second_microsecond - секунды и микросекунды, формат строки 's.m';
minute_microsecond - минуты и микросекунды, формат строки 'm.m';
minute_second - минуты и секунды, формат строки 'm:s';
hour_microsecond - часы и микросекунды, формат строки 'h.m';
hour_second - часы, минуты и секунды, формат строки 'h:m:s';
hour_minute - часы и минуты, формат строки 'h:m';
day_microsecond - день и микросекунды, формат строки 'd.m';
day_second - дни, часы, минуты и секунды, формат строки 'd h:m:s';
day_minute - дни, часы и минуты, формат строки 'd h:m';
day_hour - дни и часы, формат строки 'd h';
year_month - года и месяцы, формат строки 'y-m'.
MySQL интервалы используются в выражениях с временными типами данных, использовать их в качестве конечного типа для столбцов запрещено.
-- интервал в три года
INTERVAL 3 year
-- интервал в 3 дня, 7 часов,
-- 7 минут и 5 секунд
INTERVAL '3 7:07:05' day_second
-- пример интервала в запросе
-- выборка интервала в два дня
-- ошибка, столбец не может быть типа INTERVAL
select INTERVAL '2 day';
-- правильно, к дате прибавляем интервал
select date '2009-01-01'+INTERVAL '3 7:07:05' day_second