- •1. Введение
- •2 Создание базы данных
- •2.1 Реляционные базы данных
- •2.2 Определение таблиц, домены.
- •3 Извлечение данных
- •3.1 Извлечение информации из одной таблицы.
- •3.2 Группировка данных и агрегатные функции.
- •3.3 Соединение таблиц
- •3.6 Представления
- •4.1 Изменение данных основных таблиц.
- •4.2 Изменение данных представлений.
1. Введение
Язык SQL (Structured Query Language — структурированный язык запросов) был разработан в 1970 г. компанией ЮМ как язык для работы с реляционными базами данных. К настоящему времени язык стал стандартным языком, который поддерживается практическими всеми системами управления базами данных как основанными на архитектуре клиент/сервер (например, Microsoft SQL Server, Oracle, Sybase) так и системами, расчитанными, в основном, на небольшие базы данных (Fox Pro, Paradox). Более того, удобство языка SQL привело к тому, что наблюдается тенденция осуществлять с его помощью доступ даже к таким данным (например, с помощью технологии OLE DB), которые обычно обрабатывались иными методами: к электронной почте, к файловой системе, к всевозможным системным журналам и т.д.
Язык SQL не является универсальным языком программирования, например, в SQL отсутствуют управляющие конструкции (циклы, условные операторы). По сути дела, язык состоит только из операторов выборки, изменения данных, и управления правами доступа. Традиционно, весь язык SQL разделяется на три части: язык определения данных DDL (data definition language), язык манипулирования данными DML (data manipulation language) и язык управления данными DCL (data control language). К DDL относятся операторы работы со схемой базы данных, к DML — операторы выборки и изменения данных таблиц, не изменяющие схему, язык DCL состоит, в основном, из операторов управления транзакциями и назначения прав доступа.
Для того, чтобы язык SQL можно было использовать для реального программирования, его либо расширяют добавляя новые операторы, либо операторы SQL используют в программах на других языках программирования. В первом случае получаются всевозможные диалекты SQL, специфические для каждой системы управления базами данных (например, в Microsoft SQL Server соответствующий язык называется Transact-SQL, в Oracle — PL/SQL). Во втором случае, используются различные технологии, позволяющие обращаться к базам данных, такие как встроенный SQL (Embedded SQL), ODBC, OLE DB.
В 1986 г. американским национальным институтом стандартов (ANSI) был принят первый стандарт языка SQL. С тех нор стандарт языка SQL постоянно совершенствуется, а производители систем баз данных стремятся сделать свои продукты как можно более точно соответствующими этому стандарту. Мы описывая элементы языка SQL будем следовать стандарту SQL'92 и более поздним.
2 Создание базы данных
2.1 Реляционные базы данных
Реляционная база данных в классическом виде представляет собой конечный набор конечных таблиц (отношений). Другие модели представления данных — иерархические и сетевые — легко представляются в виде отношений. Каждая таблица имеет имя и постоянный набор столбцов (полей), причем в каждом столбце могут храниться данные только одного типа, например, только целые числа или только даты. Некоторые системы управления базами данных позволяют хранить в таблицах другие таблицы, однако во-первых, пока это скорее исключение, чем правило, во-вторых, при такой организации возможно хранение избыточной информации, в третьих, это сильно усложняет язык запросов (что будет показано в одной из следующих глав). Таким образом, подобная организация данных имеет больше недостатков, чем достоинств, поэтому в большинстве случаев нежелательна. Как мы увидим в следующем небольшом примере, этого легко можно избежать.
Пример 1 Информацию о книгах в библиотеке можно хранить в такой таблице:
Code |
author |
title |
city |
publishing |
year |
|
|
|
|
| |
6470234 |
Ope 0. |
Теория графов |
М. |
Наука |
1968 |
То есть, в первый столбец записывается внутренний кодовый номер книги в библиотеке, во второй — информация об авторах, в третий — название и т.д. В данном примере, столбец author содержит для каждой книги имя и другие сведения об авторе. Но поскольку авторов часто бывает несколько, то для каждой книги этот столбец должен содержать таблицу, в которой хранится информация о каждом из авторов:
code |
author |
… | ||||||
… | ||||||||
6479235 |
|
l_ name |
f name |
inst |
pos |
|
… | |
Boolos |
George |
M.I. T. |
Prof. | |||||
Jeffrey |
B.ichard |
Princeton |
Prof. | |||||
… |
Вместо этого можно просто создать еще одну основную таблицу, где хранить сведения об авторах:
code |
1 пате |
f name |
inst |
pos |
6479235 |
Boolos |
George |
M.I. T. |
Prof. |
6479235 |
Jeffrey |
Richard |
Princeton |
Prof. |
Надобность в столбе author в первой таблице теперь отпадает. Точно так же, если мы хотим для каждой книги указать ключевые слова, пользуясь которыми можно быстро находить книги по нужной теме, то вместо т.ого, чтобы, вставлять в таблицу с книгами в каждую строку еще таблицу с ключевыми словами, можно просто добавить еще такую основную таблицу:
code |
keyword |
rank |
… | ||
6479234 |
граф |
100 |
6479234 |
порядок |
50 |
6479234 |
группа |
10 |
… |
В первом столбце хранятся те же номера, что и в первом столбце предыдущей таблицы, во втором - ключевое слово, в третьем - степень соответствия книги ключевому слову.
Задача 1 (Библиотека) Постройте таблицы, в которых можно хранить информацию о читателях (имя, адрес, телефон, e-mail), и о выдаваемых им книгах.
Задача 2 (CD) Постройте таблихщ для хранения сведений о ком-пахт дисках (фирма-производитель, номер, серия, композитор, исполнители, треки и т.д.)
Давая задачи, мы будем использовать 4-5 различных баз данных, в скобках будет указываться база данных, к которой относится задача.