Методические указания к лабораторным работам для студентов специальности 210100 "Автоматика и информатика в технических системах"

Вид материалаМетодические указания
Лабораторная работа № 9 ИЗУЧЕНИЕ ВОЗМОЖНОСТЕЙ ЯЗЫКА ЗАПРОСОВ SQL
1.Общие сведения
Select[distinct] [
[noconsole] [plain] [nowait]
[order by
Select r.tabn, r.fio, d.fio, d.gr
Select * from baza.
Select fio as famili,tabn as tabel from baza
Select min(okl), max(okl), avg(okl) from baza
Select fio, tabn from baza order by kdol, fio into dbf baza1
Where month(dr)=month(date()) plain.
Select fio from baza where okl between 1 and 1.5
Select fio from baza where kdol not in (8,9).
Select b.dol, a.coont(*), a.sum(zp)
2. Задание на работу
Список литературы
Информационное обеспечение
Подобный материал:
1   2   3   4   5   6   7   8

Лабораторная работа № 9

ИЗУЧЕНИЕ ВОЗМОЖНОСТЕЙ ЯЗЫКА ЗАПРОСОВ SQL


Цель работы: изучить структуру и возможности команд языка запросов SQL СУБД реляционного типа FoxPro, провести реализацию типовых запросов к базе данных на этом языке.

1.ОБЩИЕ СВЕДЕНИЯ


При классификации языковых средств говорится, что, кроме языка описания данных и языка манипулирования данными (ЯМД), СУБД может поддерживать язык запросов.

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

Для реализации запросов FoxPro версии 2.0 и выше имеет подмножество операторов языка SQL (язык структурированных запросов). Кроме того, FoxPro для WINDOWS имеет в операционной оболочке пункт меню "Запрос", который реализует интерактивный режим запроса по образцу. Язык запросов в FoxPro в основном определяется оператором SELECT (входят также команды CREATE DBF, INSERT).

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

В общем случае команда SELECT позволяет :

1. Формировать сложные критерии для выбора записей из одного или нескольких файлов DBF.

2. Указывать поля, которые должны быть отображены в запросе для выбранных записей.

3. Выполнять вычисления с использованием выбранных данных. Язык запросов SQL является стандартом на языки запросов и входит в большинство СУБД, ориентированных на использование в мощных вычислительных системах.

Хотя все запросы к базе можно реализовать средствами языка ЯМД, но часто использование SQL бывает полезным, т.к. базовым инструментом языка запросов является технология быстрого доступа, использующая существующие индексы и дополнительные индексы, которые при необходимости создаются автоматически.

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

Запросы имеют различную форму. Приведем табл. 3 типовых запросов, которые чаще всего используются и в которой приняты следующие обозначения: О – объект; A – атрибут; V – значение атрибута.


Таблица 3

Форма

Тип Запроса

Пример

1. A(0)=?

Обычный запрос атрибута.

Знание служащего с номером 0001.TNOM=0001

#

2. A(?) = V

>

<

Какие объекты имеют заданное значение атрибута.

Кто из служащих имеет оклад > 300 т. р.?

#

3. ?(0) = V

>

<

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

За какие месяцы заработки служащего 0004 превысили 350 т. р.?

4. ?(0) = ?

Запрос всей информации о данном объекте.

Сообщить всю хранимую информацию о служащем 0002.

5. A(?) = ?

Перечислить значения данного атрибута для каждого объекта.

Перечислить ЗП каждого служащего за последний месяц.

#

6. ?(?) = V

>

<

Перечислить все атрибуты объектов имеющих данное значение.

Для каждого служащего определить месяц, когда его ЗП превышала 300 т. р.


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

BAZA.DBF

,

содержащим сведения о сотрудниках кафедры.

Реализация запросов в FoxPro осуществляется командой SELECT, которая имеет очень много возможностей. Полный формат команды имеет следующий вид:

SELECT
[DISTINCT] [<псевдоним>.] <выражение> [AS <колонка>]
[,[<псевдоним>.] <выражение> [AS <колонка>]...]
FROM <БД> [,<БД>...]
[[INTO <получатель>] / TO FILE <файл>
[ADDITIVE] / [TO PRINTER]]

[NOCONSOLE] [PLAIN] [NOWAIT]

[WHERE <условие связи>
[AND <условие связи>...]
[AND/OR <условие отбора>
[AND/OR <условие отбора>...]]]

[GROUP BY <колонка> [,<колонка>...]]

[HAVING <условие отбора>]

[ORDER BY <колонка>
[ASC/DESC][,<колонка>[ASC/DESC]...]]

Термин "колонка" близок к понятию "поле отношения", но может быть и выражением. Кроме того, результат выборки – это новое отношение, или текстовый файл, или отображение на экране, поэтому термин "колонка" шире понятия "поле". Команда SELECT допускает включение в себя внутренних команд SELECT (формирование внутренних подзапросов). Перед ключевым словом FROM указываются отбираемые <выражения>, а после – имена отношений, из которых берутся нужные поля.

<Выражение> может быть полем, константой (выводимой в каждой строке выборки), функцией (в том числе и ФП) от переменных, полей и т.п. Если <выражение> является именем поля, то оно может иметь псевдоним. Он необходим, если выборка делается из нескольких отношений, в которых есть поля с одинаковыми именами. Например, TABN в отношении BAZA и DET. Псевдонимом может быть не только "официальный" псевдоним (ALIAS) отношения, но и любое другое имя, которое вы даете ему в команде SELECT. Никаких последствий за пределами команды SELECT это имя не имеет. Например:

SELECT R.TABN, R.FIO, D.FIO, D.GR;
FROM BAZA R, DET D WHERE R.TABN=D.TABN,

этой командой мы выбираем фамилии родителей и детей из отношений BAZA и DET, сцепленных по полю TABN.

Если необходимо построить выборку из всех полей отношения, то вместо их перечня можно указать символ "*". Например:

SELECT * FROM BAZA.

Результат выборки – это совокупность колонок, заголовками которых могут быть имена полей. Если имена полей совпадают, то такие колонки получают совпадающие имена, к которым присоединяется одна из букв (по алфавиту), например FIO_A,FIO_B и т.д. Колонки, полученные в результате вычисления выражений, получают имена EXP с соответствующим номером. Например: EXP_1, EXP_2 и т.д. Исключения составляют выражения, использующие собственные функции SQL, например MIN() и MAX(). Имена колонок в этом случае будут включать имена функций. Когда имена колонок по умолчанию не устраивают, то их можно переименовать, указав свои имена после слова AS в виде <выражение> AS <новое имя колонки>, например:

SELECT FIO AS FAMILI,TABN AS TABEL FROM BAZA;

ORDER BY FIO

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

Задание параметра DISTINCT исключает возможность вывода одинаковых строк в выборке.

Язык SQL в FoxPro имеет следующие встроенные функции:

COUNT(<выражение>) – количество строк в выборке;

COUNT(DISTINCT) – количество разных строк в выборке;

MIN(<выражение>) – наименьшее число в колонке;

MAX(<выражение>) – наибольшее число в колонке;

AVG(<выражение>) – среднее значение чисел в колонке;

AVG(DISTINCT) – среднее значение без повторения данных;

SUM(<выражение>) и SUM (DISTINCT) – сумма значений в колонке и сумма без повторений.

Например, сделаем выборку минимального, максимального и среднего значений поля OKL в отношении BAZA:

SELECT MIN(OKL), MAX(OKL), AVG(OKL) FROM BAZA

Колонки получат имена: MIN_OKL, MAX_OKL и AVG_OKL.

Получателем результата выборки может быть отношение, массив, текстовый файл, экран или принтер. Кроме того, информация может быть переслана в так называемый КУРСОР. КУРСОР – это временный набор данных, который может быть областью памяти или временным файлом FoxPro (это от пользователя не зависит) и имеет режим "Только чтение". Данные КУРСОРА могут быть, например, предъявлены команде BROWSE, напечатаны, из них может быть образовано меню и т.д. КУРСОР может быть обработан другой командой SELECT. К колонкам КУРСОРА обращаются по имени, возможно, с префиксом – именем КУРСОРА (через точку).

<Получатель> может быть одного из следующих типов:

ARRAY <массив> – задается создаваемый двухмерный массив;

CURSOR <курсор> – задается имя КУРСОРА;

DBF/TABLE <БД> – новое отношение с заданным именем;

TO FILE <файл> [ADDITIVE] / TO PRINTER – выборка посылается в текстовый файл или на принтер. При задании ADDITIVE выборка добавляется в конец существующего файла без его перезаписи.

Вывести фамилии сотрудников и их табельные номера, отсортировав по полям KDOL(главное поле) и FIO (подчиненное поле) в базу BAZA1, которая затем открывается в текущей области. Чтобы увидеть ее содержимое, можно задать BROWSE.

SELECT FIO, TABN FROM BAZA ORDER BY KDOL, FIO INTO DBF BAZA1;

Следующие параметры имеют смысл только при выводе на экран (команда используется без слова INTO):

NOCONSOLE – выборка не выдается на экран;

PLAIN – заголовки колонок не выдаются;

NOWAIT – не делаются паузы при заполнении экрана.

Критерии отбора данных в выборку задаются конструкцией WHERE, в которой <условие связи> используется в тех случаях, когда выборка делается из нескольких отношений и определяет критерии, которым должны удовлетворять поля из разных отношений.

Поля связываются символами отношений (= , # , > , < , >=, <=). Допускается задание нескольких критериев, соединенных знаком AND.

Например: выбрать фамилии всех сотрудников, родившихся в текущем месяце, с указанием дня рождения, количества лет и премии по этому поводу – 50 % от оклада:

SELECT FAM, DAY(DR), "Число",
YEAR(DATE()) – YEAR(DR), "Лет",;
"Премия", 0.5*OKL FROM BAZA;
WHERE MONTH(DR)=MONTH(DATE()) PLAIN.

Если не указать PLAIN, колонки получат имена FAM и EXP_1 до EXP_7.

<Условие отбора> – строится аналогично, но из выражений только для одной базы, и допускается использование логических операторов. Условия, кроме любых функций FoxPro, могут содержать следующие операторы SQL:

LIKE – позволяет построить условие сравнения по шаблону, где символ "_" указывает единичный неопределенный символ в строке; "%" – любое их количество. Эти символы аналогичны символам маски "?" и "*" в MS-DOS. Формат оператора

<выражение> LIKE <шаблон>.

Предположим, в BAZA есть поле MEMO PRIM, в котором, в частности, есть сведения об ученой степени (канд. техн. наук, д-р. техн. наук, канд. экон. наук, канд. физ-мат. наук и т.п.). Нужно вывести всех канд. техн. наук:

SELECT FIO FROM BAZA WHER PRIM LIKE "%к.т.н.%".

BETWEEN – проверяет, находится ли выражение в указанном диапазоне. Формат оператора

<выражение> BETWEEN <нижн. знач.> AND <верх. знач.>.

Например: выберем фамилии сотрудников, у которых оклад лежит в пределах от 1 млн. рублей до 1.5 млн. рублей.

SELECT FIO FROM BAZA WHERE OKL BETWEEN 1 AND 1.5;

IN – проверяет, находится ли выражение, стоящее справа от IN, среди переменных справа от него. Формат оператора :

<выражение> IN [<выражение>,<выражение>,...].

Например: перечислим всех сотрудников, кроме лаборантов и операторов.

SELECT FIO FROM BAZA WHERE KDOL NOT IN (8,9).

Перечисленные операторы можно комбинировать с помощью логических функций и скобок. Группирование данных в выборке задается ключевым словом GROUP BY, которое определяет колонки, по которым делается группирование выходных данных. Все записи базы, для которых значения колонок совпадают, отображаются в выборке одной строкой. Группирование удобно для получения некоторых сводных показателей группы (суммы, количеств и др.).

HAVING – задает критерий отбора данных в каждую сформированную в процессе выборки группу.

ORDER BY – задает упорядочение по заданной колонке(ам). По умолчанию сортировка выполняется по возрастанию (ASC), но может быть задана и по убыванию.

Например, выведем название всех должностей, количество сотрудников и фонд заработной платы для тех групп должностей, где количество сотрудников > 1.

SELECT B.DOL, A.COONT(*), A.SUM(ZP);

FROM BAZA A, SPDOL B WHERE A.KDOL=B.KDOL;

GROUP BY A.KDOL HAVING COONT(*) > 1.

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

2. ЗАДАНИЕ НА РАБОТУ


2.1. Используя учебные пособия [4-15], материал первого раздела данной лабораторной работы, системную документацию по СУБД или информационную подсистему по языкам СУБД в автоматизированной справочной системе NG, изучить структуру и возможности команды SELECT языка SQL СУБД FoxPro.

2.2. Разработать командный файл, позволяющий реализовать все типовые запросы, перечисленные в табл. 3 первого раздела данной работы. В качестве базы данных использовать любое отношение(я), полученное в предыдущих работах.

2.3. Представить текст командного файла защите.

Список литературы

  1. Мартин Дж. Организация баз данных в вычислительных системах. М.: Мир, 1980. 662 с.
  2. Диго С.М. Проектирование баз данных. М.: Финансы и статистика,1988. 216 с.
  3. Джексон Г. Проектирование реляционных баз данных для использования с микроЭВМ. М.: Мир, 1991. 252 с.
  4. Системы управления базами данных и знаний /Под ред. А.Н.Наумова М.: Финансы и статистика, 1991. 252 с.
  5. Сильвия Б. FoxPro 2.6 для Windows. Киев: Торг.-издат. бюро BMV, 1995. 464 с.
  6. Попов А.А. Программирование в среде СУБД FoxPro 2.0. Построение систем обработки данных. Киев: Радио и связь, 1995. 352 с.
  7. Пецко Е.Ю. FoxPro 2.0. Опыт работы, проблемы и решения.
    С-Пб.: Контур; М., 1992. 144 с.
  8. Губанов В.А., Захаров В.В., Коваленко А.Н. Введение в системный анализ. Л.: ИЛУ, 1988. 232 с.
  9. Персональный компьютер: диалог и программные средства. М.: Издательство УДН, 1991. 232 с.
  10. Каратыгин С.А., Тихонов А.Ф., Тихонова Л.Н. Программирование в FoxPro для Windows на примерах. М.: Бином, 1995. 496 с.
  11. Макарова Н.В., Гуревич В.И. Работаем на персональном компьютере единой системы. Л.: Машиностроение,1990. 495 с.
  12. Персональные ЭВМ в инженерной практике: Справочник/Т.Э. Кремпель, А.Г. Кочан, А.М. Тараторин и др. М.: Радио и связь, 1989. 320 с.
  13. Антонович М.Ф. Visual FoxPro 3 для Windows. М.: Радио и связь, 1996. 164 с.
  14. Пинтер Лес, Пинтер Д. Visual FoxPro: уроки программирования. М.: Финансы и статистика, 1996. 243 с.
  15. Зубов В.С. Clipper и FoxPro. Практикум пользователя. М.: Радио и связь, 1996. 395 с.

ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ
СИСТЕМ УПРАВЛЕНИЯ



Методические указания к лабораторным работам

для студентов специальности 210100

"Автоматика и информатика в технических системах"


Воронин Владимир Викторович

Конопелько Генадий Константинович


Главный редактор Л.А.Суевалова
Редактор Т.Ф.Шейкина
Технический редактор Л.И.Александрова

Компьютерная верстка В.Ю.Сапегина


Лицензия на издательскую деятельность

ЛР № 020526 от 23.04.97


Подписано в печать 21.11.97. Формат 60x84 1/16.
Бумага писчая. Офсетная печать: Усл. печ. л. 3,14.
Уч.-изд. л. 2,7. Тираж 100 экз. Заказ . С 134.


Издательство Хабаровского государственного
технического университета.
680035, Хабаровск, ул. Тихоокеанская, 136.

Отдел оперативной полиграфии издательства
Хабаровского государственного технического
университета. 680035, Хабаровск,

ул. Тихоокеанская, 136.