Смекни!
smekni.com

Информационные системы 3 (стр. 7 из 14)

ФИО Муж Жена ФИО Сын Дочь
Иванов NIL Иванова Сидоров Ирина
Сидоров NIL Сидорова Кирсанов Михаил
Петрова Петров NIL
Кирсанов NIL Кирсанов ФИО Внук Внучка
Петухов NIL Петухова Петрова Сергей
Кирсанов Юлия

Рис. 5.2. Реляционная база данных, состоящая из 3-х таблиц

Реляционная БД - это БД в которой:

- данные воспринимаются пользователем как таблицы и только как таблицы;

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

Например, имеется БД из одной таблицы, в которой 3 столбца и 4 строки:

Таблица "Винный погреб"

Сорт Год Количество_бутылок
Каберне 80 12
Рислинг 89 14
Изабелла 80 28
Мадера 77 1

С помощью специальных операторов выделим из этой таблицы:

а) подмножество строк

SELECT Сорт, Год, Количество_бутылок FROM Винный_погреб WHERE Год = 80;

В результате получаем:

Сорт Год Количество_бутылок
Каберне 80 12
Изабелла 80 28

б) подмножество столбцов

SELECT Сорт, Количество_бутылок FROM Винный_погреб


В результате получаем:

Сорт Количество_бутылок
Каберне 12
Рислинг 14
Изабелла 28
Мадера 1

Оба результата являются таблицами, а операторы SELECT - это операторы языка запросов к БД, называемого SQL (Structured Query Language – Язык структурированных запросов).

5.1. Учебная БД

Учебная БД состоит из 3 таблиц.

1) Таблица поставщиков товаров "S".

nomer familia kapital gorod
S1 Смит 20 Лондон
S2 Джонс 10 Париж
S3 Блейк 30 Париж
S4 Кларк 20 Лондон
S5 Адамс 30 Саров

2) Таблица деталей, которые они поставляют "P".

nomer nazvan zvet ves gorod
P1 Гайка Красный 12 Лондон
P2 Болт Зеленый 17 Париж
P3 Винт Голубой 17 Рим
P4 Винт Красный 14 Лондон
P5 Кулачок Голубой 12 Париж
P6 Блюм Красный 19 Лондон

3) Таблица поставок (какой поставщик, какие детали поставляет) "SP".

nomer_s nomer_p kol
S1 P1 300
S1 P2 200
S1 P3 400
S1 P4 200
S1 P5 100
S1 P6 100
S2 P1 300
S2 P2 400
S3 P2 200
S4 P2 200
S4 P4 300
S4 P5 400

S - поставщики. Каждый поставщик имеет уникальный номер, фамилию (не обязательно уникальную), капитал и местонахождение.

P - детали (их виды). Каждый вид детали имеет уникальный номер, название, цвет, вес и город, где хранится этот вид детали. Каждый вид имеет только один вид и вес и хранится на складе только одного города (упрощение).

SP - поставки деталей. Связывает между собой две предыдущие таблицы.

Например, первая строка связывает поставщика S1 (Смит) с деталью P1 (гайка), т.е. означает поставку трехсот деталей вида P1 поставщиком S1.

Пусть для любого поставщика имеется только одна поставка детали некоторого вида, т.е. пара (nomer_s, nomer_p) является уникальной.

На этом примере отметим несколько важных для РБД обстоятельств:

1) Значения данных во всех клетках таблицы являются одиночными, а не множествами, поэтому в таблице SP имеем:

S2 P1

S2 P2

а не так:

S2 {P1, P2}

2) В каждом столбце хранятся данные только одного типа.

3) БД представляется только в виде явных значений данных. Не существует никаких явных связей и указателей, соединяющих одну таблицу с другой. Связь представляется не с помощью указателя, а значениями клеток в таблицах.

4) Строки в таблицах не требуют никакого упорядочивания.

5) Редко возникают ситуации, когда упорядочение столбцов является существенным. Порядок столбцов в РБД, как правило, не имеет значения.

5.2. Создание таблиц

Структура БД определяется оператором CREATE.

CREATE TABLE S (

nomer CHAR(5),

familia CHAR(20),

kapital SMALLINT,

gorod CHAR(15) );

CREATE TABLE P (

nomer CHAR(6),

nazvanie CHAR(20),

zvet CHAR(7),

ves SMALLINT,

gorod CHAR(15) );

CREATE TABLE SP (

nomer_s CHAR(5),

nomer_p CHAR(6),

kol INTEGER );

Это операторы создания таблиц языка SQL. Они создают имена таблиц, столбцов и типы данных для этих столбцов.

Оператор CREATE, как и все операторы SQL, выполняемый. Как только СУБД его исполнит, появится таблица, которая будет пустой, т.е. будет содержать лишь заголовки столбцов. Для наполнения таблиц есть другие операторы.

5.3. Типы данных в БД

1. Символьный - CHAR(<длина>). Длина <= 32767.

2. Целочисленный со знаком

а) INTEGER <= | 2 147 483 647 |

б) SMALLINT <= | 32767 |

3. Действительное число - FLOAT

Содержит 7 значащих десятичных цифр (доверительные).

1.175494351E-38 - самое маленькое

3.402823446E+38 - самое большое

4. Дата – DATE. 1 янв 100 ... 29 фев 32768

Тема 6. Выборка данных из БД

Пример по учебной БД: Выбрать номера и капиталы всех поставщиков из Парижа.

Выборка данных делается с помощью оператора SELECT.

SELECT nomer, kapital FROM S WHERE gorod='Париж'

Результат:

nomer kapital
S2 10
S3 30

Общий, но не полный вид оператора SELECT.

SELECT [DISTINCT] <список элементов> FROM <список таблиц>

[WHERE <условия>]

[GROUPBY <список столбцов>]

[ORDERBY <список сортировки>]

Серия примеров.

1. Простая выборка. Выбрать номера всех поставляемых деталей.

SELECT nomer_p FROM SP

Результат:

nomer_p
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5

2. Выборка с исключением дубликатов.

SELECT DISTINCT nomer_p FROM SP.

Результат:

nomer_p
P1
P2
P3
P4
P5
P6

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

SELECT nomer, kapital*30 FROM S

Результат:

nomer COLUMN2
S1 600
S2 300
S3 900
S4 600
S5 900

Части SELECT и WHERE могут содержать арифметические выражения и константы.

SELECT nomer, 'Капитал в рублях =', kapital*30 FROM S

Результат:

nomer COLUMN2 COLUMN3
S1 Капитал в рублях = 600
S2 Капитал в рублях = 300
S3 Капитал в рублях = 900
S4 Капитал в рублях = 600
S5 Капитал в рублях = 900

4. Выборка всех столбцов. Выбрать все сведения обо всех поставщиках.

SELECT * FROM S

Результат: копия таблицы S.

Этот оператор эквивалентен по своему действию оператору:

SELECT nomer, familia, kapital, gorod FROM S.

Звездочка ("*") обозначает список всех столбцов в таблице(ах), указанных в части FROM в том порядке, в котором эти столбцы заданы в операторе CREATE TABLE. Звездочка может дополняться именем таблицы.

SELECT S.* FROM S

5. Ограниченная выборка. Выбрать номера поставщиков из Парижа, капитал которых больше 20.

SELECT nomer FROM S WHERE (kapital>20) AND (gorod='Париж')

Результат:

nomer
S3

Условие части WHERE может включать в себя

- операции сравнения: =, <>, >, >=, <=, <;

- двоичной алгебры: AND, OR, NOT;

- операции принадлежности: IN, NOT IN;

- операции похожести: LIKE;

- скобки: ( ).

6. Выборка с упорядочением. Выбрать номера и капиталы поставщиков из Парижа в порядке убывания их состояния (размера капитала).

SELECT nomer, kapital FROM S WHERE gorod='Париж' ORDER BY kapital DESC

ASC - упорядочение по возрастанию значений (по умолчанию).

DESC - упорядочение по убыванию значений.

Каждый столбец, упомянутый в части ORDER BY должен присутствовать в результирующей таблице, поэтому, например, такой оператор недопустим:

SELECT nomer FROM S ORDER BY gorod;

Правильно будет:

SELECT nomer, gorod FROM S ORDER BY gorod;

7. Выборка с применением принадлежности (IN). Выбрать детали, вес которых равен: 12, 16, 17.

SELECT * FROM P WHERE ves IN (12, 16, 17);

Результат:

nomer nazvan zvet ves gorod
P1 Гайка Красный 12 Лондон
P2 Болт Зеленый 17 Париж
P3 Винт Голубой 17 Рим
P5 Кулачок Голубой 12 Париж

8. Выборка с применением похожести (LIKE). Выбрать все детали, название которых начинается с буквы 'в'.

SELECT * FROM P WHERE nazvan LIKE 'в%';

Результат:

nomer nazvan zvet ves gorod
P3 Винт Голубой 17 Рим
P4 Винт Красный 14 Лондон

Общий вид оператора похожести: <имя столбца> LIKE <строковая константа>