Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Базы данных и знаний. Управление базами и защита информации учебное п

.pdf
Скачиваний:
3
Добавлен:
15.11.2022
Размер:
1.29 Mб
Скачать

Синхронизация данных клиента и сервера

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

c помощью метода Resync, который повторно считывает записи набора. Этот метод используется при выполнении метода

Refresh Delphi;

повторный запрос методом Requery, который заново выполняет запрос на сервере. Выполнение этого метода то же самое, что и выполнение подряд закрытия и открытия набора данных.

уведомление сервером клиента в случае изменения дан-

ных.

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

2.7.Контрольные вопросы

1.Подход сущность–связь. Понятия и термины.

2.Диаграммы сущность–связь.

3.Определение свойств атрибутов.

4.Типы данных сервера INFORMIX.

5.Нормализация.

6.Операторы SQL для создания базы данных.

7.Ввод и извлечение данных.

8.Создание баз данных и файлов баз данных.

9.Создание типов данных и таблиц.

10.Создание и настройка индексов.

11.Реализация целостности данных.

12.Создание представления.

13.Создание хранимых процедур и функций.

91

14.Использование управляемого кода в базе данных.

15.Использование Service Broker для создания решения, основанного на обмене сообщениями.

16.Схемы данных.

17.Корректировка баз данных.

18.Корректировка файловых групп.

19.Создание схем.

20.Создание моментальных снимков баз данных.

21.Корректировка типов данных.

22.Корректировка таблиц.

23.Создание сегментированных таблиц.

24.Извлечение XML с помощью FOR XML.

25.Деление XML с помощью OPENXML.

26.Использование XML типа данных.

27.Планирование индексов.

28.Корректировка индексов.

29.Оптимизация индексов.

30.Создание XML индексов.

31.Тестирование целостности данных.

32.Реализация ограничений (Constraints).

33.Реализация триггеров.

34.Реализация XML схем.

35.Создание и управление представлениями.

36.Оптимизация производительности с помощью представлений.

37.Архивация процедур и функций.

38.Создание параметризованных хранимых процедур.

39.Создание функций.

40.Обработка ошибок.

41.Создание управляемых объектов баз данных.

42.Введение в общую среду выполнения (Common Language Runtime) SQL Server.

92

43.Импорт и настройка сборок.

44.Создание управляемых объектов баз данных.

45.Создание объектов Service Broker.

46.Реализация сервиса инициатора.

47.Реализация целевого сервиса.

48.Разработка стратегии по контролю за изменениями.

49.Разработка стратегии тестирования.

50.Разработка стратегии по контролю за показателями производительности.

51.Разработка стратегии по распространению.

52.Оценка общих табличных выражений (Common Table Expressions).

53.Оценка PIVOT запросов.

54.Оценка запросов с ранжированием.

55.Оценка применения XQuery.

56.Разработка стратегии по преобразованию данных между XML и реляционными форматами.

93

3. ЯЗЫК ЗАПРОСОВ SQL

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

Столбцы и строки в базе данных также должны быть уникальными, но в этом случае не обязательно числовыми. Их можно называть как угодно, лишь бы было уникально и понятно. SQL может быть двух типов: интерактивный и вложенный. Первый – это отдельный язык, он сам выполняет запросы и сразу показывает результат работы. Второй – это тип, при котором SQL-язык вложен в другой, например в С++ или Delphi. В этом разделе речь будет идти об интерактивном SQL, а в практической части – о вложенном (SQL будет вложен в Delphi).

Интерактивный SQL более близок к стандартному, а во вложенном очень часто встречаются отклонения и дополнения. Например, в стандартном SQL различаются только два типа данных: строки и числа, но некоторые производители добавляют свои типы (Date, Time, Binary и т.д.). Числа в SQL делятся на два типа: целые (INTEGER или INT) и дробные (DECIMAL или DEC). Строки ограничены размером в 254 символа. Для дальнейшего понимания материала понадобятся наглядные таблицы. Предположим, что при большом числе покупателей возникнет необходимость в создании базы данных, чтобы эффективно вес-

94

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

SELECT ProgName, Cost

FROM Prog; SELECT – все запросы начинаются с этой команды, она "означает" "выбрать". После этой команды перечисляются имена полей, которые необходимо выбрать избазы данных.

FROM – эта команда также присутствует во всех запросах и указывает на таблицу (или несколько таблиц), к которой направлен этот запрос. Точка с запятой ";" используется в интерактивном SQL в качестве индикатора конца запроса. В некоторых системах эту роль выполняет "\". Во вложенном такого индикатора нет. В итоге мы получаем, что наш запрос выберет все строки с полями "ProgName" и "Cost" из таблицы "Prog". Как видно, ничего сложного тут нет. Такой маленький запрос возвращает все поля из таблицы, кроме ключевого. Если нужно вывести все, то можно перечислить все поля или воспользоваться значком "*". Следующий запрос выведет все поля из таблицы "Prog":

SELECT * FROM Prog;

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

вывести в другом порядке, то

нужно перечислить все

поля

в особом порядке. В SQL существует два ключевых слова, кото-

рые характеризуют параметры

вывода информации:

ALL

и DISTINCT . Параметр ALL означает, что выводить нужно все строки, а DISTINCT означает, что не нужно выводить повторяющиеся строки. Следующий запрос выведет все возможные имена программ. Если в таблице встретится две строки с одинаковым именем программы, то он выведет это имя только один раз. SELECT DISTINCT ProgName FROM Prog;

95

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

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

Следующий оператор будет WHERE, который задает критерии поиска. Например, нужно выбрать все записи из таблицы User.db, где в поле Country содержится значение "USA". В этом случае нужно написать следующий запрос:

SELECT * FROM User WHERE Сountry LIKE "USA"

Результатом запроса будут все строки, содержащие в поле "Country" значение "USA". Если проговорить последнюю строку запроса, то она будет звучать так: "Где поле Country равно USA". Еще одно замечание: в запросах строки выделяются кавычками. В зависимости от базы данных кавычки могут быть одинарными или двойными. В Delphi это одинарные кавычки, но здесь будут использованы двойные, т.к. это предусмотрено стандартом. Идентично знаку "=" (равно), только используется для сравнения строк. Если нужно сравнить числа, то нужно использовать знак равно (=), а если строки, то оператор LIKE.

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

SELECT * FROM User WHERE LecNumber =1

В этом случае мы производим поиск по числовому полю, поэтому используем знак равно (=). Результатом запроса будут все строки, содержащие в поле LecNumber значение 1. Во всех

96

запросах использован единственный оператор «=» (равно). Но это не значит, что больше ничего нет. Стандарт разрешает использовать следующие операторы:

• "=" – равный; • ">" – больше; • "<" – меньше; • ">=" –

больше или равно; • "<=" – меньше или равно; • "<>" – неравно. Операторы "больше", "меньше" и др. можно использовать не только с числами, но и со строками. В этом случае буква "А" будет меньше, чем "Р". При сравнении строк разного регистра меньшим оказывается строка в верхнем регистре, например "А" будет меньше "а" и "Р" будет меньше "а". При сравнении строк также необходимо использовать кавычки.

SELECT * FROM User WHERE LecNumber >1

Результатом этого запроса будут строки, в которых количество лицензий больше 1. Теперь усложним запрос с помощью булевых операторов. В стандарте предусмотрено три булевых оператора: AND (логическое "и"), OR (логическое "или"), NOT (логическое "не"). Рассмотрим пример:

SELECT*FROMUser WHERE Сountry LIKE "USA" AND LecNumber >1

Результат запроса – все строки, содержащие в поле "Сountry" значение "USA" и в поле LecNumber значение больше "1". Если какое-то из этих условий не выполнится, то строка не будет выбрана.

SELECT * FROM User WHERE Сountry LIKE "USA" OR LecNumber =1

Результат запроса – все строки, содержащие в поле

"Сountry" значение "USA" или в поле LecNumber значение "1".

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

97

SELECT * FROM User WHERE Сountry LIKE "USA" AND NOT LecNumber =1

Результат запроса – все строки, содержащие в поле "Сountry" значение "USA" и в поле LecNumber значение, не равное "1". Для того чтобы строка была выбрана, необходимо, чтобы оба условия были верны (потому что мы используем оператор "AND"). Обратите внимание, что во втором условии "NOT LecNumber =1" оператор "NOT" стоит вначале. Вот именно там он и должен стоять, он не может находится в середине или даже в конце условия. В принципе, это условие идентично условию "LecNumber <>1", но это не значит, что этот оператор не нужен. Иногда он действительно очень удобен. При использовании булевых операторов вы можете использовать скобки:

SELECT * FROM User WHERE Сountry LIKE "USA" AND (LecNumber =1 OR LecNumber 2)

Результат запроса – все строки, содержащие в поле "Сountry" значение "USA" и в поле LecNumber значение, не равное "1" или "2". Для того чтобы строка была выбрана, необходимо, чтобы условие Сountry LIKE "USA" и условие в скобках были верны.

Продолжаем изучать язык запросов SQL. На прошлом занятии были изучены булевые операторы. Сегодня познакомимся еще с несколькими операторами, упрощающими и усиливающими поиск необходимой информации. Это будут операторы IN, BETWEEN, IS NULL. А также мы познакомимся с шаблонами. Начнем с оператора IN. В принципе, можно создавать запросы и без него, но он упрощает SQL-код и делает его более наглядным. Рассмотрим пример:

98

SELECT * FROM User WHERE Сountry LIKE "USA" or Сountry LIKE "RUSSIA" or СountryLIKE "GERMANY";

Этот запрос вполне работающий, но представьте, что так надо перечислить 20 или более стран. В этом случае запрос сильно увеличится. Вот как этот же запрос будет выглядеть с оператором IN.

SELECT * FROM User WHERE Сountry IN ("USA", "RUSSIA", "GERMANY");

Это намного проще и занимает меньше места. Если внимательно осмотреть два предыдущих запроса, то можно и без объяснений понять, что делает оператор IN. В данном случае он выведет все записи, в которых Counrty имеет одно из значений, указанных в скобках. Если используется числовое поле, то кавычки надо убрать:

SELECT * FROM User WHERE LecNumber IN (1, 2, 3).

В этом случае мы увидим все записи, где поле LecNumber равно 1, или 2, или 3. Вместе с оператором IN и со всеми последующими операторами можно смело использовать булевые операторы, например:

SELECT * FROM User WHERE LecNumber NOT IN (1, 2, 3)

Теперь перейдем к рассмотрению оператора BETWEEN. Он также нужен только для удобства, и вы можете обойтись без него. К примеру, допустим, что надо вывести все строки, где поле LecNumber больше либо равно 1 и меньше либо равно 5. Этот запрос будет выглядеть так:

SELECT * FROM User WHERE LecNumber >= 1 AND LecNumber <= 5 С оператором BETWEEN та же запись WHERE LecNumber BETWEEN 1 AND 5

99

Вполне понятно, что этот оператор задает диапазон чисел. Нужно помнить, что конечные точки включаются в результат запроса. Этот оператор можно использовать и с строковыми полями:

SELECT * FROM User WHERE Сountry BETWEEN "A" AND "R";

В результат этого запроса войдут такие страны, как

GERMANY, AUSTRY, но не войдет RUSSIA. Почему? Потому что "GERMANY" меньше, чем "R", а RUSSIA больше, потому что в слове RUSSIA больше букв.

Оператор IS NULL означает нулевое значение. Сразу отметим, что нулевое значение не равно 0 или " " (пустой строке). Ноль – это ноль, т.е. незаполненное значение. В принципе, этот оператор прост, да и не очень важен, потому что с ним редко придется работать. Пример:

SELECT * FROM UserWHERE Сountry IS NULL;

Теперь рассмотрим еще два оператора – % (процент) и _ (подчеркивание). Точнее сказать, это не операторы, а управляющие символы, используемые в шаблонах. Они будут использоваться вместе с оператором LIKE. Представьте, что нужно вывести все записи, которые в поле "…" содержат значение, начинающееся на "R". Запрос будет выглядеть так:

SELECT * FROM User WHERE Сountry LIKE "R%";

Значок % (процент) означает любое количество символов, т.е. в результат войдут все слова, начинающиеся на "R" и содержащие потом любое количество любых символов. Рассмотрим еще пример: "А%С". В результат такого шаблона войдут слова: ананас, атас и другие, главное, чтобы они начинались на "А" и заканчивались на "С". Теперь познакомимся с _ (подчер-

100