Выборка данных - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
Похожие работы
Название работы Кол-во страниц Размер
Эконометрические оценки инвестиций в основной капитал на основе панельных... 1 149.55kb.
Задание Выборка из простейшей базы данных 1 141.89kb.
Структура данных 1 23.23kb.
Лекция Основы работы с базами данных Базы данных и системы управления... 1 131.22kb.
Лекция №2 по дисциплине «Базы данных» Жизненный цикл базы данных. 1 135.82kb.
Дана выборка: 1; 1; 2; 3; Найти несмещенную оценку дисперсии 1 32.94kb.
Мнение граждан о работе супермаркетов 1 166.73kb.
Коммерческая тайна 2 398.74kb.
Лекция №14 Распределенные базы данных Краткое описание: Распределенные... 1 115.61kb.
2. Модели и типы данных 1 285.96kb.
Преобразование структур данных в поле структур данных 1 116.55kb.
А начиналось всё так 2 708.85kb.
Направления изучения представлений о справедливости 1 202.17kb.

Выборка данных - страница №1/4

ГЛАВА 11 Выборка данных

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



Использование SQL для выборки данных из таблицы

Одним из наиболее эффективных и универсальных способов выборки данных из таблиц базы данных является использование запросов языка SQL. Команды SQL подразделяются на несколько категорий. Для выборки данных используются команды, относящиеся к так называемому языку запросов DQL (Data Query Language).

SQL-запросы можно использовать как при работе с локальными базами данных, так и с SQL-серверами баз данных (Oracle, Informix, Sybase, InterBase, Microsoft SQL Server). Причем при формировании SQL-запросов не имеет особого значения, какая система управления базами данных используется, так как команды языка SQL стандартизованы (стандарт ANSI SQL 92). Однако следует учитывать, что производители СУБД обычно предлагают свои реализации SQL, которые могут включать расширения команд стандарта и даже отклонения от него. Тем не менее большинство команд SQL имеют одинаковый или очень похожий синтаксис в различных реализациях. Поэтому, изучив одну из реализаций SQL, впоследствии можно легко перейти на другую.

В Delphi для работы с таблицами локальных баз данных с использованием BDE применяется собственная реализация языка SQL, называемая локальным SQL (Local SQL). Данная реализация является подмножеством языка SQL 92. Несмотря на то что она не содержит отклонений от стандарта, ее возможности несколько урезаны.

При работе с SQL-серверами обработка запроса выполняется на стороне сервера. Поэтому особенности реализации языка SQL в этом случае определяются используемым SQL-сервером.

В Delphi 5 также поддерживается возможность работы с базами данных посредством SQL-запросов с использованием технологии ADO. В этом случае взаимодействие с базой данных производится средствами драйверов ODBC и OLE DB.



Компоненты Delphi, работающие с базами данных через SQL-запросы_____313

ПРИМЕЧАНИЕ ——————————————————————————————————————— К сожалению, в справочной системе Delphi не содержится сведений о командах SQL, используемых в данных реализациях. Но так как они незначительно отличаются от локального SQL BDE, то в случае необходимости можно воспользоваться справкой по Local SQL.

Компоненты Delphi, работающие с базами данных через SQL-запросы

Для работы с базами данным через SQL-запросы в VCL Delphi используются, как правило, два вида компонентов:

О TQuery — взаимодействует с базой данных посредством драйверов BDE; Q TADOQuery — работает с базой данных с использованием технологии ADO.

ПРИМЕЧАНИЕ ——————————————————————————————————————— В VCL Delphi есть и другие компоненты для взаимодействия с базами данных посредством SQL-запросов, например TStoredProc, TADOCommand, TADODataSet, TADO-StoredProc. Нов любом случае связь с базой данных устанавливается либо через драйверы BDE, либо через драйверы ADO.

Компонент TQuery

При использовании компонента TQuery подготовка и диспетчеризация запросов выполняется BDE.

По своим свойствам и назначению компонент TQuery подобен компоненту ТТаЫе. Отличие заключается только в способе получения данных: в ТТаЫе используются методы, инкапсулированные в классе ТТаЫ е, a TQuery получает данные как результат выполнения SQL-запроса.

Применение языка SQL позволяет легко решать задачи, которые сложно или вообще невозможно решить в рамках класса ТТаЫ е. Поэтому компонент TQuery является гораздо более мощным и гибким инструментом для работы с базами данных. Основные свойства класса TQuery приведены в табл. 11.1.

В классе TQuery также имеется ряд методов, которые довольно часто используются при работе с базами данных через SQL-запросы:

Q procedure ExecSQL — выполняет SQL-запрос, заданный в свойстве SQL. Обычно используется в тех случаях, когда в результате выполнения запроса не возвращаются данные (например, при выполнении команд INSERT, UPDATE, DELETE и CREATE TABLE).



ПРИМЕЧАНИЕ —--—-——-————————————————————————————

Для выполнения команды SELECT необходимо использовать метод Open компонента TQuery.

О function ParamByName (const Value: String): TPa ram — обеспечивает доступ к заданным параметрам по имени;


314



Глава 11. Выборка данных

Таблица 11.1. Основные свойства класса TQuery

Свойство


Тип


Описание


Constrained


Boolean


Определяет, можно (false) или нет (true) задавать полям набора данных значения, которые не соответствуют условиям отбора


DataSource


TDataSource


Задает источник данных, связанный с набором данных, поля которого используются в качестве параметров SQL-запроса


ParamCheck


Boolean


Определяет, следует ли обновлять параметры запроса при изменении свойства SQL во время выполнения программы


ParamCount


Word


Текущее количество параметров в запросе


Params [Index: Word]


TParams


Массив параметров, используемых в SQL-запросе


Prepared


Boolean


Определяет, готов запрос к выполнению (true) или нет (false)


RowsAffected


Integer


Содержит число, определяющее количество записей, измененных с момента последнего выполнения запроса


SQL


TStrings


Содержит текст SQL-запроса


Text


PChar


Указывает на текст SQL-запроса, передаваемый ВОЕ


Q procedure Prepare — посылает запрос BDE для подготовки к выполнению. Вызов данного метода перед выполнением запроса повышает скорость выполнения;

Q procedure UnPrepare — освобождает ресурсы, занятые при подготовке запроса к выполнению.



Компонент TADOQuery

Компонент TADOQuery обеспечивает работу с базами данных посредством SQL-запросов через драйверы ADO. Он не имеет принципиальных отличий от класса TQuery, поскольку оба этих класса происходят от общего предка — TDataSet. Поэтому все основные свойства, которые используются при взаимодействии с базой данный через SQL-запрос, для этих двух компонентов аналогичны.

В классе TADOQuery имеется ряд дополнительных свойств, отсутствующих в классе TQuery. В основном эти свойства используются при разработке приложений клиент-сервер.

ПРИМЕЧАНИЕ ——————————————————————————————————————— Следует заметить, что при использовании компонента TADOQuery реализация SQL-запроса зависит от выбранного типа соединения. Например, при работе с базами данных MS Access можно использовать как соединение Microsoft Jet OLE DB, так и драйвер ODBC, реализации SQL для которых несколько различаются.

Пример использования компонентов доступа к данным через SQL-запросы

Рассмотрим возможность практического использования перечисленных выше компонентов. В дальнейшем полученные результаты мы будем использовать в качестве примера для изучения команд SQL. В качестве исходных данных воспользу-




315

Компоненты Delphi, работающие с базами данных через SQL-запросы

емся уже известной нам базой данных sales.mdb. Поскольку, как уже отмечалось, для доступа к базам данных MS Access удобнее применять технологию ADO, то в рассматриваемом примере будем использовать компонент TADOQuery.

Последовательность действий, выполняемых при создании форм ввода данных с использованием SQL-запросов, будет примерно следующей:

1. Для создания нового приложения выполните команду File > New Application.

2. Разместите на форме компоненты TADOQuery (используя вкладку ADO палитры компонентов) и TDataSource. Последний необходим для связи набора данных ADO с компонентами визуализации данных и расположен на вкладке Data Access палитры компонентов.

3. Подключите базу данных Sales.mdb. Для этого используйте свойство Connect i onStnng компонента TADOQuery.

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



ПРИМЕЧАНИЕ ————————————————————————————————————— В отличие от TADOTable класс TADOQuery не имеет свойств, в которых указывается связанная с ним таблица базы данных. При его использовании информация поступает в набор данных в результате выполнения SQL-запроса, заданного в свойстве SQL.

4. Для задания запроса щелкните на кнопке с многоточием в поле ввода свойства SQL в инспекторе объектов. При этом откроется окно простого текстового редактора, в котором формируется запрос. Сформируйте запрос, как показано на рис. 11.1. Его назначение состоит в возвращении выборки данных, содержащей все поля и все записи таблицы «Товары» нашей базы данных.






Рис. 11.1. Окно редактора SQL-запросов


5. Щелкните на кнопке Code Editor. Теперь текст запроса будет отображаться в окне редактора кода (рис. 11.2), причем ключевые слова языка SQL будут выделяться полужирным шрифтом, что снижает вероятность ошибок при написании запроса.


316

Глава 11. Выборка данных

Рис. 11.2. Текст SQL-запроса в редакторе кода



СОВЕТ ————————————————————————————————————————————

При использовании компонента доступа к данным TQuery для задания SQL-запроса можно использовать визуальный редактор запросов SQL Builder, который вызывается командой SQL Builder контекстного меню компонента TQuery, помещенного на форму. Однако он плохо работает с базами данных, в которых имена полей заданы кириллицей (выдаются различные малопонятные сообщения об ошибках).

6. Выполните настройку источника данных TDataSource. Она производится так же, как и в случае использования компонента TADOTable — в свойстве DataSet указывается имя объекта доступа к данным (по умолчанию — ADOQueryl).

Далее необходимо разместить на форме необходимые элементы управления и выполнить их настройку.

7. Выберите следующие элементы:

О компонент ТМепто, который будет использоваться для отображения и редактирования текста запроса; О компонент отображения данных TDBGnd — для отображения результатов

выполнения запроса; О кнопка TButton — для подачи команды на выполнение запроса.

Примерный вариант размещения на форме необходимых компонентов показан на рис. 11.3.

8. Для настройки компонента визуализации полей базы данных TDBGn d в его свойстве DataSource укажите имя источника данных (по умолчанию — DataSourcel).

Следующий этап — реализация процедур открытия и закрытия набора данных.

9. Если в результате выполнения SQL-запроса возвращаются данные, для его выполнения необходимо воспользоваться методом Open класса TADOQuery. Данный метод следует выполнять при запуске приложения, например в обработчике события OnShow главной формы. При этом происходит выполнение запроса, заданного в свойстве SQL, а результаты его выполнения отобразятся в таблице DBGridl.

10. При закрытии приложения следует закрыть и набор данных. Вызовите метод Open в обработчике события OnShow главной формы, а метод Cl ose — в обработчике ее же события OnCl ose.




317

Компоненты Delphi, работающие с базами данных через SQL-запросы

Рис. 11.3. Размещение элементов управления на форме



СОВЕТ ———————————————————————————————————————————— Предварительно можно проверить состояние набора данных, используя свойство Active (если набор данных уже закрыт, то есть Active = false, то нет необходимости вызывать метод Close).

11. Осталось написать обработчик события OnClick для кнопки Выполнить запрос. Данная кнопка понадобится в дальнейшем для возможности изменения текста запроса с последующим выполнением его без перекомпиляции программы. При нажатии на кнопку должен выполняться запрос. Будем полагать, что в результате выполнения запроса возвращаются данные. В этом случае при нажатии на кнопку следует выполнить следующие действия:

О проверить состояние набора данных; если набор данных открыт, то следует закрыть его;

О передать текст запроса из компонента memSQL в свойство SQL компонента

ADOQueryl;

О открыть набор данных, вызвав метод Open компонента ADOQueryl. Текст модуля разработанной формы приведен в листинге 11.1.



Листинг 11.1. Главный модуль приложения

unit SQLjnain;

interface

uses


Windows. Messages, Syslltils. Classes. Graphics. Controls. Forms. Dialogs. Grids. DBGnds. Db. ADODB. StdCtrls. ExtCtrls. DBTables;

type


318________________________________Глава 11 Выборка данных

TfrmMain - class(TForm) ADOQueryl TADOQuery DataSourcel TOataSource OBGndl TDBGnd memSQL TMemo btnExecSQL TButton procedure FormShowCSender TObject) procedure FormClose(Sender TObject

var Action TCIoseAction) procedure btnExecSQLClickCSender TObject) private

{ Private declarations } public

{ Public declarations } end

var frmMam TfrmMain

implementation {$R * DFM}

procedure TfrmMain FormShow(Sender TObject) begin

memSQL Lines Clear

memSQL Lines AssignCADOQueryl SQL)

ADOQueryl Open end

procedure TfrrnMain FormClosetSender TObject

var Action TCIoseAction) begin

if ADOQueryl Active then ADOQueryl Close end

procedure TfrmMain btnExecSQLClick(Sender TObject) begin

if ADOQueryl Active then ADOQueryl Close

ADOQueryl SQL Clear

ADOQueryl SQL AssignCmemSQL Lines)

ADOQueryl Open end

end


12 Откомпилируйте и запустите приложение После его запуска в компоненте DBGridl на форме отобразится информация, содержащаяся в таблице «Товары» базы данных sales.mdb (рис 114)

Язык запросов DQL

Язык запросов, являющийся одной из категорий языка SQL, состоит всего из одной команды SELECT Эта команда вместе с множеством опций и предложений используется для формирования запросов к базе данных


319


Язык запросов DQL







SELECT " FROM Томны




Рис. 11.4. Результат выполнения SQL-запроса

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

Оператор SELECT не используется автономно, вместе с ним обязательно должны задаваться уточняющие предложения. Предложения, используемые совместно с командой SELECT, могут быть обязательными и дополнительными. Обязательным является только одно предложение — FROM, без которого оператор SELECT не может использоваться.



Простейшая форма оператора SELECT

Оператор SELECT вместе с предложением FROM используется для получения информации из базы данных. Синтаксис простейшей формы оператора SELECT приведен ниже:

SELECT {* | ALL | DISTINCT fieldl, field2. . . fieldN} FROM tablel {. tab1e2. ... . tableN}

Здесь за ключевым словом SELECT следует список полей, которые возвращаются в результате выполнения запроса:

Q имена полей в списке разделяются через запятую;

О для выборки всех полей таблицы (таблиц) используется символ подстановки «*»;

G опция ALL (задана по умолчанию) означает, что результат выборки будет содержать все записи, включая дублирующие друг друга;

Q при использовании опции DISTINCT результат запроса не будет содержать дублирующихся строк.

Совместно с командой SELECT всегда используется предложение FROM, с помощью которого указывается имя таблицы (таблиц), из которой производится выборка. Если в предложении FROM указывается несколько таблиц, то их имена разделяются запятыми.



320

Глава 11. Выборка данных

Выше мы уже рассмотрели пример использования оператора SELECT для выборки всей информации, содержащейся в таблице «Товары». Чтобы выбрать не все поля, а лишь некоторые, необходимо после слова SELECT указать имена полей, которые будут включены в результат выборки. В качестве примера ниже приведен запрос, возвращающий значения только трех полей: «Код товара», «Наименование» и «Цена»:

SELECT [Код товара]. Наименование. Цена FROM Товары



СОВЕТ ———————————————————————————————————————————— Обратите внимание, что при указании в списке оператора SELECT имен полей, содержащих пробел, их необходимо заключать в квадратные скобки. Это правило необходимо выполнять и для имен таблиц с пробелами, указываемых, например, в предложении FROM.

В результате выполнения данного запроса возвращаются все записи, содержащиеся в трех полях таблицы «Товары» (рис. 11.5).



Рис. 11.5. Результат выбора трех полей



ПРИМЕЧАНИЕ ——————————————————————————————————————— Для выполнения запроса нет необходимости перекомпилировать программу. Достаточно во время ее выполнения ввести текст запроса в поле ввода и нажать на кнопку Выполнить запрос.

Рассмотрим теперь пример использования опции DISTINCT. Для этого выберем только одно поле — «Наименование», в котором содержатся дублирующие строки:

SELECT DISTINCT Наименование FROM Товары

В результате выполнения этого запроса выбрано только 15 записей из 16, так как в выборку включено только одно значение «Microsoft Office 2000» (рис. 11.6).



Рис. 11.6. Результат применения опции DISTINCT



Задание условий при выборке данных

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

SELECT {* | ALL | DISTINCT fieldl. field2. . . fieldN} FROM tablel {. table2. ... . tableN} WHERE условие

Специальные операторы языка SQL, применяемые для задания условия, можно разделить на следующие группы:

Q операторы сравнения; О логические операторы; Q операторы объединения; Q операторы отрицания.

Результатом выполнения каждого из этих операторов является логическое значение (true или false). Если для некоторой записи оператор возвращает значение true, то запись включается в результат выборки, если fal se — не включается.



Операторы сравнения

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

О оператор равенства «=» используется для отбора записей, в которых значение определенного поля точно соответствует заданному;

О оператор неравенства «<>» возвращает значение true, если значение поля не совпадает с заданным значением;

322_____________________________Глава 11. Выборка данных

О операторы «меньше» и «больше» (соответственно, «<» и «>») позволяют отбирать записи, в которых значение определенного поля меньше или больше некоторой заданной величины;

Q операторы «меньше или равно» и «больше или равно» (соответственно, «<=» и «>=») представляют собой объединение операторов «меньше» и «равно», «больше» и «равно». В отличие от операторов «<» и «>» операторы «<=» и «>=» возвращают значение true, если значение поля совпадает с заданным значением.

В качестве примера рассмотрим запрос, выбирающий из таблицы «Товары» только те записи, категория товаров в которых равна 2:

SELECT * FROM Товары WHERE Категория-2

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





Логические операторы

К логическим относятся операторы, в которых для задания ограничений на отбор данных используются специальные ключевые слова. В SQL определены следующие логические операторы: Is null, BETWEEN...AND, IN, LIKE, EXISTS, UNIQUE, ALL, ANY.



Оператор IS NULL

Оператор IS NULL предназначен для сравнения текущего значения поля со значением NULL. Он используется для отбора записей, в некоторое поле которых не занесено никакое значение.

Для иллюстрации использования этого оператора воспользуемся таблицей «Клиенты». С помощью приведенного ниже запроса произведем выборку из нее записей клиентов, у которых не указано название предприятия, которое они представляют:

SELECT Фамилия. Имя. Отчество. Телефон. Город, Адрес

FROM Клиенты

WHERE Предприятие IS NULL

Результат выполнения запроса показан на рис. 11.8.

Язык запросов DQL___________________________________323

JarpeecKHH Андреи Анатольевич (3JlJ^bb4^1b п-Новгород улЮрького.д

Фролов Виктор Михайлович {095)576-5456 Жуковский ул Гагарина, д '.

Антонов Максим Юрьевич (095)532-1532 Москва ул КрасноармеС



jogajoB____Андрей Петрович (095)131-7714 Москва Ленинский пр-т.

ЗЯЯЯЭИ.Аяександр Иванович (013)225-6541 Рига ул Свердлова,я

Казанский Сергей Иванович (044(453-6764 Киев Харьковское шо

Гершман Анатолий Васильевич (846)223-4872 Самара пр-т Кирова, д 4

*1шенский Владимир Иванович J044J264 5627 Алушта ул Мичуринская

Ананьев Юрий Степанович (032)278-7659 Львов ул Сирко.д 172

Рис. 11.8. Пример использования оператора IS NULL


следующая страница >>



В любви, как и в природе, первые холода чувствительнее всего. Пьер Буаст
ещё >>