Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по Б/Д.doc
Скачиваний:
19
Добавлен:
25.04.2019
Размер:
389.63 Кб
Скачать

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

Стандарт поддерживает только два типа текстовый (char и varchar) и числовой(integer, decimal). Дата и время присутствуют практически во всех диалектах.

Типы данных языка SQL ядра базы данных Microsoft Jet включают 13 основных типов данных, определенных в ядре базы данных Microsoft Jet, и несколько синонимов, которые можно использовать вместо основных типов.

Далее перечислены основные типы данных. Синонимы описаны в разделе “Зарезервированные слова” SQL ядра базы данных Microsoft Jet.

  1. BINARY. 1 байт на символ. В поле этого типа могут храниться данные любого типа. Данные не преобразуются (например, в текстовые) и отображаются в том же виде, в каком они вводятся в это поле.

  2. BIT. 1 байт. Значения "Да" (Yes) и "Нет" (No), а также поля, содержащие одно из двух возможных значений.

  3. BYTE. 1 байт. Целое значение от 0 до 255.

  4. COUNTER. 4 байт. Число, автоматически увеличиваемое ядром базы данных Microsoft Jet при добавлении в таблицу новой записи. В ядре базы данных Microsoft Jet этому типу данных соответствует тип данных Long.

  5. CURRENCY 8 байт Масштабируемое целое от –922 337 203 685 477,5808 до 922 337 203 685 477,5807.

  6. DATETIME. Переменные типа Date (значения даты и времени) сохраняются как 64-разрядные (8-байтовые) числа с плавающей точкой стандарта IEEE, представляющие даты в диапазоне от 1 января 100 г. до 31 декабря 9999 г. и значения времени от 0:00:00 до 23:59:59. Переменным типа Date могут быть присвоены любые значения, задаваемые распознаваемыми датами в явном представлении (литералами даты)8 байт. (Дата или время) (см. DOUBLE); допустим любой год от 100 до 9999.

  7. GUID. 128 бит. Уникальный идентификатор, используемый при вызовах удаленных процедур.

  8. SINGLE. 4 байт. Число с плавающей точкой и одинарной точностью

от –3,402823E38 до –1,401298E-45 для отрицательных значений,

от 1,401298E-45 до 3,402823E38 для положительных значений или значение 0.

  1. DOUBLE 8 байт Число с плавающей точкой и двойной точностью

от –1,79769313486232E308 до –4,94065645841247E-324 для отрицательных значений,

от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений или значение 0.

  1. SHORT. 2 байт. Короткое целое от –32 768 до 32 767.

  2. LONG. 4 байт. Длинное целое от –2 147 483 648 до 2 147 483 647.

  3. LONGTEXT. 1 байт на символ. От 0 до 1,2 Гбайт.

  4. LONGBINARY. Не ограничено от 0 до 1,2 Гбайт. Используется для объектов ActiveX.

  5. TEXT. 1 байт на символ. От 0 до 255 символов.

Примечание. В инструкциях SQL допускается также использование зарезервированного слова VALUE.

Операторы манипулирования данными Оператор Select

Синтаксис

SELECT [предикат] { * | таблица.* | [таблица.]поле_1

[AS псевдоним_1] [, [таблица.]поле_2 [AS псевдоним_2] [, ...]]}

FROM выражение [, ...] [IN внешняяБазаДанных]

[WHERE... ]

[GROUP BY... ]

[HAVING... ]

[ORDER BY... ]

[WITH OWNERACCESS OPTION]

Аргументы инструкции SELECT:

ПРЕДИКАТ – один из следующих предикатов отбора: ALL, DISTINCT, DISTINCTROW или TOP. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL.

DISTINCT

Исключает записи, которые содержат повторяющиеся значения в выбранных полях. Чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными. Например, в таблице "Сотрудники" есть однофамильцы. Если две записи содержат значение "Иванов" в поле "Фамилия", то следующая инструкция SQL возвратит только одну из них:

SELECT DISTINCT

Фамилия

FROM Сотрудники;

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

DISTINCTROW – опускает данные, основанные на целиком повторяющихся записях, а не отдельных повторяющихся полях. Например, создан запрос, объединяющий таблицы "Клиенты" и "Заказы" по полю "Клиент". В поле "Клиент" таблицы "Клиенты" нет повторяющихся значений, однако, они есть в одноименном поле таблицы "Заказы", поскольку каждый клиент может разместить несколько заказов. Следующая инструкция SQL показывает, как можно использовать предикат DISTINCTROW для получения списка клиентов, разместивших хотя бы один заказ, без включения сведений о самих заказах:

SELECT DISTINCTROW Название

FROM Клиенты INNER JOIN Заказы

ON Клиенты.КодКлиента = Заказы.КодКлиента

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

TOP n [PERCENT]

Возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. Следующая инструкция SQL позволяет получить список 25 лучших студентов выпуска 2007 года:

SELECT TOP 25

Имя, Фамилия

FROM Студенты

WHERE ГодВыпуска = 2007

ORDER BY СреднийБалл DESC;

Если предложение ORDER BY будет опущено, запрос возвратит произвольный набор 25 записей из таблицы "Студенты", удовлетворяющих предложению WHERE. Предикат TOP не осуществляет выбор между равными значениями. Если в предыдущем примере средние балы двадцать пятого и двадцать шестого студента будут равны, то запрос возвратит 26 записей. Кроме того, можно использовать зарезервированное слово PERCENT для возврата определенного процента записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. Предположим, что вместо 25 лучших студентов следует отобрать студентов, попавших в последние 10 процентов:

SELECT TOP 10 PERCENT

Имя, Фамилия

FROM Студенты

WHERE ГодВыпуска = 2007

ORDER BY СреднийБалл ASC;

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

ТАБЛИЦА – имя таблицы, из которой отбираются записи.

* – Указывает, что выбраны все поля заданной таблицы или таблиц.

ПОЛЕ_1, ПОЛЕ_2 – имена полей, из которых должны быть отобраны данные. Если включить несколько полей, они будут извлекаться в указанном порядке.

ПСЕВДОНИМ_2, ПСЕВДОНИМ_2 – имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице.

ВЫРАЖЕНИЕ – имена одной или нескольких таблиц, которые содержат отбираемые данные.

внешняяБазаДанных – имя базы данных, которая содержит таблицы, указанные с помощью аргумента выражение, если они не находятся в текущей базе данных.

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

Инструкции SELECT не изменяют данные в базе данных. Обычно слово SELECT является первым словом инструкции SQL. Большая часть инструкций SQL является инструкциями SELECT или SELECT...INTO.

Ниже приведен минимальный синтаксис инструкции SELECT:

SELECT поля FROM таблица

Для отбора всех полей таблицы можно использовать символ звездочки (*). Следующая инструкция отбирает все поля из таблицы "Сотрудники":

SELECT * FROM Сотрудники;

Если несколько таблиц, включенных в предложение FROM, содержат одноименные поля, перед именем такого поля следует ввести имя таблицы и оператор “.” (точка). Предположим, что поле "Отдел" содержится в таблицах "Сотрудники" и "Начальники". Следующая инструкция SQL отберет поле "Отдел" из таблицы "Сотрудники" и поле "Начальник" из таблицы "Начальники":

SELECT Сотрудники.Отдел, Начальники.Начальник

FROM Сотрудники INNER JOIN Начальники

WHERE Сотрудники.Отдел = Начальники.Отдел;

При создании объекта Recordset ядро базы данных Microsoft Jet использует имя поля таблицы в качестве имени объекта Field в объекте Recordset. Если требуется другое имя поля, или выражение, создающее поле, не определяет имя, используйте зарезервированное слово AS. В следующем примере заголовок "Рождение" становится именем объекта Field в результирующем объекте Recordset:

SELECT [Дата рождения] AS Рождение

FROM Сотрудники;

При работе со статистическими функциями или запросами, которые возвращают повторяющиеся имена объекта Field, используйте предложение AS для задания другого имени объекта Field. В следующем примере заголовок "Численность" задается для возвращаемого объекта Field результирующего объекта Recordset:

SELECT COUNT(КодСотрудника)AS Численность

FROM Сотрудники;

Для дальнейшего отбора и организации искомых данных в инструкцию SELECT можно добавлять многие другие предложения.

FROM

Указывает таблицы или запросы, которые содержат поля, перечисленные в инструкции SELECT.

Синтаксис:

SELECT списокПолей

FROM выражение [IN внешняяБазаДанных]

Аргументы инструкции SELECT, содержащей предложение FROM:

ВЫРАЖЕНИЕ – выражение, определяющее одну или несколько таблиц, откуда извлекаются данные. Это выражение может быть именем отдельной таблицы, именем сохраненного запроса или результатом операции INNER JOIN, LEFT JOIN, или RIGHT JOIN.

внешняяБазаДанных – Полное имя внешней базы данных, содержащей таблицы, указанные в аргументе выражение.

Предложение FROM должно присутствовать в каждой инструкции SELECT. Порядок следования имен таблиц в аргументе выражение не существенен. Следующий пример показывает, как отобрать данные из таблицы "Сотрудники":

SELECT Фамилия, Имя

FROM Сотрудники;

WHERE

Определяет, какие записи из таблиц, перечисленных в предложении FROM, следует включить в результат выполнения инструкции SELECT, UPDATE или DELETE.

Синтаксис:

SELECT списокПолей

FROM выражение

WHERE условиеОтбора

Инструкция SELECT, содержащая предложение WHERE, состоит из трех частей:

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

Ядро базы данных Microsoft Jet отбирает записи, соответствующие условиям, перечисленным в предложении WHERE. Если не задавать предложение WHERE, запрос возвращает все строки таблицы. Если в запросе определить несколько таблиц и не включить предложение WHERE или JOIN, запрос будет возвращать скалярное произведение таблиц.

Предложение WHERE не является обязательным, однако, если оно присутствует, то должно следовать после предложения FROM. Например, можно отобрать всех сотрудников отдела продаж (WHERE Отдел = 'Продажи') или всех клиентов в возрасте от 18 до 30 лет (WHERE Возраст Between 18 And 30).

Допускается использование различных выражений. Например, следующая инструкция SQL отбирает всех сотрудников, зарплата которых превышает 810 000 рублей:

SELECT Фамилия, Оклад

FROM Сотрудники

WHERE Оклад > 810000;

Предложение WHERE может содержать до 40 выражений, связанных логическими операторами, такими как And и Or.

Имена полей, которые содержат пробелы или знаки препинания, необходимо заключать в квадратные скобки ([ ]). Например, в таблицу, содержащую сведения о клиентах, можно включить сведения о привычках клиентов:

SELECT [Любимый ресторан]

При указании аргумента условиеОтбора литералы даты символы дат должны вводиться в американском формате, даже если используется неамериканская версия ядра базы данных Jet. Например, дата 10 мая 1996 года записывается в России как 10.05.94, а в США как 5/10/94. Обязательно заключите даты в символы "решетки" (#), как показано в следующих примерах.

Для отбора записей с этой датой в российской базе данных необходимо использовать следующую инструкцию SQL:

SELECT *

FROM Заказы

WHERE ДатаИсполнения = #5/10/96#;

Кроме того, можно применять функцию DateValue, которая поддерживает международные стандарты, заданные в Microsoft Windows. Например, для отбора записей в американской базе данных можно использовать следующий текст программы:

SELECT *

FROM Заказы

WHERE ДатаИсполнения = DateValue('5/10/96');

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

SELECT *

FROM Заказы

WHERE ДатаИсполнения = DateValue('10.5.96');