Объект Query один из наиболее мощных и гибких компонентов, среды Delphi, предназначенных для управления данными. С его помощью создаются приложения, работающие с промышленными SQL серверами, такими, как: InrterBase, Oracle или Sybase и другими
Доступ к данным в объекте Query осуществляется посредством SQL утверждений. Сокращение SQL означает Structured Query Language - Язык Структурированных Запросов. SQL - это мощный язык управления базами данных, который легко доступен в среде Delphi, но который отличается от “родного” языка среды Delphi. В среде Delphi SQL утверждения используются для просмотра таблиц, объединения таблиц, создания отношений вида один – ко - многим, или выполнения практически любых действий, аналогичных действиям других инструментов доступа и управления данными.
Состав языка SQL
Язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде. В язык SQL в качестве составных частей входят:
· язык манипулирования данными (Data Manipulation Language, DML)
· язык определения данных (Data Definition Language, DDL)
· язык управления данными (Data Control Language, DCL).
Подчеркнем, что приведенные названия языков не являются самостоятельными языками, а представляют собой различные команды одного языка. Такое деление проведено только с целью различия функционального назначения команд.
Язык манипулирования данными используется, для манипулирования данными в таблицах баз данных. Он содержит 4 базовые команды:
Язык определения данных используется для создания и изменения структур данных и их составных частей: таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур. Основными его командами являются:
CREATE DATABASE - создать базу данных; CREATE TABLE- создать таблицу; CREATE VIEW- создать виртуальную таблицу; CREATE INDEX- создать индекс; CREATE TRIGGER- создать триггер; CREATE PROCEDURE- создать процедуру; ALTER DATABASE- модифицировать базу данных; ALTER TABLE- модифицировать таблицу; ALTER VIEW- модифицировать виртуальную таблицу; ALTER INDEX- модифицировать индекс; ALTER TRIGGER- модифицировать триггер; ALTER PROCEDURE- модифицировать процедуру; DROP DATABASE- удалить базу данных; DROP TABLE- удалить таблицу; DROP VIEW- удалить виртуальную таблицу; DROP INDEX- удалить индекс; DROP TRIGGER- удалить триггер; DROP PROCEDURE- удалить процедуру.
Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать “язык управления доступом”. Он состоит из двух основных команд: GRANT - дать права и REVOKE - забрать права.
С точки зрения прикладного интерфейса существуют две разновидности команд SQL: интерактивный SQL и встроенный SQL.
Интерактивный SQL используется в специальных утилитах типа WISQL или DBD. Интерактивный SQL позволяет в диалоговом режиме вводить запросы, посылать запросы для выполнения на сервер и получать результаты в предназначенном для этого окне.
Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты, в том числе, комбинируя set-ориентированный и record-ориентированный подходы.
Реляционные операции и команды манипулирования данными
Наиболее важной командой языка манипулирования данными является команда SELECT. За кажущейся простотой ее синтаксиса скрывается ее большая мощность.
В качестве информационной основы для примеров будем использовать базу данных “Служащие предприятия” (employee.gdb), входящую в поставку Delphi и находящуюся, по умолчанию, в папке \IBLOCAL\EXAMPLES. В рассматриваемых примерах предполагается, что все команды языка SQL вводятся интерактивным способом.
Базовыми операциями реляционных баз данных являются: Restriction - выборка; Projection – проекция; Join – соединение; Union - объединение.
Операция выборки позволяет получить все строки (записи) либо часть строк одной таблицы.
Пример 1 демонстрирует, каким образом можно получить все строки таблицы Country.
SELECT * FROM country
Пример 2 демонстрирует, каким образом можно получить подмножество строк таблицы Country, удовлетворяющее условию Currency = “Dollar”.
SELECT * FROM country
WHERE currency = “Dollar”
Операция проекции позволяет выделить подмножество столбцов таблицы.
Пример 3 демонстрирует, каким образом можно получить список денежных единиц.
SELECT currency FROM country
В практической работе часто требуется получить некое подмножество столбцов и строк таблицы, т.е. выполнить комбинацию Restriction и Projection. Для этого достаточно перечислить столбцы таблицы и наложить ограничения на строки.
Пример 4 демонстрирует, каким образом определить денежную единицу Японии.
SELECT currency FROM country WHERE country = “Japan”
Пример 5 демонстрирует, каким образом получить фамилии работников, которых зовут “Roger”.
SELECT first_name, last_name FROM employee
WHERE first_name = "Roger"
Примеры 1 – 5 иллюстрируют общую форму команды SELECT в языке SQL для одной таблицы:
· SELECT (выбрать) специфицированные поля.
· FROM (из) специфицированной таблицы.
· WHERE (где) некоторое специфицированное условие является истинным.
Операция соединения позволяет соединять строки нескольких таблиц для образования новых строк данных.
Пример 6 демонстрирует, каким образом можно получить список руководителей проектов.
SELECT first_name, last_name, proj_name
FROM employee, project
WHERE emp_no = team_leader
Операция объединения позволяет объединять результаты отдельных запросов по нескольким таблицам в единую результирующую таблицу. Таким образом, предложение UNION объединяет вывод двух или более SQL-запросов в единый набор строк и столбцов.
Пример 7 демонстрирует, каким образом можно получить список работников и заказчиков, проживающих во Франции.
SELECT first_name, last_name, job_country FROM employee
WHERE job_country = "France"
UNION
SELECT contact_first, contact_last, country FROM customer
WHERE country = "France"
Рассмотрим общую форму команды SELECT, учитывающую возможность соединения нескольких таблиц и объединения результатов.
Отметим, что под предикатом понимается некоторое специфицированное условие отбора, значение которого имеет булевский тип. Квадратные скобки означают необязательность использования дополнительных конструкций команды. Точка с запятой является стандартным терминатором команды. Отметим, что в WISQL и в компоненте Queryставить конечный терминатор не обязательно. При этом там, где допустим один пробел между элементами, разрешено ставить любое количество пробелов и пустых строк - выполняя желаемое форматирование для большей наглядности.