среда, 26 октября 2011 г.

Основы SQL

SQL - Structured Query Language — «язык структурированных запросов». Это универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.
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 имя столбца >
Не больше
Отрицание операторов SQL:
Оператор
Значение
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 

Комментариев нет:

Отправить комментарий