Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Реляционный способ доступа к данным. Язык SQL.


Автор: Pakshin A. S. 2.11.2004, 16:49
Реляционный способ доступа к данным основывается на операциях с группами записей. Для задания операций используются средства языка структурированных запросов – SQL (Structured Query Language), поэтому реляционный способ доступа к данным называется также SQL-ориентированным.
Основным достоинством реляционного способа доступа является небольшая загрузка сети, поскольку передаются только запросы и результат их выполнения.

ОСНОВНЫЕ СВЕДЕНИЯ О ЯЗЫКЕ SQL
Язык SQL ориентирован на выполнение действий с таблицами БД и данными в этих таблицах, а также некоторых вспомогательных действий. Составленную на языке SQL программу также называют SQL-запросом.
В дальнейшем при описании операторов языка мы будем опускать несущественные операнды и элементы, используя для обозначения отдельных элементов символы  < >, а необязательные конструкции заключать в квадратные скобки. Зарезервированные слова будут писаться строчными, а имена – прописными буквами. Регистр букв не влияет на интерпретацию операторов языка. Элементы в списках, например, имена полей и таблиц, должны быть разделены запятой.
В SQL-запросе допускаются комментарии, поясняющие текст программы. Комментарий ограничивается символами /* и */

ФУНКЦИИ ЯЗЫКА
Вот некоторые, наиболее употребляемые функции
1) Агрегатные функции:
AVG() – среднее значение
MAX() – максимальное значение
MIN() – минимальное значение
SUM() – сумма
COUNT() – количество значений
COUNT(*) – количество ненулевых значений
2) Функции для работы со строками
UPPER(Str) – переход к верхнему регистру
LOWER(Str) – переход к нижнему регистру
TRIM(Str) – удаление пробелов в начале и конце строки
SUBSTRING(Str FROM n1 TO n2) – выделение подстроки начиная с позиции n1 и заканчивая позицией n2
CAST(<Expression> AS <Type>) – приведение выражения к типу
3) Функции декодирования даты и времени
EXTRACT(<Элемент> FROM <Выражение>) – из выражения извлекается значение, соответствующее элемента. Элемент может содержать: YEAR, MONTH, DAY, HOUR, MINUTE или SECOND

СОЗДАНИЕ И УДАЛЕНИЕ ТАБИЦЫ
Для создания таблиц служит оператор CREATE TABLE:
Код

CREATE TABLE <Имя таблицы>
 (<Имя поля> <Тип данных>,
 …
 <Имя поля> <Тип данных>);

В SQL-запрос должен входить минимум одно поле с соответствующим типом данных!
Типы данных: 
SMALLINT
INTEGER
DECIMAL(X, Y)
NUMERIC(X, Y)
FLOAT(X, Y)
CHARACTER(N)
VARCHAR(N)
DATE
BOOLEAN
BLOB(N, 1)
BLOB(N, 2)
BLOB(N, 3)
BLOB(N, 4)
BLOB(N, 5)
TIME
TIMESTAMP
MONEY
AUTOINC
BYTES(N)

Пример запроса:
Код

CREATE TABLE Demo
(Number INTEGER,
Name VARCHAR(20),
BirthDay DATE);


Для удаления таблицы предназначен оператор:
Код

DROP TABLE <Имя таблицы>;

Пример:
Код

DROP TABLE Demo;


ИЗМЕНЕНИЕ СОСТАВА ТАБЛИЦЫ
Изменение состава полей таблицы выполняется оператором:
Код

ALTER TABLE <Имя таблицы>
ADD <имя поля> <тип данных>,
DROP <имя поля>,
…;

Операнд ADD добавляет в таблице новое поле, а операнд DROP удаляет из таблицы поле.
Пример:
Код

ALTER TABLE Demo
ADD Section SMALLINT,
ADD Note VARCHAR(30),
DROP position;


СОЗДАНИЕ И УДАЛЕНИЕ ИНДЕКСА
Индекс обеспечивает быстрый доступ к данным, хранимым в поле, для которого создан.
Индекс создается оператором:
Код

CREATE INDEX
<Имя индекса> ON <Имя таблицы> (<Имя поля>, …, [<Имя поля>]);

Пример:
Код

CREATE INDEX
indNamePostition ON Demo (Name, Position);

Для удаления индекса используется:
Код

DROP INDEX
<Имя таблицы>.<Имя индекса>;

Пример:
Код

DROP INDEX
Demo.indNamePosition;


ОТБОР ДАННЫХ ИЗ ТАБЛИЦ
Отбор данных из таблиц заключается в получении из них полей и записей, удовлетворяющих заданным условиям. Результат выполнения запроса, на основании которого отбираются записи, называется выборкой. Данные можно выбирать из одной или нескольких таблиц с помощью оператора SELECT:
Код

SELECT [DISTINCT] {* | <Список полей>}
FROM <Список таблиц>
[WHERE <Условие отбора>]
[ORDER BY <Список полей для сортировки>]
[GROUP BY <Список полей для группирования>]
[HAVING <Условия группировки>]
[UNION <Вложенный оператор SELECT>];

Теперь всё постепенно…
Управление полями.
Пример отбора всех полей в таблице:
Код

SELET * FROM Demo;

Пример отбора только нескольких полей из таблицы:
Код

SELECT Name, Note
FROM Demo;

Также в запрос могут входить и вычисляемые поля:
Код

SELECT Name, Code*2
FROM Demo;

Таким образом, мы получим поле Name и новое поле, созданное на основе данного Code*2, при этом ни состав, ни данные в таблице изменены не будут.
Также к какому-либо полю можно присоединить символ при помощи конкатенации (||):
Код

SELECT “- “ || Name
FROM Demo;

Таким образом, получаем при выводе «- Name», где Name – значение поля Name в таблице Demo.
Записи могут иметь одинаковые значения некоторых полей. Для избежания повторений при выводе используется перед списком полей описатель DESTINCT:
Код

SELECT DISTINCT Position
FROM Demo;

Ещё одним достоинством SQL является простота объединения в результирующем наборе данных, содержащихся в нескольких таблицах. Для этого используется список таблиц:
Код

SELECT * FROM Demo1, Demo2;

или
Код

SELECT Demo1.*, Demo2.* FROM Demo1, Demo2;

Простое условие отбора записей.
На практике набор данных обычно ограничивается записями, удовлетворяющими каким-либо определенным условиям (критериям) отбора, задаваемым с помощью операнда WHERE. 
Критерий отбора представляет собой логическое выражение, в котором можно использовать операции:
1) Сравнение
 = - равно
 > - больше
 < - меньше
 >= - больше или равно
 <= - меньше или равно
 <> или != - не равно
 !> - не больше
 !< - не меньше
2) LIKE – сравнение по шаблону
3) IS NULL – проверка на нулевое значение
4) IN – проверка на вхождение
5) BETWEEN – проверка на вхождение в диапазон
Пример простого запроса с отбором
Код

SELECT Name
FROM Demo
WHERE Salary >= 4000;

Здесь продемонстрирован пример выбора по числовому полю
Пример выбора по символьному полю:
Код

SELECT *
FROM Demo
WHERE Name = ‘Кто-то’;

Для проверки нулевого значения выражения служит операция IS NULL, которая имеет следующий формат:
Код

<Выражение> IS [NOT] NULL

Пример:
Код

SELECT *
FROM Demo
WHERE Price IS NULL

Проверка на вхождение выражения в список выполняется с помощью операции IN следующего формата:
Код

<Выражение> [NOT] IN <Список значений>

Пример:
Код

SELECT *
FROM Demo
WHERE LOWER(Name) IN (‘кто-то’, ‘somebody’);

В этом запросе приведен пример работы со встроенной функцией приведения строки к нижнему регистру LOWER().
Операция BETWEEN выполняет проверку вхождения в диапазон и имеет форма:
Код

<Выражение> [NOT] BETWEEN <Минимальное значение> AND <Максимальное значение>

Пример:
Код

SELECT *
FROM Demo
WHERE BirthDay BETWEEN ’21.5.01’ AND ’27.5.01’;

Сложные критерии выбора.
Сложный критерий состоит из: простых условий, логических операций( AND – логическое и, OR – логическое или, NOT – логическое не) и круглых скобок.
Пример:
Код

SELCT * 
FROM Demo
WHERE (LOWER(Name) IN (‘кто-то’, ‘somebody’)) AND (BirthDay BETWEEN ’21.5.01’ AND ’27.5.01’);

Группировка записей.
Записи результирующего набора могут быть сгруппированы по некоторому признаку. Группу образую записи с одинаковыми значениями в полях, перечисленных в списке операнда GROUP BY. Группирование записей автоматически исключает повтор значений в полях, заданных для группировки. Совместно с операндом GROUP BY можно использовать операнд HAVING, с помощью которого задаются дополнительные условия группировки (сравнимо с WHERE).
Пример:
Код

SELECT * 
FROM Demo
WHERE BirthDay BETWEEN ’21.5.01’ AND ’27.5.01’
GROUP BY Name;

Сортировка записей.
Сортировка представляет собой упорядочивание записей по возрастанию или по убыванию значений полей. Список полей, по которым выполняется сортировка, указывается в операнде ORDER BY. Для указания обратной сортировки по какому-либо полю нужно указать после имени соответствующего поля описатель DESC.
Пример:
Код

SELECT *
FROM Demo
ORDER BY Name;


РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
Редактирование записей представляет собой изменение значений полей в группе записей. Оно выполняется оператором UPDATE:
Код

UPDATE <Имя таблицы>
SET <Имя поля> = <выражение,

<Имя поля> = <выражение>
[WHERE <Условие  отбора>]
Пример:
[code=sql]
UPDATE Demo
SET Name = ‘asdf’
WHERE LOWER(Name) = ‘кто-то’;


ВСТАВКА ЗАПИСЕЙ
Вставка записей осуществляется  с помощью оператора INSERT, который позволяет добавлять к таблицам одну или несколько записей:
Код

INSERT INTO <Имя таблицы>
[(<Список полей>)]
VALUES (<Список значений>);

Пример:
Код

INSERT INTO Demo
(Name, Note)
VALUES (‘Кто-то1’, ‘BlaBlaBla’);


УДАЛЕНИЕ ЗАПИСЕЙ
Для удаления группы записей используется оператор DELETE:
Код

DELETE FROM <Имя таблицы>
[WHERE <Условие отбора>];

Пример:
Код

DELETE FROM Demo
WHERE LOWER(Name) = ‘кто-то’;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)