SQL - введение и документация (RU)

Это попытка дать введение в SQL и объяснить, что такое реляционные базы данных, что такое реляционная модель данных и как можно извлеч данные из баз данных с помощью SQL. -- english, deutsch, russian --
Categories: 

Предисловие

Это маленькое руководство по SQL автор написал в свободное от работы время для того, чтобы иметь возможность постоянно и быстро находить требуемую информацию по SQL. В этом руководстве описана лишь основная часть языка SQL, по поводу версий SQL, используемых производителями баз данных в своих продуктах, прошу связываться с таковыми напрямую. Изначальный "стандартный SQL" был намного расширен фирмами, выпускающими базы данных, в процессе их развития, что однако не всегда может быть рассмотрено в этом руководстве. Маленькая табличка после команды SQL показывает в некоторых случаях в какой системе эта команда поддерживается.

Гарантия
Этот текст не является официальной публикацией и не имеет каких-либо претензий на полноту и полную безошибочность. За ошибки в коммерческих и некоммерческих проектах, результирующие из неправильных или неправильно понятых объяснений в этом тексте, автор не несет на себе никакой ответственности.

Базы данных

Что такое реляционные базы данных? Как создавать новые базы данных? Как удалять базы данных? Как изменять стуктуру баз данных?

CREATE DATABASE - создать базу данных

Синтаксис:

    CREATE DATABASE dbname
    [ IN dbspace ]
    [ { WITH [ LOCATION = 'dbpath' ] [ TEMPLATE = template ] [ ENCODING = encoding ] }
    | { WITH [ BUFFERED ] LOG }
    | { WITH LOG MODE ANSI } ]

Описание:

    Создает новую базу данных. Внимание, синтаксис и дополнительные опции могут сильно отличаться в зависимости от используемой системы баз данных.

    Пример (общий):

CREATE DATABASE example;
  

Создать новую базу данных под именем example.

Пример (Postgresql):

CREATE DATABASE expamle WITH LOCATION = '/var/lib/postgresql/data' ENCODING='utf-8'
  

Создать новую базу данных под именем example, использующую utf-8 в качестве кодировки символов и физически находящуюся в директории '/var/lib/postgresql/data'.

Пример (Informix):

CREATE DATABASE expamle IN dbsl01 WITH BUFFERED LOG;
  

Создать в DB-Slice dbsl01 новую базу данных с включенным буфферизованным протоколированем под именем example.

DROP DATABASE - удалить базу данных

Синтаксис:

Описание:

    Удаляет одну из баз данных, управляемых системой управления базами данных (DBMS).

    Beispiel:

DROP DATABASE example;

Удаляет базу данных с именем example.

Таблицы данных

Что такое реляционные таблицы данных? Как создавать новые таблицы данных? Как удалять таблицы данных? Как изменять стуктуру таблиц данных?

CREATE TABLE - создать таблицу

Синтаксис

Описание:

    CREATE TABLE создает новую пустую таблицу в базе данных, структура которой описывается в этой команде.

Тип данных

    Тип данных здесь определенный тип данных, который должен содержать столбец таблицы данных.

    Текстовые типы данных:

      CHARACTER - Текстовые поля
      CHAR - сокращение CHARACTER

    Числовые типы данных (exact numeric):

      DECIMAL - десятичное число
      DEC - сокращение DECIMAL
      NUMERIC - то же, что и DECIMAL, но с другой точностью
      INTEGER - числа без запятой (целые числа), используются без параметров, потому что они определены системой баз данных.
      INT - сокращение INTEGER
      SMALLINT - числа без запятой (целые числа), используются без параметров и занимают в некоторых случаях меньше памяти, т.к. используются для маленьких чисел. Формат определяется системой баз данных.

    Числовые типы данных (approximate numeric):

      FLOAT - числа в экспоненциальной форме
      REAL - то же, что и FLOAT, но без указания размера, т.к. он определен базой данных
      DOUBLE PRECISION - то же, что и REAL, но в некоторых базах данных с двойной точностьюt
      DOUBLE - сокращение DOUBLE PRECISION

    Другие типы данных:

      DATE - дата, в европейских системах как правило в формате dd.mm.yyyy
      TIME - время, в европейских системах как правило в формате hh-mm-ss
      VARCHAR - текст переменного размера, в зависимости от базы данных не более, чем от 254 до 2048 символов
      LONG VARCHAR - текст переменного размера, в зависимости от системы баз данных не более чем 16KB символов.

    Пример:

CREATE TABLE torder (
  onum INTEGER,
  anz INTEGER );

Здесь создается пустая таблица данных, состоящая из строк с двумя полями : onum и anz.

Размер

    Синтаксис:

    [число цифр после запятой,] общий размер поля

    Пояснение: Число цифр после запятой разрешается специфицировать только у DECIMAL и NUMERIC. Общий размер поля разрешается специфицировать только у типов данных с переменным размером, если он не специфицирован, то используется размер 1. Исключением является тип CHARAKTER, размер которого указывать обязатеьно.

    Пример:

CREATE TABLE tverkauf (
vnum INTEGER,
vname CHAR(30),
stadt CHAR(20),
prov DECIMAL);

Здесь создается пустая таблица данных, состаящая из строк с четырьмя полями : vnum - число, vname - 30 символов, stadt - 20 символов и prov - число.

тип поля

    Синтаксис: тип поля [...]

    тип поля здесь тип создаваемого столбца таблицы данных.

    NOT NULL


      Используется для запрещения элементов без определенного значения, NULL-элементов..

    UNIQUE


      Используется для запрещения повтора уже содержащихся элементов (запрещение дупликатов).

    CHECK( условие )


      Используется для проверки заносимых в таблицу значений.

    DEFAULT = Wert


      Предопределяет значение элемента, используемое взамен величины NULL (пустое поле).

    PRIMARY KEY


      Указывает на главный ключ таблицы, используемый для индексирования и соединения таблиц.

    Пример:

CREATE TABLE tverkauf (
  vnum INTEGER NOT NULL UNIQUE PRIMARY KEY,
  vname CHAR(30) NOT NULL UNIQUE,
  stadt CHAR(20) DEFAULT='Berlin',
  prov DECIMAL CHECK(comm < 1) );

Здесь создается пустая таблица tverkauf , содержащая строки из 4 полей:
vnum - число, не пустое, не имеющее дупликатов и используемое в качестве главного ключа таблицы;
vname - текстовое поле из 30 символов, не пустое и не имеющее дупликатов;
stadt - текстовое поле из 20 символов, предопределенное как 'Berlin';
prov - число, не превышающее 1.

Categories: 

DROP TABLE - удалить таблицу данных

Синтаксис

Описание

    С помощью DROP TABLE удаляются таблицы данных из баз данных. Внимание, будьте осторожны: вместе с таблицей удаляются все сожержащиеся в ней данные.

    Пример:

DROP TABLE tkunden

Здесь удаляется из активной базы данных таблица tkunden.

Categories: 

Данные и записи данных

Что такое записи данных ? Как опрашивать данные? Как добавлять новые данные в базу данных? Как удалять данные из базы данных ? Как изменять данные в базе данных?

SELECT - опрашивать данные

-- english, deutsch, russian --

Синтаксис

Описание:

    SELECT возвращает как результат строки данных, которые создаются из данных, содержащихся в указанных исходных таблицах данных. С помощью SELECT можно, например, выбирать определенные строки из одной таблицы данных, или суммировать элементы этой таблицы, или же создавать новую таблицу-результат из многих исходных.

DISTINCT

    DISTINCT указывает базе данных исключать дупликаты из результата команды SELECT.

    Пример:

SELECT DISTINCT vnum
FROM torder;

Здесь выбираются все различные (без дупликатов) элементы столбца vnum таблицы torder.

FROM { таблица [ псевдоним ] } [,...]

    С помощью FROM сообщают базе данных из каких таблиц выбирать данные.

    Пример:

SELECT vnum
FROM torder;

Здесь выбираются все элементы поля vnum таблицы torder.

WHERE условие

    С помощью WHERE ограничивают выбор данных из указанных таблиц.

    Пример:

SELECT tkunden.knum, tverkauf.vnum, tverkauf.prov
FROM tkunden, tverkauf
WHERE tkunden.vnum=tverkauf.vnum; 

Результатом является здесь таблица из строк, состоющих из поля knum таблицы tkunden и полей vnum и prov таблицы tverkauf, где с помощью WHERE указывается как находить строки таблицы tverkauf соответствующие строкам из таблицы tkunden.

GROUP BY { поле | Integer } [,...]

    GROUP BY используется вместе с функциями агрегирования данных для того, чтобы последние действовали на определенные группы строк результирующей таблицы данных. На месте имен полей могут быть использованы их порядковые номера в списке полей результирующей таблицы.

    Пример:

SELECT vnum, MAX(preis)
FROM torder
GROUP BY vnum;

Здесь выбираются в качестве результата все максимальные значения поля preis про найденную группу строк с идентичным значением поля vnum.

HAVING условие

    HAVING используется вместе с GROUP для того чтобы выбирать только определенные группы строк данных, которые удовлетворяют указанному условию.

    Пример:

SELECT vnum, MAX(preis)
FROM torder
GROUP BY vnum
HAVING AVG(preis) > 10

Здесь выбираются все максимальные значения поля preis про найденную группу строк данных с идентичным vnum, удовлетворяющию дополнительному условию, что средняя величина preis больше 10.

ORDER BY { поле | Integer [ ASC|DESC ] } [,...]

    ORDER BY сортирует строки результирующей таблицы данных. Если ORDER BY используется внутри GROUP BY, то строки сортируются внутри каждой группы результирующих строк. Вместо имен полей могут быть использованы их порядковые номера в списке полей результирующей таблицы. ASC сортирует данные в восходящем порядке, DESC - в обратном.

    Пример:

UNION [ALL] SELECT-команда

    UNION используется для того, чтобы объединять результаты двух или более команд SELECT. Поля всех результирующих таблиц должны быть совместимыми. Если ALL не использовано, то дупликаты исключаются из объединения результатов.

    Пример:

SELECT vnum, vname
FROM tverkauf
WHERE stadt='Berlin'
UNION
SELECT knum, kname
FROM tkunden
WHERE stadt='Berlin'
ORDER BY 1;

Здесь результатом является таблица, содержащая все vnum и knum таблицы tverkauf так же, как и всеv num и kname таблицы tkunden, где поле stadt имеет значение 'Berlin'. Результат сортируется по первому столбцу и дупликаты исключаются.

INTERSECT [ALL] SELECT-команда

    ANSI DB2 Informix Oracle SQL Server Interbase
    нет да да да ? ?

    INTERSECT используется для того, чтобы объединять результаты двух или более команд SELECT, при этом в резултат включаются только строки содержащиеся в первой команде SELECT, как и во второй. Поля всех результирующих таблиц должны быть совместимыми. Если ALL не использовано, то дупликаты исключаются из объединения результатов.

    Пример:

SELECT vnum, vname
FROM tverkauf
WHERE stadt='Berlin'
INTERSECT
SELECT knum, kname
FROM tkunden
WHERE stadt='Berlin'
ORDER BY 1; 

Здесь интересуют все строки первой результирующей таблицы, которые так же содержатся и во второй. Дупликаты исключаются из результата.

EXCEPT [ALL] SELECT-команда

    Важно: в некоторых диалектах SQL используется вместо EXCEPT MINUS или DIFFERENCE, синтаксис же от этого не меняется

    ANSI DB2 Informix Oracle SQL Server Interbase
    нет да ? ? ? ?

    EXCEPT используется для того, чтобы объединять результаты двух или более команд SELECT, при этом в результат включаются только строки, содержащиеся в первой команде SELECT и не содержащиеся во второй. Поля всех результирующих таблиц должны быть совместимыми. Если ALL не использовано, то дупликаты исключаются из объединения результатов.

    Пример:

SELECT vnum, vname
FROM tverkauf
WHERE stadt='Berlin'
EXCEPT
SELECT knum, kname
FROM tkunden
WHERE stadt='Berlin'
ORDER BY 1; 

Здесь интересуют все строки первой результирующей таблицы, которые не имеют дупликатов во второй.

INTO { TEMP | SCRATCH } таблица

    ANSI DB2 Informix Oracle SQL Server Interbase
    нет да да ? нет нет

    INTO TEMP используется для создания вспомогательных таблиц в активной базе данных, которые автоматически удаляются из последней после окончания связи с ней. Часто используется для оптимизации команд SQL. INTO SCRATCH отличается от INTO TEMP тем, что временная таблица фрагментируется по всем дискам.

INSERT - добавлять данные

Синтаксис

Описание:

    INSERT INTO добавляет новые строки в указанную таблицу данных, которые состоят из констант или же являются результатом исполнения команды SELECT.

    Пример

INSERT INTO tberlin
SELECT *
FROM tverkauf
WHERE stadt='Berlin'

Здесь добавляются все строки таблицы tverkauf, где поле stadt имеет значение 'Berlin', в таблицу tberlin.

VALUES ( константа [,...] )

    С помощью VALUES записывают новую строку, состоящую из указанных констант, в таблицу данных.

    Пример:

INSERT INTO tverkauf (vnum,vname,stadt)
VALUES ( 1001, 'Müller', 'Berlin' ); 

Здесь добавляется новая строка в таблицу tverkauf, содержащая следующие элементы : 1001,'Müller','Berlin',NULL.

DELETE FROM - удалять данные

Синтаксис:

Описание:

    С помощью DELETE FROM удаляются строки из таблицы базы данных.

    Пример:

DELETE FROM tverkauf
WHERE stadt='Kleinstadt'

Здесь удаляются все строки таблицы tverkauf, где поле stadt имеет значение 'Kleinstadt'.

UPDATE - изменять данные

Синтаксис

Описание:

    UPDATE используется для того, чтобы заменять определенные значения в элементах таблицы данных другими.

SET { поле=значение } [,...]

    С помощью SET заменяют значения полей в таблице указанными в списке.

    Пример:

UPDATE tverkauf
SET prov = prov + .01
WHERE 2 <=
( SELECT COUNT(knum) FROM tkunden WHERE tkunden.vnum=tverkauf.vnum ); 

Здесь увеличивается значение поля prov таблицы tverkauf на .01 в тех строках, которым соответствуют не более двух строк в таблице tkunden.

CASE - команда

Синтаксис

Описание

    С помощью CASE данные могут быть обработаны в зависимости от других данных. Внимание, команда поддерживается не всеми базами данных.

    Пример:

SELECT knum, kname,
CASE
  WHEN stadt <> 'Berlin'
  THEN LEFT('Das ist ein Nichtberliner, der sehr schlecht ist...',40)
  ELSE stadt
END berlin_yes_no
FROM tkunden
WHERE rating>1; 

Здесь выбираются все клиенты, рэйтинг которых больше, чем 1, где различают только на живущих в Берлине и прочих.

LOAD - загрузить данные из файла

Синтаксис

Описание:

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

    Пример:

LOAD FROM 'neworders.txt' DELIMITER '|'
INSERT INTO torder;

Загружает новые/дополнительные записи данных из текстового файла, в котором разделителем полей является |, в таблицу torder.

UNLOAD - выгрузить данные в текстовый файл

Синтаксис:

Описание:

    Используется для того, чтобы записывать результат SELECT-команды в текстовый файл. В качестве разделителя полей данных в строке может использоваться любой символ. Если разделитель не указан, то '|' используется по умолчанию.

    Пример:

UNLOAD TO 'allorders.txt' DELIMITER '|'
SELECT * FROM torder;

Сохраняет все данные таблицы torder в текстовом файле allorders.txt, в качестве разделителя полей используется |.

Операторы

Что такое операторы? Как использовать операторы ? Какие оператоы поддерживает язык SQL?

Операторы специфические для языка SQL

Здесь вы найдете информацию по операторам специфическим для языка SQL, которые не встречаются или не встречаются в этом виде в других языках программирования.

* - все столбцы таблицы данных

Синтаксис

    *

Описание:

    * является синонимом для всех полей строки таблицы данных, используется для сокращения количества текста.

    Пример:

SELECT *
FROM torder; 

Выбирает все строчки и все поля таблицы troder.

ALL - все строчки таблицы данных

Синтаксис

Описание:

    ALL используется для того, чтобы выбирать все (без исключений) значения/строки результирующей таблицы данных.

    Пример:

SELECT *
FROM tkunden
WHERE rating > ALL ( SELECT rating FROM tkunden WHERE stadt='Berlin'
); 

Выбрать всех клиентов, рейтинг которых больше чем рейтинг всех клиентов из Берлина.

ANY - некоторые

Синтаксис

Описание:

    ANY и SOME являются синонимами. Используется для того, чтобы применять логический оператор к некоторым значениям справо от него.

    Пример:

SELECT *
FROM tkunden
WHERE rating > ANY ( SELECT rating FROM tkunden WHERE stadt='Berlin'
); 

Выбрать всех клиентов, рейтинг которых больше чем рейтинг хотя бы одного из клиентов из Берлина.

BETWEEN - между двумя значениями

Синтаксис

Описание:

    WW BETWEEN W1 AND W2 имеет значение 'истина', если значение WW находится между W1 и W2.

    Пример:

SELECT vnum,anz,preis
FROM torder
WHERE preis BETWEEN 100 AND 500;

Здесь выбираются поля vnum, anz и preis таблицы torder, где поле preis имеет значение не меньше 100 и не больше 500.

EXISTS - существует

Синтаксис

Описание:

    EXISTS используется вместе с подзапросами SELECT включенными в главный
    запрос и
    имеет значение истина, если подзапрос возвращает данные, и - ложь, если
    подзапрос не
    возвращает данных.

    Пример:

SELECT DISTINCT knum
FROM tkunden outer
WHERE EXISTS
( SELECT * FROM tkunden inner
WHERE inner.vnum=outer.vnum AND inner.knum<&gt;outer.knum ); 

Здесь выбираются те клиенты (knum), которые обслуживаются
более чем одним продавцом.

IN - один из

Синтаксис

Описание:

    WW IN ( значение [,...] ) указывает базе данных, что поле WW должно иметь одно из указанных значений.

    Пример:

SELECT *
FROM torder
WHERE preis IN (100,200,300,400,500);

Здесь выбираются все строки таблицы torder, где поле preis имеет одно из значений 100, 200, 300, 400 или 500.

IS NULL - без конкретного значения

Синтаксис

Описание:

    С помощью этого оператора можно специально выбирать строки таблиц данных с пустыми (не имеющими значения) полями или же исключать их из результата запроса.

    Пример:

SELECT *
FROM tkunden
WHERE stadt IS NOT NULL; 

Здесь выбираются все клиенты, у которых поле stadt имеет какое-либо значение.

LIKE - похожи на

Синтаксис

    LIKE форматная строка

Описание:

    LIKE используется только с полями типа CHAR или VARCHAR. Для форматной строки используются следующие конвенции :
    _ (символ подчеркивания) указывает на то, что на этом месте допускаются любые символы
    % (процент) указывает на то, что на этом месте допускаются любые комбинации символов (wildcard)

    Пример:

SELECT *
FROM tkunden
WHERE kname LIKE 'G%'; 

Выбрать всех клиентов с именем начинающимся с G.

MATCHES - выглядит как (informix)

Синтаксис:

    MATCHES форматная строка

Описание:

    MATCHES используется только с полями типа CHAR или VARCHAR. Для форматной строки используются следующие конвенции :
    ? (знак вопроса) указывает на то, что на этом месте допускаются любые символы
    * (звездочка) указывает на то, что на этом месте допускаются любые комбинации символов (wildcard)
    [множество символов] - квадратные скобки с указанным в них множеством символов указывают на допустимые на этом месте символы

SOME - некоторые из

Синтаксис

Описание:

    ANY и SOME являются синонимами. Используется для того, чтобы применять логический оператор к некоторым значениям справо от него.

    Пример:

SELECT *
FROM tkunden
WHERE rating > SOME ( SELECT rating FROM tkunden WHERE
stadt='Berlin' ); 

Выбрать всех клиентов, рейтинг которых больше чем рейтинг хотя бы одного из клиентов из Берлина.

Логические операторы

Внутри логических формул формулы и данные соединяются логическими операторами.

ОператорОписаниеПримерКоментарий
AND Логическое и, например означает аа AND bb - aa и bb Приоритет исполнения выше OR, но ниже NOT. preis > 10 AND preis < 100; Выбрать все заказы, у которых цена заказанных продуктов больше 10 и меньше чем 100.
NOT Логическое "не" : если aa имеет значение истина, то NOT aa - ложь и т.п. Приоритет исполнения выше, чем AND и OR. NOT preis=0 Выбрать все заказы, у которых цена заказанных продуктов не равна 0.
OR Логическое "или", например означает аа OR bb - aa или bb Приоритет исполнения ниже NOT и AND. preis > 10 AND preis < 100 OR preis > 1000 Выбрать все заказы, у которых цена заказанных продуктов больше 10 и меньше чем 100, или же превышает 1000.
= Знак равно, например aa=bb означает aa равно bb. Приоритет исполнения выше NOT, AND и OR. preis = 10 Выбрать все заказы с ценой продукта равной 10.
> aa > bb принимает значение истина, когда aa имеет значение большее, чем bb. Приоритет исполнения выше, чем NOT, AND и OR, и ниже, чем =. preis > 0 Выбрать все заказы с ценой продукта больше 0.
>= aa >= bb принимает значение истина, когда aa имеет значение большее или равное bb. Приоритет исполнения выше, чем NOT, AND и OR, и ниже, чем =. preis >= 300 Выбрать все заказы с ценой продукта больше или равной 300.
&lt aa < bb принимает значение истина, когда aa имеет значение меньшее, чем bb. Приоритет исполнения выше, чем NOT, AND и OR, и ниже, чем =. preis < 300 Выбрать все заказы с ценой продукта меньше 300.
<= aa <= bb принимает значение истина, когда aa имеет значение меньшее или равное bb. Приоритет исполнения выше, чем NOT, AND и OR, и ниже, чем =. preis <= 300 Выбрать все заказы с ценой продукта меньше или равной 300.
<> aa <> bb принимает значение истина, когда aa имеет значение не равное bb. Приоритет исполнения выше, чем NOT, AND и OR, и ниже, чем =. preis <> 0 Выбрать все заказы с ценой продукта не равной 0.

Арифметические операторы

Внутри формул значения и поля данных соединяются арифметическими операторами.

ОператорОписаниеПримерЗначение
-негативный знак-0.01минус 0,01
+позитивный знак (не обязателен)+.9плюс 0,9
*умножение2*Field32 умножить на значение поля Field3
/делениеProzent3/100Значение поля Prozent3 делится на 100
+сложениеFeldA + (-0.9)Сложение значения поля FeldA и константы -0,01
-вычитаниеFeldA - 0.01Значение поля FeldA минус 0,01

Приоритеты операторов

Все операторы языка SQL исполняются в определенной последовательности, в зависимости от их приоритета:

ОператорОписаниеПриоритет
+- Знак числа 0
* /Умножение и деление 1
+ -Сложение и вычитание 2
=равенство 3
<>неравенство 3
>больше 3
<меньше 3
>=больше или равно 3
<=меньше или равно 3
[NOT] BETWEEN ... AND ...[не] между ... и ... 3
IS [NOT] NULL [не] без значения 3
[NOT] IN [не] входит в состав списка 3
NOT Отрицание 4
AND Логическое И 5
OR Логическое ИЛИ 6

Функции

Что такое функции? Как использовать функции? Как функции поддерживает язык SQL?

Функции аггрегирования данных

Здесь вы найдете все функции аггрегирования данных, которые используются вместе с GROUP BY в команде SELECT и которые аггрегируют данные из многих записей данных или выполняют статистические функции на них.

AVG - среднее арифметическое

Синтаксис

Описание

    AVG возвращает среднее арифметическое всех значений указанного поля : AVG(x) = SUM(x)/COUNT(x).

    Пример:

SELECT AVG(preis)
FROM torder; 

Подсчитывает среднюю цену заказов ...

COUNT - подсчитать количество записей данных

Синтаксис:

Описание:

    COUNT подсчитывает количество сгруппированных строк данных, имеющих какое-либо значение в указанном поле.

    Пример:

SELECT COUNT(DISTINCT preis)
FROM torder;

Подсчитывает количество различных значений поля preis в таблице torder.

SUM - суммировать значения

Синтаксис:

Описание:

    SUM возвращает сумму всех значений указанного поля. NULL-значения не учитываются.

    Пример:

SELECT SUM(preis)
FROM torder;

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

MIN - наименьшее значение поля данных

Синтаксис

Описание

    MIN возвращает наименьшее значение указанного поля в группе.

    Пример:

SELECT MIN(preis)
FROM torder; 

Возвращает самое наименьшее значение поля preis.

MAX - наибольшее значение поля данных

Синтаксис

Описание

    MAX возвращает максимальное значение поля preis.

    Пример:

SELECT MAX(preis)
FROM torder;

Возращает наибольшую цену, содержащуюся в поле preis.

RANGE - определить интервал данных

Синтаксис

Описание

    RANGE возвращает разницу между наибольшим и наименьшим значением поля, RANGE(x)=MAX(x)-MIN(x).

    Пример:

SELECT PANGE(preis)
FROM torder; 

Возвращает интервал в котором содержатся цены.

STDDEV - стандартное отклонение

Синтаксис:

Описание:

    STDDEV возвращает стандартное отклонение всех значений указанного поля (квадратный корень из дисперсии).

    Пример:

SELECT STDDEV(preis)
FROM torder; 

Стандартное отклонение цен.

VARIANCE - дисперсия значений

Синтаксис

Описание

    VARIANCE вычисляет дисперсию значений указанного поля.

    Пример:

SELECT VARIANCE(preis)
FROM torder;

Дисперсия значений поля preis.

Математические функции

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

СинтаксисОписание
ABS(формула) ABS возвращает сам результат формулы, если он больше нуля, и результат помноженный на (-1), если он меньше нуля.
CEIL(формула) CEIL округляет число или результат вычислений какой либо формулы до следующего челого числа вниз.
HEX(формула) HEX конвертирует результат формулы в шестнадцатиричную систему.
FLOOR(формула) Округляет результат формулы до следующего целого числа.
MOD(формула1, формула2) MOD возращает остаток от деления двух чисел.
ROUND( формула [, Integer ] ) Округляет результат формулы до указанного количества значений после запятой. Если оно не указано, до округляет до целого.
SQRT(формула) SQRT извлекает квадратный корень из числа.
TAN(формула) TAN - тангенс числа.
TRUNC(формула) TRUNC округляет до целого вниз.

Текстовые функции

Здесь вы найдете наиболее важные текстовые функции, которые поддерживаются большинством баз данных SQL.

СинтаксисОписание
LENGTH(формула) Возвращает количество символов в строке.
LEFT( формула , Formel2 ) Извлекает указанное количество символов из указанной строки слева.
RIGHT(формула, Formel2) Извлекает указанное количество символов из указанной строки справa. Formel1.
SUBSTR(формула1, формула2, формула3) Извлекает из указанной строки определенное количество символов с указанной позиции.
TRIM(формула) TRIM усекает пробелы с начала и с конца строки данных.
VALUE(формула) DB2: Конвертирует результат формулы (типа CHAR или VARCHAR) в число.

Функции работы с временем и датами

Здесь вы найдете наиболее важные функции работы с датами и временем, которые поддерживаются большинством баз данных SQL.

СинтаксисОписание
CURRENT Возвращает DATETIME, содержащий текущее время и дату.
DATE(формула) Конвертирует результат формулы в дату.
DAY(формула) Извлекает день месяца из даты.
EXTEND(Datum, [ von TO bis ] ) Определяет разрешение даты или даты/времени.
Пример:
SELECT EXTEND(odatum, MONTH TO YEAR) as time, sum(anz) as orders
 FROM torder
 GROUP BY 1

Количество заказов за месяц.
MDY(формула1, формула2, формула3) Возращает дату построенную из дня месяца, месяца и года.
MONTH(формула) Извлекает номер месяца из даты.
TODAY Возвращает текущее число (дату).
WEEKDAY(формула) Определяет день недели указанной даты.
YEAR(формула) Извлекает год из даты.

Вспомогательные функции

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

СинтаксисОписание
NVL(Поле [, Константа ] ) Заменяет все NULL-значения (пустые поля) заданным значением.
DBSERVERNAME Возвращает имя сервера базы данных.
USER Возвращает имя пользователя, который послал команду SQL базе данных.
SITENAME Возвращает имя сервера базы данных.

Виды на таблицы данных

Что такое реляционные виды на таблицы данных или, как часто используется, представления таблиц данных? Как создавать новые виды на данные (или представления таблиц данных) ? Как удалять виды на таблицы данных? Как изменять виды на таблицы данных?

CREATE VIEW - создать новый вид на таблицу данных

Синтаксис

Описание:

    CREATE VIEW создает новый вид (взгляд) на одну или несколько
    таблиц базы данных в форме новой виртуальной (находящейся в
    только в оперативной памяти) таблицы. В команде CREATE VIEW
    поддерживается, в зависимости от производителя базы данных, только
    часть возможностей команды SELECT.

    Пример:

CREATE VIEW myorders (
my_onum,
my_anz ) AS
SELECT
onum,
anz
FROM torder
WHERE preis > 0;

Создает новый вид на таблицу 'torders', содержащий только поля
'anum' и 'anz' из строк у которых preis>0.

DROP VIEW - удалить вид на таблицу данных

Синтаксис

Описание

    DROP VIEW удаляет вид на таблицы данных созданный до этого CREATE VIEW.

    Пример:

DROP VIEW myorders; 

Удаляет созданный до этого вид на таблицы данных с именем 'myorders'.

Пользовательские процедуры

Что такое пользовательские процедуры ? Как создавать процедуры? Как удалять процедуры? Как изменять процедуры и как их использовать?

CREATE PROCEDURE - создать пользовательскую процедуру

Синтаксис

Описание

    CREATE PROCEDURE создает процедуру базы данных (подпрограмму/функцию) , которая может быть использована в командах SQL или в процедурах и программах.

    Пример:

CREATE PROCEDURE table_drop ( )
DROP TABLE proc_test;
END PROCEDURE; 

Создает процедуру 'table drop', которая удаляет при вызове таблицу 'proc_test'.

DBA

    Указывает на то, что процедура имеет при исполнении привилегии администратора.

    Пример:

CREATE DBA PROCEDURE table_create ( )
CREATE TABLE proc_test (
fid smallint,
ag smallint,
vsnr integer
);
END PROCEDURE; 

Создает процедуру 'table_create' с привилегиями администратора, которая создает при вызове новую таблицу в базе данных 'proc_test'.

REFERENCES { BYTE | TEXT }

    REFERENCES ...

    Пример :

    under contsruction ...

    Создает процедуру '...'.

DEFAULT { Wert | NULL }

    DEFAULT специфицирует значение, которое используется, если в вызове процедуры опущен параметр.

    Пример:

CREATE PROCEDURE square ( par INTEGER DEFAULT 0 )
RETURNING INTEGER;
DEFINE rez INTEGER;
LET rez = par * par;
RETURN rez;
END PROCEDURE;

Cоздает процедуру 'square', у которой единственный параметр 'par' не обязателен и по умолчанию равен нулю. Если эта процедура вызвана без параметров, то она возвращает 0*0 назад, иначе - par*par .

RETURNING { Feldtyp | REFERENCES { BYTE | TEXT } }

    RETURNING указывает на количество и тип значений, которые возвращает процедура.

    Пример:

CREATE PROCEDURE table_insert ( )
RETURNING INT;
DEFINE i INT;
INSERT INTO aam_proc_test ( fid, ag, vsnr )
VALUES ( 1, 2, 3 );
INSERT INTO aam_proc_test ( fid, ag, vsnr )
VALUES ( 0, 9, 9 );
LET i = SELECT COUNT(*) FROM proc_test;
RETURN i;
END PROCEDURE;

Здесь создается процедура 'table_insert', которая добавляет в таблицу 'proc_test' две новых строки данных и возвращает количество строк в этой таблице.

Statement

    Ein SPL-Statement bzw. Befehl, z.B. DEFINE, RETURN, IF, FOR, SET, LET FOREACH, WHILE, usw.

    Пример:

CREATE PROCEDURE table_run ( )
DEFINE i INT;
SET ISOLATION TO dirty read;
SET LOCK MODE to wait 60;
SET PDQPRIORITY 5;
CALL table_drop();
CALL table_create();
LET i = table_insert();
END PROCEDURE;

Создает процедуру 'table_run', которая вызывает некоторые другие процедуры и возвращает результат процедуры 'table_insert'.

Общий пример

    Пример:

CREATE PROCEDURE table_show ( )
RETURNING INT, INT, INT;
DEFINE my_fid, my_ag, my_vsnr INTEGER;
CALL table_run();
FOREACH
SELECT square(fid+1) fid, ag, vsnr
INTO my_fid, my_ag, my_vsnr
FROM proc_test
RETURN my_fid, my_ag, my_vsnr
WITH RESUME;
END FOREACH;
END PROCEDURE;

Создает процедуру 'table_show' , которая возвращает все строки таблицы proc_test, которые она до этого туда записала с помощью процедуры 'table_run'.

DROP PROCEDURE - удалить процедуру

Синтаксис

Описание:

    DROP PROCEDURE удаляет процедуру из базы данных, создананную до этого с помощью команды CREATE PROCEDURE.

    Пример:

DROP PROCEDURE table_show; 

Удаляет процедуру 'table_show' из базы данных.

EXECUTE PROCEDURE - выполнить процедуру

Синтаксис

Описание:

    EXECUTE PROCEDURE запускает процедуру базы данных.

    Пример:

EXECUTE PROCEDURE table_show; 

Запускает процедуру 'table_show'.

Транзакции

Что такое транзакции, как их использовать, начинать и заканчивать?

BEGIN WORK - начать транзакцию

Синтаксис

Описание:

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

COMMIT WORK - закончить транзакцию

Синтаксис

Описание:

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

ROLLBACK WORK - отменить транзакцию

Синтаксис

Описание:

    Обращает все команды одной транзакции вспять. Используется, как правило, в программах, которые имеют возможность опознования ошибок.

Вспомогательные команды

Здесь вы найдете описание различных вспомогательных команд языка SQL.

SET ISOLATION TO - устанавливать уровень изоляции

Синтаксис

    SET ISOLATION TO { DIRTY READ | COMMITTED READ | CURSOR STABILITY | REPEATABLE READ };

Описание:

    SET ISOLATION TO DIRTY READ указывает базе данных не обращать внимания на поставленные другой командой, которая изменяет содержание базы данных, запреты доступа к данным.

SET PDQPRIORITY - устанавливать приоритет предоставления ресурсов

Синтаксис

Описание:

    Ставит приоритет обработки команд SQL на уровень nn. Приоритет ставится базой данных как правило на уровень 0 (без приоритета), если не указано другого.

    Пример:

 SET PDQPRIORITY 5 

Устанавливает приоритет в 5 единиц (маленький приоритет).

SET LOCK MODE TO WAIT - таймоуты

Синтаксис

Описание:

    Устанавливает определенный таймоут (время, которое система ждет освобождения доступа к данным).

    Пример:

SET LOCK MODE TO WAIT 60; 

Ставит таймоут на 60 секунд.

Общая информация и опеределения

Общая информация о синтаксических диаграммах, символах и таблицах использованных в этой книге.

Синтаксические диаграммы, использованные в этом тексте

|

    Вертикальная черта | указывает на то, что в команде SQL может быть использаван лишь один из элементов слева или справа от нее. Эту вертикальную черту не используют в тексте программы.

[ ]

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

{ }

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

( )

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

Нормальный текст

    Слова и имена, написанные нормальными и заглавными буквами, указывают на имена или списки таблиц, на имена или списки полей и т.п.

ТЕКСТ ИЗ ЗАГЛАВНЫХ БУКВ

    Слова, написанные заглавными буквами, указывают на ключевые слова языка SQL.

текст из маленьких букв

    Слова, написанные маленькими буквами, указывают на имена таблиц и полей и используются здесь в примерах.

[...]

    Элементы, стоящие перед [...], могут использоваться многократно.

[,...]

    Все, что стоит перед [,...], может использоваться многократно. Все элементы списка разделяются через запятую.

Использованные в синтаксических диаграммах элементы SQL

( )

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

Синоним

    Синоним это другое имя, которое может быть использовано в тексте команды SQL на месте настоящего имени поля или таблицы.
    Пример:
    mytable1

Поле

    Поле - это имя одного из полей в выбранных таблицах данных.
    Пример:
    preis

Список полей

    Список полей - это список имен полей содержащихся в выбранных таблицах данных, разделенных через запятую.
    Пример:
    onum, preis, anz

Константа

    Константа - это величина, которую может принять соответствующий ей тип данных SQL, например целое число, десятичное число или текст в кавычках.
    Пример:
    'Berlin'

Список констант

    Список констант - это список отдельных констант, разделенных через запятую (см. константа).
    Пример:
    1001, 'Müller', 'Berlin', .12

Таблица

    Таблица - это имя одной из содержащихся в выбранной базе данных таблиц данных.
    Пример:
    torder

Условие

Формула

    Формула - здесь формула, состоящая из функций, констант и полей, соединенных операторами SQL.
    Пример:
    ( (price * prov) - .10 )

Номер

    Номер здесь целое число без запятой.
    Пример:
    17

Использованные в примерах таблицы данных

Таблица tverkauf (продавцы) :


    CREATE TABLE tverkauf (
    vnum INTEGER NOT NULL UNIQUE PRIMARY KEY,
    vname CHAR(40),
    stadt CHAR(40),
    prov DECIMAL );

Таблица tkunden (клиенты) :


    CREATE TABLE tkunden (
    knum INTEGER NOT NULL UNIQUE PRIMARY KEY,
    kname CHAR(40),
    stadt CHAR(40),
    rating INTEGER,
    vnum INTEGER );

Таблица torder (заказы) :


    CREATE TABLE torder (
    onum INTEGER NOT NULL UNIQUE PRIMARY KEY,
    preis DECIMAL(2,30),
    anz REAL,
    odatum DATE,
    knum INTEGER
    vnum INTEGER );

Таблица tposition (Auftragspositionen) :


    CREATE TABLE tposition (
    pnum INTEGER NOT NULL UNIQUE PRIMARY KEY,
    onum INTEGER,
    anum INTEGER,
    menge INTEGER );

Таблица tartikel (Artikel) :


    CREATE TABLE tartikel (
    anum INTEGER NOT NULL UNIQUE PRIMARY KEY,
    name CHAR(40),
    preis DECIMAL(2,30),
    hnum INTEGER );

SQL стандарты

SQL (Structured Query Language) язык опроса данных для реляционных баз данных был изначально опубликован в 1986 году и прошел после этого несколько шагов стандартизации. Следующие пояснения сгруппированы по стантартам и их частям/дополнениям.
  • 1989 - SQL-89, standard SQL, SQL-1
  • 1992 - SQL-92, SQL-2 (ANSI specification X3.135-1992)
      * ANSI X3.135-1992 Database Language SQL (the 1992 standard)
      * ANSI/ISO/IEC 9075-1992 Technical Corrigendum 1 (errata)
      * ANSI/ISO/IEC 9075-3-1995: Part 3: Call-Level Interface (CLI)
    • DDL (Data Description Language): BLOB's, VARCHAR, DATE, TIME, TIMESTAMP, BOOLEAN
    • DML (Data Manipulation Language): OUTER/INNER-Joins, operations on row sets (UNION, CROSS)
    • Transactions: set transaction
    • Cursors:
    • Bindings: Dynamic SQL
    • Domain checks and constraints: DEFAULT, CHECK (beginning of domain concept), basic concepts for refferential integrity (references for primary keys and key candidates)
    • Connections: connect, set connection
    • Catalogs: system tables or system catalog
    • Errors & diagnostics: SQLSTATE, GET DIAGNOSTICS
    • Misc.: cursors, ALTER (altering and dropping), CAST (data type converions)

  • 1999 - SQL-99, SQL-3 (ISO/IEC 9075:1999(E) Information technology - Database languages - SQL)
      * INCITS/ISO/IEC 9075-1 01-Jan-1999 SQL-Part 1: Framework (SQL/Framework)
      * INCITS/ISO/IEC 9075-2 01-Jan-1999 SQL-Part 2: Foundation (SQL/Foundation)
      * INCITS/ISO/IEC 9075-3 01-Oct-1999 SQL-Part 3: Call Level Interface (SQL/CLI)
      * INCITS/ISO/IEC 9075-4 01-Jan-1999 SQL-Part 4: Persistent Stored Modules (SQL/PSM)
      * INCITS/ISO/IEC 9075-5 01-Jan-1999 SQL-Part 5: Host Language Bindings (SQL/Bindings)
    • Framework:
    • DDL (Data Description Language): Time-Series-Data, User defined types (UDT), roles
    • DML (Data Manipulation Language): recursive queries
      Intermediate Level - CASCADE DELETE
      Full Level - CASCADE UPDATE
    • Transactions:
    • Cursors:
    • Bindings: Precompilers, embedded and dynamic SQL, OLB (Object Language Bindings) with SQLJ for Java
    • Domain checks and constraints: triggers
      Full Level - Subquery in CHECK, Assertions, DEFERRED
    • CLI (Callable Level Interface): ODBC, JDBC, OLE DB
    • PSM (Persistent Storage Modules): stored Procedures
    • Mediums: Management of external data

    • 2003 - SQL-2003
      • DDL (Data Description Language): MULTISET, generated attibutes (derived from other attributes), identity attributes (automatic generation of primary keys)
      • DML (Data Manipulation Language): table functions (table generation in functions), TABLESAMPLE, MERGE command
      • SQL/Schemata: information and definition schemas
      • SQL/XML: XML-related Specifications
      • SQL/MED (Mediums): access to external data

    • Categories: 

      Ссылки на документацию производителей баз данных

      Коммерческие базы данных:

      Open Source:

      Categories: 

      Копирайт и гражданская ответственность

      Copyright © 2004 Андрей Мюллер. Этот объект является open source. Вы можете копировать, распространять и/или модифицировать его следуя положениям лицензии Universal General Public License (UGPL).

      Вот некоторые важные части UGPL:

      Distribution Concerns

      You may not copy, modify, sublicense, or distribute the Object except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the object is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

      USAGE

      BECAUSE THE OBJECT IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE OBJECT, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE OBJECT IS WITH YOU. SHOULD THE OBJECT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

      DAMAGES AND LOSSES

      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE OBJECT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE OBJECT (INCLUDING BUT NOT LIMITED TO LOSSES OF MONEY AND/OR INVESTMENTS OR INPUT BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE OBJECT TO OPERATE WITH ANY OTHER OBJECT), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

      Старую версию SQL-руководства можно скачать здесь: http://aam.ugpl.de/node/1141