
- •Sql на практике введение
- •1. История развития языка sql
- •Sql в коммерческих реализациях
- •Стандартизация sql
- •Международный стандарт 1989 г.
- •Международный стандарт 1992 г. (sql2)
- •Стандарт sql:1999 (sql3)
- •Стандарт sql:2003
- •2. Sql в примерах
- •I. Простые запросы на языке sql
- •Примеры
- •II. Использование функций
- •1. Агрегатные функции
- •2. Строковые функции
- •III. Запросы, использующие соединения
- •IV. Группирование
- •V. Построение внешнего соединения и представления
- •VI. Подзапросы
- •Некоррелированные подзапросы
- •Коррелированный подзапросы
- •VIII. Обьеденение
- •IX. Оператора манипулирования данными. Удаление данных
- •X. Оператора манипулирования данными. Вставка данных
- •XI. Операторы манипулирования данными. Обновление данных
- •3. Практические советы
- •1. Хорошо знайте свои данные и бизнес-приложение
- •2. Тестируйте свои запросы на реалистических данных
- •3. Внимательно относитесь к использованию индексов на таблицах
- •4. Для фильтрации записей используйте where, а не having.
- •5. Минимизируйте число просмотров таблиц
- •6. Избыточность полезна
- •7. Где возможно, избегайте использования соединений
- •8. Если это неизбежно, соединяйте таблицы в правильном порядке
- •9. Старайтесь писать как можно более простые и «тупые» операторы sql
Стандарт sql:1999 (sql3)
Незадолго до завершения работ по определению стандарта SQL2 была начата разработка стандарта SQL3. Реально работу над новым стандартом удалось частично завершить только в 1999 г., и по этой причине (а также в связи с проблемой 2000 года) стандарт получил название SQL:1999.
1999 г. были приняты пять первых частей стандарта SQL:1999. Первая часть (SQL/Framework) посвящена описанию концептуальной структуры стандарта: приводится развернутая аннотация следующих четырех частей.
Вторая часть SQL:1999 (SQL/Foundation) образует базис стандарта. Вводится система типов языка, формулируются правила определения функциональных зависимостей и возможных ключей, определяются синтаксис и семантика основных операторов SQL:
операторов определения и манипулирования схемой базы данных;
операторов манипулирования данными;
операторов управления транзакциями (расширенные модели транзакций, контрольные точки, многозвенные транзакций);
операторов управления подключениями к базе данных и т. д.
Третью часть занимает уточненная по сравнению с SQL/92 спецификация SQL/CLI. В четвертой части специфицируется SQL/PSM - синтаксис и семантика языка определения хранимых процедур (стандарт синтаксиса триггеров и процедур). Наконец, в пятой части - SQL/Bindings - определяются правила связывания SQL для стандартных версий языков программирования FORTRAN, COBOL, PL/1, Pascal, Ada, C и MUMPS.
В стандарт SQL:1999 не вошли и существуют в виде отдельных стандартов:
стандарт управления распределенными транзакциями (SQL/Transaction);
стандарт поддержки темпоральных свойств данных (SQL/Temporal);
стандарт управления внешними данными (SQL/MED);
поддержка оперативной аналитической обработки (SQL/OLAP).
Стандарт sql:2003
Кроме исправления некоторых неточностей допущенных в SQL:1999, стандарт SQL:2003 внес ряд новшеств:
Изменена структура организации стандарта (часть SQL/Bindings объединена с SQL/Foundation, новые части SQL/Schemata, SQL/JRT (Java) и SQL/XML);
Изменения в системе типов данных (исключена поддержка битовых строк BIT и BIT VARYING, добавлен конструктор типов мультимножеств (MULTISET), новый тип BIGINT и тип XML);
Табличные функции (возвращают на выходе таблицу);
Расширенные возможности оператора CREATE TABLE (создание подобных уже существующим таблиц (LIKE) или частичный экспорт структуры (AS);
Генераторы последовательностей (sequence generators);
Идентифицирующие столбцы (identity columns) и генерируемые столбцы (generated columns);
Оператор MERGE для обновления базы (объединение шагов INSERT и UPDATE при обновлении одной таблицы ил другой);
2. Sql в примерах
Далее приведены примеры использования SQL для решения типичных задач. Общая схема примеров по каждой теме следующая: ставится содержательная задача, предлагается запись запроса на языке SQL, дается результат запроса. При необходимости поясняются конструкции языка SQL и делаются другие замечания методического характера, способствующие усвоению материала.
Будем исходить из того, что в нашем распоряжении имеется база данных (точнее схема базы данных) поставщиков, деталей и поставок, таблицы которой описаны следующим образом:
Таблица поставщиков S:
Create table S (n_post char(5) not NULL,
name char(20),
reiting smallint,
town char(15))
Таблица деталей Р:
Create table P (n_det char(6) ,
name char(20),
cvet char(7),
ves smallint,
town char(15))
Таблица поставок SP:
Create table SP (n_post char(5) ,
n_det char(6),
date_post date,
kol smallint)
Замечания. Структура приведенной базы данных максимально упрощена: в таблицах отсутствуют ограничения, первичные ключи и пр. Сделано это осмысленно, поскольку предметом данного методического пособия является изучение основ языка SQL, а не принципов проектирования реляционных баз данных.
Содержание таблиц базы данных следующее:
Таблица поставщиков (S)
Hомеp_поставщика |
Фамилия |
Рейтинг |
Гоpод |
S1 |
Смит |
20 |
Лондон |
S2 |
Джонс |
10 |
Париж |
S3 |
Блейк |
30 |
Париж |
S4 |
Кларк |
20 |
Лондон |
S5 |
Адамс |
30 |
Атенс |
Таблица деталей (P)
Номер детали |
Название |
Цвет |
Вес |
Гоpод |
P1 |
Гайка |
Красный |
12 |
Лондон |
P2 |
Болт |
Зеленый |
17 |
Париж |
P3 |
Винт |
Голубой |
17 |
Рим |
P4 |
Винт |
Красный |
14 |
Лондон |
P5 |
Кулачок |
Голубой |
12 |
Париж |
P6 |
Блюм |
Красный |
19 |
Лондон |
Таблица поставок (SP)
Номер поставщика |
Номер детали |
Дата поставки |
Количество |
S1 |
P1 |
01.02.2005 |
300 |
S1 |
P2 |
05.04.2005 |
200 |
S1 |
P3 |
12.05.2005 |
400 |
S1 |
P4 |
15.06.2005 |
200 |
S1 |
P5 |
22.07.2005 |
100 |
S1 |
P6 |
13.08.2005 |
100 |
S2 |
P1 |
03.03.2005 |
300 |
S2 |
P2 |
12.06.2005 |
400 |
S3 |
P2 |
04.04.2005 |
200 |
S4 |
P2 |
23.03.2005 |
200 |
S4 |
P4 |
17.06.2005 |
300 |
S4 |
P5 |
22.08.2005 |
400 |