Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [ 73 ] 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

WHERE (((sale.summa)>>20000));

В Visual FoxPro мы можем связать таблицы в предложении WHERE и в принципе добиться того же результата.

UPDATE Account ;

SET Summa=summa*1.25

WHERE Account.account=sale.account AND Account.date sale

Запросы удаления

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

DELETE FROM Account WHERE Account.key auto = 100008

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

7.3. Изменение структуры данных с помощью SQL

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

В этом параграфе вы научитесь программным путем:

• создавать таблицы и индексы;

• изменять структуру существующих таблиц;

• создавать связи между таблицами.

Data Definition Language (DDL) - это раздел языка SQL, который служит для создания таблиц, изменения их структуры или их удаления. Сюда же входит создание индексов. Несмотря на то, что практически во всех настольных СУБД имеются собственные средства создания таблиц, как правило, вы можете создавать таблицы и с помощью языка SQL. При этом за внешним визуальным прикрытием скрываются те же SQL команды. Поэтому логичней использовать возможность докопаться до сути происходящих процессов.

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

Рассмотрим в качестве невероятного примера такую простую задачу, как переход вашей организации с платформы Visual FoxPro на Microsoft Access. Несмотря на всю кажущуюся легкость этого процесса, вы понесете немало потерь. Ни одно из свойств таблицы - заголовок поля, значение по умолчанию, правила проверки ввода значений уровня поля и уровня записи - не переносится. Вам все придется создавать заново. В то же время команды SQL Data Definition Language могут обеспечить управление импортом данных в Access или экспортом их из FoxPro. Как правило, любое мало-мальски приличное современное средство управления базами данных имеет набор функций SQL pass-through, которые позволяют управлять сторонними приложениями с помощью диалекта языка SQL самого стороннего приложения.

Команда CREATE TABLE служит для создания таблиц. Ее полный синтаксис выглядит так:

1. Visual FoxPro

CREATE TABLE DBF TableNamel [NAME LongTableName] [FREE] (FieldNamel FieldType [(nFieldWidth [, nPrecision])] [NULL NOT NULL]

[CHECK lExpressionl [ERROR cMessageTextl]] [DEFAULT eExpressionl ]

[PRIMARY KEY UNIQUE]

[REFERENCES TableNamel [TAG TagNamel]]

[NOCPTRANS]

[, FieldNamel ...]



[, PRIMARY KEY eExpression2 TAG TagName2

, UNIQUE eExpression3 TAG TagName3]

[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]

REFERENCES TableName3 [TAG TagName5]]

[, CHECK lExpression2 [ERROR cMessageText2]]) FROM ARRAY ArrayName

2. MS Access

CREATE TABLE таблица

(поле1 тип [(размер)] [индекс1] [, поле2 тип [(размер)] [индекс2] [, ...]] [, составной индекс [, ...]])

3. MS SQL Server

CREATE TABLE [[database.]owner.]table name (column name datatype [NOT NULL NULL] [, column name datatype [NOT NULL NULL]]...) [ON segment name ]

В зависимости от приложения синтаксис может различаться, но те элементы, которые мы можем создавать с помощью вышеприведенного синтаксиса, можно создавать с помощью других команд. То есть команда CREATE TABLE как бы размывается по нескольким командам, что в значительной мере зависит от внутренней архитектуры используемого процессора баз данных. Синтаксис SQL в Microsoft Access ближе к Microsoft SQL Server, в то время как Visual FoxPro стоит несколько особняком. Хотя в конечном итоге все элементы, которые мы можем создать для таблиц в Access, содержит и MS SQL Server.

Иногда перед вами может стать задача изменения структуры таблицы. Для этого используется команда ALTER TABLE. Естественно, что никто не лишает вас возможности сделать это визуальными средствами СУБД, в которой вы проектируете свое прикладное приложение. Очень сложно придумать ситуацию, когда вам необходимо использовать команду ALTER TABLE внутри СУБД, где вы проектируете приложение, но, возможно, вам придется менять структуру таблицы, для которой на компьютере нет создающего ее приложения. Но есть драйвер ODBC (иначе ситуация фатальная). Или другой случай, когда вам необходимо с рабочей станции, например, из среды приложения, написанного на Visual FoxPro, добавить поле (колонку) в таблицу, хранящуюся на MS SQL Server.

Самый насыщенный ключевыми словами ситаксис этой команды в Visual FoxPro:

ALTER TABLE TableName1

ADD ALTER [COLUMN] FieldName1 FieldType [(nFieldWidth [, nPrecision])]

[NULL NOT NULL]

[CHECK lExpression1 [ERROR cMessageText1]]

[DEFAULT eExpression1] [PRIMARY KEY UNIQUE]

[REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS]

ALTER TABLE TableName1 ALTER [COLUMN] FieldName2

[NULL NOT NULL]

[SET DEFAULT eExpression2]

[SET CHECK lExpression2 [ERROR cMessageText2]]

[DROP DEFAULT] [DROP CHECK]

ALTER TABLE TableName1 [DROP [COLUMN] FieldName3]

[SET CHECK lExpression3 [ERROR cMessageText3]]

[DROP CHECK]

[ADD PRIMARY KEY eExpression3 TAG TagName2] [DROP PRIMARY KEY]

[ADD UNIQUE eExpression4 [TAG TagName3]] [DROP UNIQUE TAG TagName4]



[ADD FOREIGN KEY [eExpressionS] TAG TagName4

REFERENCES TableNamel [TAG TagNameS]] [DROP FOREIGN KEY TAG TagNameS [SAVE]] [RENAME COLUMN FieldName4 TO FieldNameS]

[NOVALIDATE]

Намного проще эта команда выглядит в Microsoft Access: ALTER TABLE таблица {ADD {COLUMN поле тип[(размер)] [CONSTRAINT индекс] I CONSTRAINT составной индекс} DROP {COLUMN поле I CONSTRAINT имя индекса} }

И наконец, синтаксис этой команды в MS SQL Server еще короче: ALTER TABLE [[database.]owner.]table name ADD column name datatype NULL [, column name

datatype NULL... ]

На этом мы закончили обзор команд SQL, которые присутствуют во всех трех приложениях.

Не удивляйтесь, что параграф уже закончился, а примеров все еще нет. Примеры по использованию команд sQl для изменения структуры данных вы уже видели в главе 6 при описании создания БД.

7.4. Запросы и локальные представления в Microsoft Visual FoxPro

В этом параграфе мы подробно рассмотрим визуальные и программные методы создания запросов и представлений в Visual FoxPro.

Расширения команд xBase командами SQL, которые появились, начиная с версии FoxPro 2.0, принесли, несомненно, ему очень большую пользу. Главным достоинством можно считать значительное сокращение кода для выборки данных, причем без потери скорости, так как метод оптимизации Rushmore работает и в SQL запросах. Это единственный вариант, где указанный метод может использоваться для поиска данных в нескольких таблицах. А, например, команда INSERT-SQL работает на порядок быстрее, чем классическая конструкция

APPEND BLANK

REPLACE <<поле>> WITH <<выражение>> Правда, SQL команд и было всего ничего:

• SELECT-SQL

• INSERT-SQL

• CREATE TABLE

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

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

В Visual FoxPro добавилось несколько новых команд SQL, с помощью которых мы можем менять структуру уже существующих таблиц, удалять записи и модифицировать данные. Но самое главное, - у нас теперь есть возможность создавать представления (View), которые можно хранить в базе данных. Тем самым значительно увеличились возможности организации данных. Помимо этого представление позволяет создавать курсоры, с помощью которых мы можем менять данные в исходных таблицах. При этом мы сами можем определять, какие поля разрешить для модификации, а какие нет. Возникают определенные трудности, если в исходных таблицах нет уникальных ключевых полей, но они легко преодолимы. Можно сказать, что запросы в том виде, как они существовали в предыдущих версиях и продолжают существовать сейчас, больше не нужны. Хотя бесспорно при желании можно доказать необходимость их использования. В Visual FoxPro как синтаксис команд по созданию представлений и запросов, так и конструкторы для создания этих краеугольных камней систем управления базами данных очень похожи друг на друга. Поэтому, начиная обзор Конструктора представлений, мы одновременно изучаем и Конструктор запросов. Параллельно мы будем обсуждать как визуальный способ создания



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [ 73 ] 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146