Типы данных, используемых в командах SQL



Список наиболее часто встречающихся типов данных приведен в табл. 9.4. Для многих типов данных задается максимальная ширина отображения, указываемая в скобках (max). К примеру, запись INT(2) означает, что значение данного поля не может превышать двух символов (числа 99).

Типы данных можно разделить на числовые, дата/время, денежные, строковые (текстовые) и др.

К числовым типам относятся целые числа и числа с плавающей точкой. Для чисел с плавающей точкой, кроме максимальной ширины отображения можно также указывать число значащих цифр после запятой (P).

 

Таблица 9.4

Перечень основных типов данных

Типы данных Обозначение в SQL
INT[(max)] Обычные целые числа
SMALLINT[(max)] Маленькие целые числа диапазона -32768…32767
FLOAT[(max,P)] Числа с плавающей точкой одинарной точности
DOUBLE[(max,P)] Числа с плавающей точкой двойной точности
DECIMAL[(max,P)] Числа с плавающей точкой, приведенные к типу char
CURRENCY или MONEY Денежный формат, масштабируемое целое
DATE Дата в формате ДД.ММ.ГГГГ или ДД/ММ/ГГГГ
TEXT Строковые данные (может использоваться для полей MEMO) до 65536 символов
CHAR(n) или TEXT(n) Строковые данные фиксированной длины (n) до 255 символов
COUNTER СЧЕТЧИК Автоматическая вставка уникальных последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи.

 

Примеры написания основных команд SQL

1. Команда создания таблицы СПИСОК, включающую поля Номер, Фамилия, Имя, Сред_балл, Дата_оплаты, Сумма:

CREATE TABLE СПИСОК (Номер int Not Null Primary Key, Фамилия char(25), Имя text(15), Сред_балл short, Дата_оплаты date,Сумма currency).

Возможно для поля Номер определить тип данных Counter, исключив Параметры Not Null Primary Key

2. Команда добавления в таблицу СПИСОК нового поля Долг:

ALTER TABLE СПИСОК ADD Долг money.

3. Команда удаления из таблицы СПИСОК поля Сред_балл:

ALTER TABLE СПИСОК DROP Сред_балл;

4. Команда заполнения таблицы (добавление в таблицу новой записи):

INSERT INTO СПИСОК (Номер, Фамилия, Имя, Дата_оплаты, Сумма, Долг) VALUES (1, «Котов», «Семен», «23.03.2007», 120000, 50000).

5. Команда удаления из таблицы записи номер 4:

DELETE FROM СПИСОК WHERE Номер = 4.

Если <условия выборки> WHERE не заданы, то удаляются ВСЕ записи !

В общем случае, выражение WHERE может включать имена полей (столбцов) и математические (логические) операторы (функции), например:

 +, –, *, /, =, >, <, >=, <=, <>, AND, OR, NOT, IN, BETWEEN, LIKE, IS NULL и др.

6. Команда внесения изменения в таблицу (например, значение в поле Долг надо увеличить на 15%, если долг >=50000):

UPDATE СПИСОК SET Долг = Долг * 1.15 WHERE Долг >= 50000.

7. Команда выбора из таблицы всех записей:

SELECT *FROM СПИСОК.

Можно в директиве SELEST указать условия выбора — WHERE, например:

SELECT *FROM СПИСОК WHERE Номер BETWEEN 10 AND 25 — выбор записей с номерами от 10 до 25;

SELECT *FROM СПИСОК WHERE Дата_оплаты<=[Введите дату оплаты] — выбор записи с указанием даты в окне параметрического запроса;

SELECT *FROM СПИСОК WHERE Дата_оплаты >= #3/30/2007# — выбор записи с указанной датой (дату нужно вводить в формате ММ/ДД/ГГГГ).

Оператор SELECT является одним из самых широко применяемых средств языка SQL для выборки различных данных из одной или нескольких таблиц БД в соответствие с заданными условиями WHERE, а также для выборки и вычисления над данными с использованием предикатов отбора: ALL, DISTINCT, DISTINCTROW или TOP.

Назначение предикатов отбора:

ALL — используется по умолчанию, если предикаты отсутствуют.

DISTINCT — исключает из выборки записи, которые содержат повторяющиеся значения в выбранных полях.

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

(Компонент DISTINCTROW действует только при выборе полей из некоторых, но не всех таблиц, используемых в запросе; он не учитывается, если запрос включает только одну таблицу или если поля извлекаются из всех таблиц).

TOP N или TOP N Persent — возвращает заданное число N или N процентов записей, находящихся в начале Desc или в конце Asc диапазона, описанного с помощью выражения упорядочивания ORDER BY.

Например, можно написать следующие команды на выборку записей из созданной ранее таблицы СПИСОК:

1. SELECT DISTINCT Имя FROM СПИСОК ORDER BY Имя (выбор из таблицы СПИСОК отсортированных по алфавиту не повторяющиеся имен).

2. SELECT *FROM СПИСОК ORDER BY Фамилия [ALL] (выбор всех записей, отсортированных по алфавиту фамилий).

3. SELECT TOP 3 Фамилия, Имя, Долг FROM СПИСОК ORDER BY Долг [Asc] (выбор трех первых записей, включающих поля Фамилия, Имя, Долг, отсортированных по возрастанию по полю Долг, т.е. выбор трех должников с малыми значениями долга).

4. SELECT TOP 3 Фамилия, Имя, Долг FROM СПИСОК ORDER BY Долг Desc (выбор трех первых записей, включающих поля Фамилия, Имя, Долг, отсортированных по убыванию полю Долг, т.е. выбор трех должников с самыми большими значениями долга).

5. TOP 40 PERCENT Фамилия, Имя, Долг FROM СПИСОК ORDER BY Долг [Asc] или ORDER BY Долг Desc (выбор первых в списке 40% записей, включающих поля Фамилия, Имя, Долг, отсортированных по полю Долг по возрастанию или по убыванию, т.е. выбор 40% должников с самыми малыми большими или с самыми большими значениями долга).

В заключение приведем пример более сложного варианта применения операции SELECT совместно с операцией INNER JOIN для создания новой таблицы (Нов_Табл) с новым вычисляемым полем (Сумма_Оплаты) из двух имеющихся в БД таблиц: ТОВАРЫ (рис 9.3) и ПОСТАВКИ (рис.9.4).

Товары

Код_товара Наименование Цена
1 Молоко 750,00р.
2 Масло 1 320,00р.
3 Сметана 1 760,00р.

Рис. 9.3. Имеющаяся Таблица Товары

Поставки

Код_товара Количество Дата_доставки
1 100 10.11.2007
1 300 01.11.2007
1 300 28.11.2007
2 500 12.11.2007
2 300 20.11.2007
2 800 16.11.2007
2 700 15.11.2007
3 250 24.11.2007
3 700 22.11.2007
3 300 20.11.2007

 

Рис. 9.4. Имеющаяся Таблица Поставки

 

Запрос на создание Нов_Табл будет выглядеть следующим образом:

SELECT Товары.Наименование, Поставки.Количество, Товары.Цена, Товары!Цена*Поставки!Количество AS [Сумма_оплаты], Поставки.Дата_доставки INTO Нов_Табл FROM Товары INNER JOIN Поставки ON Товары.Код_товара=Поставки.Код_товара GROUP BY Товары.Наименование, Поставки.Дата_доставки, Поставки.Количество, Товары.Цена.

В полученной Нов_Табл (рис. 9.5) данные в новом поле [Сумма_оплаты] вычисляются путем умножения значений поля Цена из таблицы Товары на значение поля Количество из Таблицы Поставки — Товары!Цена*Поставки!Количество.

Нов_Табл

Наименование Количество Цена Сумма_оплаты Дата_доставки
Масло 500 1 320,00р. 660 000,00р. 12.11.2007
Масло 700 1 320,00р. 924 000,00р. 15.11.2007
Масло 800 1 320,00р. 1 056 000,00р. 16.11.2007
Масло 300 1 320,00р. 396 000,00р. 20.11.2007
Молоко 300 750,00р. 225 000,00р. 01.11.2007
Молоко 100 750,00р. 75 000,00р. 10.11.2007
Молоко 300 750,00р. 225 000,00р. 28.11.2007
Сметана 300 1 760,00р. 528 000,00р. 20.11.2007
Сметана 700 1 760,00р. 1 232 000,00р. 22.11.2007
Сметана 250 1 760,00р. 440 000,00р. 24.11.2007

 

Рис. 9.3. Полученная в результате запроса Нов_Табл

Кроме операции INNER JOIN для создания новых таблиц из полей существующих таблиц могут использоваться операции LEFT JOIN и RIGHT JOIN.

Операция LEFT JOIN используется, чтобы создать левое внешнее объединение. С помощью левого внешнего объединения выбираются все записи первой (левой) таблицы, даже если они не соответствуют записям во второй (правой) таблице.

Операция RIGHT JOIN используется, чтобы создать правое внешнее объединение. С помощью правого внешнего объединения выбираются все записи второй (правой) таблицы, даже если они не соответствуют записям в первой (левой) таблице.

Например, если имеются две таблицы — «Отделы» (левая) и «Сотрудники» (правая), причем в левой таблице могут быть отделы, за которыми не закреплены сотрудники, а в правой таблице — могут быть сотрудники, не закрепленные за конкретным отделом. В этом случае можно использовать операцию LEFT JOIN для выборки из обеих таблиц перечня всех отделов, включая тех, за которыми не закреплены сотрудники. Чтобы выбрать всех сотрудников, включая тех, которые не закреплены за каким-либо отделом, можно аналогично использовать операцию RIGHT JOIN.

Операции LEFT JOIN и RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в операцию LEFT JOIN или RIGHT JOIN. Чтобы узнать, как составлять вложенные объединения, см. обсуждение вложений в Справке Microsoft Access по операции INNER JOIN.

Можно также связывать несколько предложений ON. Чтобы узнать, как это происходит, см. обсуждение связи предложений в Справке Microsoft Access по операции INNER JOIN.

Нельзя операциями INNER JOIN, LEFT JOIN, RIGHT JOIN объединить поля, содержащие данные типа поле MEMO или поле объекта OLE.

Привилегии устанавливаются и отменяются специальными операторами языка SQL — GRANT (РАЗРЕШИТЬ) и REVOKE (ОТМЕНИТЬ). Пример написания команд на установление и отмену привилегии по обработке данных в конкретной таблице конкретным пользователем будет приведен в теме 11.

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

Следует предупредить о необходимости соблюдения осторожности при выполнении запросов на создание и изменение таблиц, чтобы случайно безвозвратно не удалить таблицу с нужными данными. Microsoft Access предупреждает об этом перед выполнением соответствующих запросов! Диалоговые окна Предупреждений показаны на рис. 9.6.

 

 

 

Рис. 9.6. Предупреждения программы Microsoft Access
о безвозвратном изменении данных в таблице или удалении существующей таблицы под именем, приведенном в запросе

Вопросы для самопроверки

1. Назовите основные цели и задачи языка SQL.

2. Перечислите функциональные возможности языка SQL по управлению СУБД.

3. На основании каких стандартов строится SQL? Что такое диалекты SQL?

4. Приведите общую структуру команд языка SQL.

5. Как обозначаются типы данных Microsoft Access на языке SQL?

6. Какие элементы и выражения в команде SQL заключается в круглые скобки ( ), в квадратные скобки [ ], в фигурные скобки { }, в угловые скобки < >?

7. Приведите пример команды SQL для:

Ø  создания структуры новой таблицы и ее заполнения;

Ø  добавления (удаления) поля;

Ø  изменения значения данных в поле таблицы;

Ø  выбора данных в соответствии с заданными условиями;

Ø  создания в таблице нового поля путем производства математических действий над имеющимися полями;

Ø  создания новой таблицы из выбранных полей других таблиц.

8. Для каких целей в командах SQL используются операторы GROUP BY и ORDER BY?

9. Какое назначение имеют предикаты отбора All, Distinct, top?


Тема 10. СИСТЕМЫ ОБРАБОТКИ
           МНОГОПОЛЬЗОВАТЕЛЬСКИХ БАЗ ДАННЫХ


Дата добавления: 2019-02-12; просмотров: 248; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!