SQL - Structured Query Language — «язык структурированных запросов». Это универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.
SQL является, прежде всего, информационно-логическим языком, предназначенным для описания, изменения и извлечения данных, хранимых в реляционных базах данных. SQL нельзя назвать языком программирования.
SQL является, прежде всего, информационно-логическим языком, предназначенным для описания, изменения и извлечения данных, хранимых в реляционных базах данных. SQL нельзя назвать языком программирования.
Для работы будем использовать СУБД MySQL. Загрузить установочные можно с сайта http://www.mysql.com
Типы данных в SQL
В SQL используются следующие основные типы данных, форматы которых могут несколько различаться для разных СУБД:
Тип данных
|
Описание
|
NUMBER(p,s)
|
Числовое значение, максимальное количество цифр в котором равно "р", а количество десятичных знаков - "s".
|
INTEGER
|
Целое число (обычно до 7 значащих цифр и знак). Аналог NUMBER(7).
|
VARCHAR2(s)
|
Символьная строка переменной длины, максимальный размер которой равен "s".
В системе Oracle 7 максимально возможное значение s составляет 2000 символов.
|
DATE
|
Значение даты и времени между 1 января 4712 г. до нашей эры и 31 декабря 4712 г. нашей эры.
|
CHAR(s)
|
Символьное значение постоянной длины "s".
В системе Oracle 7 максимально возможное значение s составляет 256 символов.
|
LONG
|
Символьные значения переменной длины размером до 2Гб
|
RAW и LONG RAW
|
Эквиваленты VARCHAR2 и LONG для двоичных данных.
|
В некоторых СУБД еще существует тип данных LOGICAL, DOUBLE и ряд других.
Некоторые СУБД предоставляет пользователю возможность самостоятельного определения новых типов данных,
например, плоскостные или пространственные координаты, единицы различных метрик, пяти- или шестидневные недели (рабочая неделя,
где сразу после пятницы или субботы следует понедельник), дроби, графика, большие целые числа и т.п.
- Должны начинаться с буквы.
- Могут включать от 1 до 30 символов.
- Могут содержать только символы A-Z, a-z, 0-9, _ (подчеркивание), $ и #.
- Не могут совпадать с именем другого объекта, принадлежащего этому же пользователю.
- Не могут совпадать с зарезервированным словом сервера базы данных.
Иногда требуется изменить способ вывода данных, произвести вычисления или просмотреть сценарии "а что, если ...".
Это можно сделать с помощью арифметических выражений. Арифметическое выражение может содержать имена столбцов,
числовые константы и арифметические операторы.
Арифметические операторы
Ниже перечислены арифметические операторы, доступные в SQL.
Использовать их можно в любом предложении команды SQL, кроме FROM.
Оператор
|
Описание
|
+
| Сложение |
-
| Вычитание |
*
| Умножение |
/
| Деление |
||
| Конкатенация |
Если арифметическое выражение содержит более одного оператора, то умножение и деление выполняются в первую очередь.
Если операторы в выражении имеют один и тот же приоритет, они выполняются слева направо.
Изменить порядок действий при вычислении арифметического выражения можно с помощью скобок.
Пример
Вычисление годовых компенсационных.
Сумма выплат за год вычисляется путем умножения заработной платы
(значение переменной salary) на 12 и прибавления одноразовой премии в
размере 100.
Примечание: Для изменения порядка действий и упрощения чтения можно использовать скобки.
Если, например, записать вышеуказанное выражение в виде (12*SALARY) + 100, то результат не изменится.
Пример Вывод фамилии, заработной платы и суммы выплат за год для каждого служащего.
Размер выплат за год вычисляется путем прибавления к заработной плате ежемесячной премии в размере 100 и умножения суммы на 12.
Оператор конкатенации “||” позволяет соединять значения одних столбцов с другими столбцами,
арифметическими выражениями или постоянными значениями для создания символьных выражений.
Столбцы, указанные по обе стороны этого оператора, объединяются для вывода в один столбец.
Пример Соединение двух строковых констант.
Операторы сравнения делятся на две категории: логические и операторы SQL.
Они используются для сравнения значений выражений.
Операторы сравнения проверяются следующими условиями:
Оператор
|
Значение
|
=
|
Равно
|
>
|
Больше
|
>=
|
Больше или равно
|
<
|
Меньше
|
<=
|
Меньше или равно
|
Имеется четыре оператора SQL, используемых с данными всех типов:
Оператор
|
Значение
|
BETWEEN...AND…
|
Между двумя значениями (включительно)
|
IN(список)
|
Совпадает с каким-то из значений в списке
|
LIKE
|
Соответствует символьному шаблону
|
IS NULL
|
Является неопределенным значением
|
Оператор
|
Значение
|
AND
|
Если обе части условия истинны, то условие истинно.
|
OR
|
Если хотя бы одна часть условия истинна, то условие истинно.
|
NOT
|
Возвращает противоположное условие.
|
Оператор
|
Значение
|
!=
|
Не равно (VAX. UNISX. PC)
|
^=
|
Не равно (IBM)
|
<>
|
Не равно (все операционные системы)
|
NOT имя столбца =
|
Не равно
|
NOT имя столбца >
|
Не больше
|
Оператор
|
Значение
|
NOT BETWEEN...AND…
|
НЕ между двумя значениями (включительно)
|
NOT IN(список)
|
НЕ входит в список значений
|
NOT LIKE
|
Не подобно заданной строке
|
IS NOT NULL
|
Не является неопределенным значением
|
Порядок вычисления
|
Оператор
|
1
|
Все операторы сравнения
|
2
|
AND
|
3
|
OR
|
Строки символов (литералы).
Литерал — это
любой символ, выражение или число, включенные в список SELECT и не
являющиеся ни именем,
ни псевдонимом столбца. Они печатаются для каждой возвращаемой строки.
Литералы в виде текста произвольного формата могут быть включены в
результат запроса.
В списке SELECT они рассматриваются как столбцы. Символьные литералы и
литералы-даты должны быть заключены в апострофы (‘’), а числовые
литералы - нет.
Пример: Для данных типа дата в SQL возможно применять некоторые арифметические операторы:
Операция
|
Результат
|
Описание
|
Дата + число | Дата |
Прибавление количества дней к дате
|
Дата - число | Дата |
Вычитание количества дней из даты
|
Дата – дата | Кол-во дней |
Вычитание одной даты из другой
|
Дата + число/24 | дата |
Прибавление к дате часов
|
В языке SQL существуют два класса функций – однострочные и групповые.
Однострочные функции принимают на вход одну строку
(запроса или арифметического выражения) и выдают один результат.
Этот результат, как и в случае понятия функции в любом языке программирования, связывается с ее именем.
Однострочные функции могут быть разных типов.
Мы рассмотрим следующие типы функций: символьные; числовые; для работы с датами; функции преобразования.
Аргументом однострочных функций может быть: константа,
заданная пользователем; значение переменной; имя столбца таблицы; выражение.
Групповая функция принимает на входе группу строк и выдает одно значение после обработки этой группы.
Различие в интерпретации входных данных обуславливает и различие в применении этих функций.
Так однострочные функции могут использоваться там,
где в качестве результата запроса к базе данных подразумевается получение только одной строки данных.
Для использование групповой функции необходимо
сначала сформировать из “многострочного” результата запроса группы строк,
а затем для каждой из них применить групповую функцию.
Синтаксис:
имя_функции (столбец | выражение, [аргумент1, аргумент2, …])
|
---|
где:
имя_функции
|
имя функции
|
столбец
|
любой именованный столбец из базы данных.
|
выражение
|
любая строка символов или вычисляемое выражение.
|
аргумент1, аргумент2
|
любой аргумент, используемый функцией.
|
Функция
|
Возвращаемое значение
|
ABS(n) | Абсолютное значение величины n |
CEIL(n) | Наименьшее целое, большее или равное n |
COS(n) | Косинус n (угла, выраженного в радианах) |
COSH(n) | Гиперболический косинус n |
ЕХР(n) | e в степени n |
FLOOR(n) | Наибольшее целое, меньшее или рапное n |
LN(n) | Натуральный логарифм n, где n>0 |
LOG(m,n) | Логарифм n по основанию m |
MOD(m,n) | Остаток от деления m на n |
POWER(w,n) | w в степени n |
ROUND(n[,m]) |
n, округленное до m позиций после десятичной точки.
По умолчанию m равно нулю
|
SIGN(n) |
-1 (если n<0); 0 (если n=0); 1 (если n>0)
|
SIN(n) | Синус n (угла, выраженного в радианах) |
SINH(n) | Гиперболический синус |
SQRT(n) | Квадратный корень от n. Если n<0, возвращает значение NULL |
TAN(n) | Тангенс n (угла, выраженного в радианах) |
TANH(n) | Гиперболический тангенс n |
TRUNC(n[,m]) |
n, усеченное до m позиций после десятичной точки.
По умолчанию m равно нулю
|
Функция
|
Возвращаемое значение
|
Символьные функции, возвращающие символьные значения:
| |
CHR(n) | Символ с кодом n |
СОNСАТ(сhar1,char2) |
Конкатенация символьных строк char1 и char2
|
INITCAP(char) |
Символьная строка сhar, первые буквы всех слов в которой преобразованы в прописные
|
LOWER(char) |
Символьная строка char, все буквы которой преобразованы в строчные
|
LPAD(char1,n[,char2]) |
Символьная строка char1, которая дополняется слева последовательностью символов из char2 так,
чтобы общая длина строки стала равна n. Значение char2 по умолчанию – (один пробел).
Если часть многобайтового символа не помещается в добавляемой строке, то конец строки заполняется пробелами.
|
LTRIM(char[,set]) |
Символьная строка char, в которой удалены все символы от начала вплоть до первого символа,
которого нет в строке set. Значение set по умолчанию - '' (один пробел).
|
NLS_INITCAP(char[,nls_sort]) |
Символьная строка char,
в которой первые буквы всех слов преобразованы в прописные. Параметр nls_sort определяет последовательность сортировки
|
NLS_LOWER(char[,nls_sort]) |
Символьная строка char, все буквы которой преобразованы в строчные.
Параметр nls_sort определяет последовательность сортировки
|
NLS_UPPER(char[,nls_sort]) |
Символьная строка char, все буквы которой преобразованы в прописные.
Параметр nts_sort определяет последовательность сортировки
|
REPLACE(char, search_string [,replacement_string]) |
Символьная строка char, в которой все фрагменты search_string заменены на replacement_string.
Если параметр replacement_string не определен, все фрагменты search_string удаляются
|
RPAD(char1,n[,char2]) |
Символьная строка char1, которая дополнена справа последовательностью символов из char2 так,
что общая длина строки равна n. Если часть многобайтового символа не помещается в добавляемой строке,
то конец строки заполняется пробелами
|
RTRIM(char[,set]) |
Символьная строка char, в которой удалены все символы справа вплоть до первого символа,
которого нет в строке set. Значение параметра set по умолчанию – ‘ ’ (один пробел).
|
SOUNDEX(char) |
Символьная строка, содержащая фонетическое представление для char,
на английском языке
|
SUBSTR(char,m[,n]) |
Фрагмент символьной строки char, начинающийся с символа m,
длиной n символов (до конца строки, если параметр n не указан).
|
SUBSTRB(char,m[,n]) |
Фрагмент символьной строки char, начинающийся с символа m,
длиной n байтов (до конца строки, если параметр n не указан).
|
TRANSLATE(char,from, to) |
Символьная строка char, в которой все символы, встречающиеся в строке from,
заменены на соответствующие символы из to.
|
UPPER(char) |
Символьная строка char, в которой все буквы преобразованы в прописные
|
Символьные функции, возвращающие числовые значения:
| |
ASCII(char) |
Возвращает десятичный код первого символа строки char в кодировке,
принятой в базе данных. (Код ASCII в системах, использующих кодировку ASCII).
Возвращает значение первого байта многобайтового символа.
|
INSTR(char1,char2[,n[,m]]) |
Позиция первого символа m-ого фрагмента строки char1,
совпадающего со строкой char2, начиная с n-ого символа. По умолчанию n и m равны 1.
Номер символа отсчитывается от первого символа строки char1, даже когда n> 1
|
INSTRB(char1,char2[,n[,m]]) | Позиция первого символа n-ого фрагмента строки char1, совпадающего со строкой char2, начиная с m-ого байта. По умолчанию n и m равны 1. Номер байта отсчитывается от первого символа строки char1, даже когда n> 1. |
LENGTH(char) | Длина строки char в символах |
LENGTHB(char) | Длина строки char в байтах |
NLSSORT(char1,char2[,n[,m]]) |
Зависящее от национального языка значение,
используемое при сортировке строки char.
|
Oracle хранит данные во внутреннем цифровом формате: век, год, месяц,
число, часы, минуты, секунды. По умолчанию дата выдается в формате “DD-MON-YY”.
Функция
|
Назначение
|
MONTHS_BETWEEN(date1, date2) |
Определяет число месяцев, разделяющих две даты.
Дробная часть результата представляет собой долю месяца.
|
ADD_MONTHS(date,n) | Добавление календарных месяцев к дате. |
NEXT_DAY(date, ‘char’) |
Ближайшая дата, когда наступит заданный день.
Аргумент ‘char’ может задавать порядковый номер или название дня недели.
|
LAST_DAY(date) |
Определение последнего дня месяца, содержащего заданную дату.
|
ROUND(date[, ‘fmt’]) |
Округление до целого числа суток. Если fmt=YEAR, определяет первый день года.
|
TRUNC(date[, ‘fmt’]) |
Возвращает первый день месяца, указанного в аргументе date. Если fmt=YEAR,
возвращает дату первого дня года.
|
SYSDATE() |
Возвращает текущую дату и время.
|
Функция
|
Возвращаемое значение
|
TO_CHAR (date[, 'fmt']) |
Преобразование даты в строку символов в соответствии с форматной моделью fmt.
|
TO_CHAR (number[, 'fmt']) |
Преобразование числа в строку символов в соответствии с форматной моделью fmt.
|
TO_NUBER (char) | Преобразование строки символов в числовой формат. |
TO_DATE (char[, 'fmt']) |
Преобразование строки символов в формат даты в соответствии с форматной моделью fmt.
|
- должна быть заключена в апострофы;
- различает символы верхнего и нижнего регистров;
- может включать любые разрешенные элементы формата даты;
- использует элемент fm для удаления конечных пробелов и ведущих нулей;
- отделяется от значения даты запятой.
Модель
|
Описание
|
Форматные модели для работы с датами
| |
YY[YY] |
Полный год цифрами.
|
YEAR |
Год прописью.
|
MM |
Двузначное цифровое обозначение месяца.
|
MON |
Трехсимвольное сокращенное название месяца.
|
MONTH |
Полное название месяца.
|
DD |
День недели цифрами.
|
DY |
Трехсимвольное сокращенное название дня недели.
|
DAY |
Полное название дня недели.
|
HH |
Часы цифрами в 12-ти часовом формате.
|
HH24 |
Часы цифрами в 24-х часовом формате.
|
MI |
Минуты цифрами.
|
SS |
Секунды цифрами.
|
AM |
Символы ‘AM’|’PM’.
|
Числовые модели формата
| |
9 | Вывод цифры с подавлением ведущих нулей. |
0 | Вывод цифры, если ведущий нуль – вывод нуля. |
$ | Плавающий знак доллара. |
L | Плавающий символ местной валюты |
. | Вывод десятичной точки. |
, | Вывод разделителя троек цифр. |
Функция
|
Возвращаемое значение
|
AVG([DISTINCT|ALL]n) |
Среднее значение от n, нулевые значения опускаются
|
COUNT([ALL]*) | Число строк, извлекаемых в запросе или подзапросе |
COUNT([DISTINCT|ALL] expr) |
Число строк, для которых expr принимает не пустое значение
|
MAX([DISTINCT|ALL] expr) | Максимальное значение выражения eхрr |
MIN([DISTINCT|ALL] expr) | Минимальное значение выражения eхрr |
STDDEV([DISTINCT|ALL] n) |
Стандартное отклонение величины n, нулевые значения опускаются
|
SUM([DISTINCT|ALL] n) | Сумма значений n |
VARIANCE([DIST1NCT|ALL]n) |
Дисперсия величины n, нулевые значения опускаются
|
Функция округления:
Пример использования
|
Значение
|
ROUND (45.923, 2) | 45.92 |
ROUND (45.923, 0) | 46 |
ROUND (45.923, -1) | 50 |
Пример использования
|
Значение
|
TRUNC (45.923, 2) | 45.92 |
TRUNC (45.923) | 45 |
TRUNC (45.923, -1) | 40 |
Вычисление остатка от деления двух чисел:
Пример использования
|
Значение
|
MOD(1600,300) | 100 |
Функции работы с датами:
Пример использования
|
Значение
|
MONTHS_BETWEEN('01-SEP-95','11-JAN-94') | 19.6774194 |
ADD_MONTHS('11-JAN-94',6) | '11-JUL-94' |
NEXT_DAY('01-SEP-95','FRIDAY') | '08-SEP-95' |
LAST_DAY('01-SEP-95') | '30-SEP-95' |
ROUND('25-MAY-95','MONTH') | '01-JUN-95' |
ROUND('25-MAY-95 ','YEAR') | '01-JAN-95' |
TRUNC('25-MAY-95 ','MONTH') | '01-MAY-95' |
TRUNC('25-MAY-95 ','YEAR') | '01-JAN-95' |
По материалам сайта http://umk.portal.kemsu.ru/sql/index.html
Комментариев нет:
Отправить комментарий