Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

FireBird. Установка, разработка баз данных, реализация запросов. Методические указания

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
867 Кб
Скачать

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

Пример:

Update barja set

name = ’ Fortune’ where name = ’Kaluga’;

Удаление данных в таблице осуществляется с помощью оператора delete.

Общий вид оператора приведен ниже.

Delete from < имя таблицы> [where <условие>]

Оператор удаляет строки из таблицы. Если фраза where опущена,

удаляются все строки, но таблица остается.

Drop barja – удаляет таблицу полностью.

Приведенный ниже оператор удаляет из таблицы только одну строку,

удовлетворяющую заданному условию:

Delete from barja where name = ’ Fortune’

3.5 Оператор запросов select

Данный оператор реализует всевозможные запросы к БД. Один оператор select заключает в себе все операции реляционной алгебры.

Общий вид оператора select:

Select [all | distinct] * | < список столбцов >

From < список таблиц >

31

[ where < условие выборки или соединения > ] [ group by < список группируемых столбцов > [ having < условие отбора групп > ] ]

[ order by < список сортируемых столбцов > ]

Фраза all означает, что в результирующее отношение войдут все строки, в

том числе дубликаты. Фраза distinct означает, что дубликаты будут исключены из результирующего отношения. По умолчанию в операторе используется фраза all.

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

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

многотабличных запросах используются составные имена и псевдонимы:

<имя таблицы или псевдоним >.< имя столбца >

Например: sotrudnik . tab_nomer

Короткий псевдоним упрощает обращение к столбцу. Он задается во фразе from.

Фраза where для однотабличных запросов содержит условие выборки строк, т.е. таким образом реализуется операция реляционной алгебры -

выборка. При этом в результирующее отношение будут включены только те строки, которые удовлетворяют заданному условию.

Вмноготабличных запросах все исходные таблицы сначала соединяются

вединую таблицу. Условие соединения задается во фразе where. Здесь же может стоять и условие отбора строк.

32

Фраза group by используется для группировки строк с одинаковыми

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

подвести итоги (например, найти сумму значений некоторого столбца).

Фраза having используется только совместно с фразой group by. Она

позволяет фильтровать группы, т.е. включать в результирующее отношение

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

Фраза order by используется для упорядочения строк результирующего

отношения.

Порядок следования фраз в операторе имеет значение.

Пример:

Приказ о назначении на судно

Номер ПК1 Дата Табельный номер сотрудника ВК1

Наименование пас.судна

ВК2

Наименование буксира

ВК3

Наименование баржи

ВК4

Сотрудник

Табельный номер ПК ФИО Дата рождения Адрес

Sotrudnik (Tab_nomer, FIO, Dr Date, Adres)

Prikaz2

(Nomer,

Data,

Tab_nomer,

Name_sudno_Pas,

Name_sudno_Barja, Name_sudno_Buksir)

1)выборка всех строк и столбцов. Вывести всю информацию о

сотрудниках

Select *

from Sotrudnik;

2)выборка отдельных столбцов. Вывести фамилии сотрудников.

Select FIO

from Sotrudnik;

33

Условия во фразе where можно задать следующими способами:

->, < , >= , <= , = , <>

-для числовых столбцов и столбцов типа дата можно проверить принадлежность интервалу:

Between A and B (если принадлежит);

Not between A and B (если не принадлежит).

-проверить принадлежность множеству: In (< множество >);

Not in (< множество >).

-соответствие шаблону

Like (< шаблон >);

Not like (< шаблон >).

-Проверка пустых значений

Is null или not null

Пример:

1) вывести фамилии сотрудников моложе 30

Select FIO from Sotrudnik

where Data < ’01.01.1983’;

2) вывести фамилии сотрудников, рожденных в 1985 г.

Select FIO

from Sotrudnik

where Data between ’01.01.1985’ and ’31.12.1985’;

3)вывести адреса сотрудников Иванова, Петрова и Сидорова

Select Adres

from Sotrudnik

where FIO in (‘Иванов’, ‘Петров’, ‘Сидоров’);

4)вывести фамилии сотрудников, проживающих в г. Орск

34

Select FIO

from Sotrudnik

where Adres like ‘% г. Орск %’;

3.5.1 Обобщающие функции в операторе select

Существуют следующие обобщающие функции:

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

-avg. Вычисляет среднее значение, применяется только к числовым столбцам;

-min, max. Обнаружение минимального и максимального значения в заданном столбце;

-count. Вычисляет количество значений (число строк в столбце).

Сount (*) вычисляет количество строк, в том числе совпадающих и содержащих пустые значения.

Обобщающие функции могут использоваться в качестве имени столбца сразу после слова select или же во фразе having. Обобщающие функции позволяют подвести итог по всей таблице или по группе.

3.5.2 Группировка строк. Фраза group by

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

Пример:

Подсчитать количество барж и их суммарную грузоподъемность,

изготовленных за каждый день сентября 2012 года. Select count (*) as kolvo,

35

sum (Gruz) as gpod, Data_izg from Barja

where Data_izg between ’01.09.2012’ and ’30.09.2012’ group by Data_izg;

3.5.3 Фильтрация групп. Фраза having.

В отличие от where условие фразы having применяется не к каждой строке таблицы, а к группе в целом. Таким образом, в результирующую таблицу будут включены только те группы, которые удовлетворяют условию.

Пример:

Подсчитать общую грузоподъемность барж, построенных в те даты,

когда производилось более 5 барж.

Select sum (Gruz) as gpod, Data_izg from Barja group by Data_izg having count (*) > 5;

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

Фраза order by позволяет упорядочить результирующую таблицу по значению первого или нескольких столбцов.

Пример:

Вывести сведения о баржах, упорядочив их по дате изготовления, а при одинаковых значениях дат – по грузоподъемности.

Select * from Barja order by Data_izg , Gruz;

36

3.5.5 Подзапросы

Подзапрос – это запрос, входящий в состав другого запроса. Подзапрос может располагаться либо во фразе where, либо во фразе having.

Подзапросы бывают следующие:

-скалярный (возвращает в качестве результата 1 значение);

-строковый (возвращает в качестве результата несколько значений в виде одной строки);

-матричный (возвращает несколько строк).

Часто встречаются такие запросы, в которых важен только тот факт, пуст подзапрос или нет, т.е. вернул ли подзапрос в качестве результата хотя бы одну строку. Фраза exists принимает true, если подзапрос не пуст и наоборот.

Пример:

Вывести фамилии сотрудников, на которых не был издан ни один приказ в сентябре 2012.

Select s.FIO from Sotrudnil s, where not exists

(select p.* from Prikaz2 p

where p.Data between '01.09.2012' and '30.09.2012' and p.Tab_nomer = s.Tab_nomer);

Фразы any(some) и all используются совместно с подзапросами, которые возвращают столбец значений. В случае использования any или some условие считается выполненным, если оно выполняется хотя бы для одного значения столбца. В случае all условие должно выполниться для столбца в целом.

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

37

Пример:

Вывести те даты, в которые в общей сложности были изготовлены баржи с наибольшей грузоподъемностью.

Select Data_izg from Barja group by Data_izg

having sum (Gruz) > = all (select sum (Gruz) from Barja group by Data_izg );

3.5.6 Многотабличные запросы

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

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

многотабличных запросах фраза where содержит условие соединения двух и более таблиц.

Пример:

Вывести полную информацию о назначении сотрудников на пассажирское судно с указанием наименований пассажирского судна, а также фамилий сотрудников.

Select s . FIO, p . Data, p . Tab_nomer, p. Name_sudno_Pas

From Sotrudnik s, Prikaz2 p

where p . Tab_nomer = s . Tab_nomer;

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

Пример:

38

Подсчитать количество приказов, изданных в 2012 году, в которых упоминался сотрудник Иванов.

Select count (*) as kol from Sotrudnik s, Prikaz2 p

where p.Tab_nomer = s. Tab_nomer and s. FIO = ’Иванов’

and p. Data between ’01.01.2012’ and ’31.12.2012’;

3.6 Хранимые процедуры

Хранимые процедуры – это объекты базы данных, которые представляют собой программу, написанную на языке, встроенном в СУБД.

Хранимые процедуры выполняются на сервере и используются в режиме

«клиент-сервер» для проверки сложных ограничений целостности, для реализации запросов, а также для выполнения операций вставки, удаления и обновления.

Они содержат управляющие конструкции - циклы, ветвление и операторы языка SQL, стандартные и модифицированные. Модифицированные операторы языка SQL позволяют сохранять результаты выполнения запросов в заданных переменных. Если процедура реализует запрос, возвращающий в качестве результата несколько строк, то Select выполняется в цикле и при этом на каждой итерации цикла очередная строка передается клиенту.

3.6.1 Синтаксис хранимых процедур СУБД FireBird

Различают два типа процедур: исполняемые хранимые процедуры и хранимые процедуры выборки. Первый тип предназначен для выполнения некоторых действий, проверки некоторых условий или для манипулирования данными. Хранимые процедуры выборки предназначены для реализации

39

запросов. Процедуры могут иметь входные и выходные параметры. Создается процедура командой:

create procedure < имя > ( < список входных параметров >) returns ( < список выходных параметров > )

as

< объявление локальных переменных > begin

< тело процедуры > end;

С помощью входных параметров процедура получает исходные данные, с

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

операторы модифицированного языка SQL.

Для оператора select модификация заключается в том, что результат выполнения запроса можно сохранить в переменных, предварительно описанных:

select Tab_nomer, FIO from Sotrudnik

into sTab_nomer, sfio;

где sTab_nomer – целое, sfio – строка.

Объявляются переменные в теле процедуры с помощью конструкции: declare <имя переменной> <тип>;

Для объявления нескольких переменных (даже одного типа) необходимо несколько таких конструкций:

declare a integer; declare b integer;

40