Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

запросов Содержание урока 3- [0

Работа добавлена на сайт samzan.net:


Создание баз данных в Delphi

Урок 3: Создание таблиц с помощью SQL-запросов

Содержание урока 3:

[0.0.1]
Обзор

[0.0.2] Создание таблиц с помощью SQL

[0.0.3] Заключение

  1.  
    Обзор

На данном уроке мы познакомимся еще с одной возможностью создания таблиц - через посылку SQL-запросов. Как Вы, наверное, могли заметить на предыдущем уроке, Database Desktop не обладает всеми возможностями по управлению SQL-серверными базами данных. Поэтому с помощью Database Desktop удобно создавать или локальные базы данных или только простейшие SQL-серверные базы данных, состоящие из небольшого числа таблиц, не очень сильно связанных друг с другом. Если же Вам необходимо создать базу данных, состоящую из большого числа таблиц, имеющих сложные взаимосвязи, можно воспользоваться языком SQL. При этом можно воспользоваться компонентом Query в Delphi, каждый раз посылая по одному SQL-запросу, а можно записать всю последовательность SQL-предложений в один так называемый скрипт и послать его на выполнение. Конечно, для этого нужно хорошо знать язык SQL, но, уверяю Вас, сложного в этом ничего нет! Конкретные реализации языка SQL незначительно отличаются в различных SQL-серверах, однако базовые предложения остаются одинаковыми для всех реализаций.

  1.  Создание таблиц с помощью SQL

Если Вы хотите воспользоваться компонентом TQuery, сначала поместите его на форму. После этого настройте свойство DatabaseName на нужный Вам алиас. После этого можно ввести SQL-предложение в свойство SQL. Для выполнения запроса, изменяющего структуру, вставляющего или обновляющего данные на сервере, нужно вызвать метод ExecSQL компонента TQuery. Для выполнения запроса, получающего данные с сервера (т.е. запроса, в котором основным является оператор SELECT), нужно вызвать метод Open компонента TQuery. Это связано с тем, что BDE при посылке запроса типа SELECT открывает так называемый курсор, с помощью которого осуществляется навигация по выборке данных (подробней об этом см. в уроке, посвященном TQuery).

Приведем упрощенный синтаксис SQL-предложения для создания таблицы на SQL-сервере InterBase (более полный синтаксис можно посмотреть в online-справочнике по SQL, поставляемом с локальным InterBase):

CREATE TABLE table

(<col_def> [, <col_def> | <tconstraint> ...]);

где

table - имя создаваемой таблицы,

<col_def> - описание поля,

<tconstraint> - описание ограничений и/или ключей (квадратные скобки [] означают необязательность, вертикальная черта | означает “или”).

Описание поля состоит из наименования поля и типа поля (или домена - см. урок 9), а также дополнительных ограничений, накладываемых на поле:

<col_def> = col {datatype | COMPUTED BY (<expr>) | domain}

 [DEFAULT {literal | NULL | USER}]

 [NOT NULL] [<col_constraint>]

 [COLLATE collation]

Здесь

col - имя поля;

datatype - любой правильный тип SQL-сервера (для InterBase такими типами являются SMALLINT, INTEGER, FLOAT, DOUBLE PRECISION, DECIMAL, NUMERIC, DATE, CHAR, VARCHAR, NCHAR, BLOB), символьные типы могут иметь CHARACTER SET - набор символов, определяющий язык страны. Для русского языка следует задать набор символов WIN1251;

COMPUTED BY (<expr>) - определение вычисляемого на уровне сервера поля, где <expr> - правильное SQL-выражение, возвращающее единственное значение;

domain - имя домена (обобщенного типа), определенного в базе данных;

DEFAULT - конструкция, определяющая значение поля по умолчанию;

NOT NULL - конструкция, указывающая на то, что поле не может быть пустым;

COLLATE - предложение, определяющее порядок сортировки для выбранного набора символов (для поля типа BLOB не применяется). Русский набор символов WIN1251 имеет 2 порядка сортировки - WIN1251 и PXW_CYRL. Для правильной сортировки, включающей большие буквы, следует выбрать порядок PXW_CYRL.

Описание ограничений и/или ключей включает в себя предложения CONSTRAINT или предложения, описывающие уникальные поля, первичные, внешние ключи, а также ограничения CHECK (такие конструкции могут определяться как на уровне поля, так и на уровне таблицы в целом, если они затрагивают несколько полей):

<tconstraint> = [CONSTRAINT constraint <tconstraint_def>]

 <tconstraint>

 

Здесь

<tconstraint_def> = {{PRIMARY KEY | UNIQUE} (col[,col...])  | FOREIGN KEY (col [, col ...]) REFERENCES other_table

| CHECK (<search_condition>)}

 

<search_condition> =

{<val> <operator> {<val> | (<select_one>)}

| <val> [NOT] BETWEEN <val> AND <val>

| <val> [NOT] LIKE <val> [ESCAPE <val>]

| <val> [NOT] IN (<val> [, <val> ...] |

<val> = {

col [<array_dim>] | <constant> | <expr> | <function>

 | NULL | USER | RDB$DB_KEY } [COLLATE collation]

<constant> = num | "string" | charsetname "string"

<function> = {

COUNT (* | [ALL] <val> | DISTINCT <val>)

| SUM ([ALL] <val> | DISTINCT <val>)

| AVG ([ALL] <val> | DISTINCT <val>)

| MAX ([ALL] <val> | DISTINCT <val>)

| MIN ([ALL] <val> | DISTINCT <val>)

| CAST (<val> AS <datatype>)

| UPPER (<val>)

| GEN_ID (generator, <val>)

}

<operator> = {= | < | > | <= | >= | !< | !> | <> | !=}

<select_one> = выражение SELECT по одному полю, которое возвращает в точности одно значение.

 

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

Пример : Простая таблица с конструкцией PRIMARY KEY на уровне поля

CREATE TABLE REGION (

REGION   REGION_NAME NOT NULL PRIMARY KEY,

POPULATION INTEGER NOT NULL);

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

CREATE DOMAIN REGION_NAME

AS VARCHAR(40) CHARACTER SET WIN1251 COLLATE PXW_CYRL;

Пример : Таблица с предложением UNIQUE как на уровне поля, так и на уровне таблицы

CREATE TABLE GOODS (

MODEL  SMALLINT NOT NULL UNIQUE,

NAME  CHAR(10) NOT NULL,

ITEMID  INTEGER NOT NULL, CONSTRAINT MOD_UNIQUE

UNIQUE (NAME, ITEMID));

Пример : Таблица с определением первичного ключа, внешнего ключа и конструкции CHECK, а также символьных массивов

CREATE TABLE JOB (

JOB_CODE  JOBCODE NOT NULL,

JOB_GRADE JOBGRADE NOT NULL,

JOB_REGION  REGION_NAME NOT NULL,

JOB_TITLE  VARCHAR(25) CHARACTER SET WIN1251 COLLATE       PXW_CYRL NOT NULL,

MIN_SALARY  SALARY NOT NULL,

MAX_SALARY  SALARY NOT NULL,

JOB_REQ  BLOB(400,1) CHARACTER SET WIN1251,

LANGUAGE_REQ  VARCHAR(15) [5],

PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_REGION),

FOREIGN KEY (JOB_REGION) REFERENCES REGION (REGION),

CHECK (MIN_SALARY < MAX_SALARY));

Данный пример создает таблицу, содержащую информацию о работах (профессиях). Типы полей основаны на доменах JOBCODE, JOBGRADE, REGION_NAME и SALARY. Определен массив LANGUAGE_REQ, состоящий из 5 элементов типа VARCHAR(15). Кроме того, введено поле JOB_REQ, имеющее тип BLOB с подтипом 1 (текстовый блоб) и размером сегмента 400. Для таблицы определен первичный ключ, состоящий из трех полей JOB_CODE, JOB_GRADE и JOB_REGION. Далее, определен внешний ключ (JOB_REGION), ссылающийся на поле REGION таблицы REGION. И, наконец, включено предложение CHECK, позволяющее производить проверку соотношения для двух полей и вызывать исключительное состояние при нарушении такого соотношения.

 

Пример : Таблица с вычисляемым полем

CREATE TABLE SALARY_HISTORY (

EMP_NO   EMPNO NOT NULL,

CHANGE_DATE  DATE DEFAULT "NOW" NOT NULL,

UPDATER_ID  VARCHAR(20) NOT NULL,

OLD_SALARY  SALARY NOT NULL,

PERC_CHANGE DOUBLE PRECISION DEFAULT 0 NOT NULL

 CHECK (PERC_CHANGE BETWEEN -50 AND 50),

NEW_SALARY COMPUTED BY

 (OLD_SALARY + OLD_SALARY * PERC_CHANGE / 100),

PRIMARY KEY (EMP_NO, CHANGE_DATE, UPDATER_ID),

FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE (EMP_NO));

Данный пример создает таблицу, где среди других полей имеется вычисляемое (физически не существующее) поле NEW_SALARY, значение которого вычисляется по значениям двух других полей (OLD_SALARY и PERC_CHANGE).

  1.  Заключение

Итак, мы рассмотрели, как создавать таблицы с помощью SQL-выражений. Этот процесс, хотя и не столь удобен, как интерактивное средство Database Desktop, однако обладает наиболее гибкими возможностями по настройке Вашей системы и управления ее связями. 

PAGE  6

Урок 3: Создание таблиц с помощью SQL запросов




1. История государства и права зарубежных стран для проведения рубежного контроля у студентов 01 02 03 уче
2. отражающее дух нового времени
3. Структурной и функциональной единицей нервной системы является нервная клетка ~ нейрон
4. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата медичних наук Х
5. Тоталитарный режим
6. Вильям Шекспир и его произведение Ромео и Джульетта
7. Информационные продукты и услуги информационно-аналитических агентств
8. Принцип применения вакцин заключается в опережающем создании иммунитета и как следствие устойчивости к ра
9. Украинский язык
10. Общая характеристика железнодорожного транспорта
11. Учет и аудит материалов в МП г Красноярска
12. Тема- Об~єднання текстів введення колонтитулів розміщення тексту на сторінках
13. Предмет, метод, система, принципы и источники трудового права
14. Право на жизнь, свободу и личную неприкосновенность
15. Жесткое внедрение DLL в Windows-программы
16. Гринковский учебнопедагогический комплекс детский садсредняя общеобразо
17. Экономика предприятия
18. Crem nd chicken rlls re so populr mong children nd teens
19. Лунаl запуск которого был осуществлен 2 января 1958 года
20. шоу звукове оформлення і дикторський супровід відеофрагменти й анімацію тривимірну графіку