Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД SQL.docx
Скачиваний:
4
Добавлен:
27.08.2019
Размер:
2.1 Mб
Скачать

Примечание:

На практике не всегда возможно получить полностью нормализованную БД. Иногда к этому даже и не стремятся в силу различных особенностей построения БД: например, когда число таблиц велико, то удержать в памяти всю структуру БД не позволяет воз­можность человеческого восприятия. Или если число повторяющихся групп известно за­ранее и никогда меняться не будет, по приведению таблицы к 1НФ по повторяющимся группам необязательно.

60

Пример разработки РБД

Пусть необходимо разработать БД, где будут учтены: товары, сорта товаров, количество товара, цена товара, дата поступления, дата покупки, фирмы-поставщики товаров, поку­ патели

Разделим информацию по сущностям.

Первая сущность (стержневая), назовем ее - «Поставщик», включает в себя следующие объекты.

  • Название фирмы поставщика.

  • Факс фирмы.

Вторая сущность (стержневая), назовем ее — «Товар», включает в себя следующие объ­екты.

  • Вид товара.

  • Сорт товара.

Третья сущность назовем ее - «Клиенты», включает в себя следующие объекты.

• Название клиента.

Учитывая назначение БД, нормализуем сущности, и с учетом обеспечения целостности БД, составим структуру реляционных отношений.

РК_Ф,РК_Т, РК_С, РК_Скл, РК_К, первичные ключи в своих таблицах. FK_Ф. FK_T, FK_C, FK_Cкл, FK_K, внешние ключи.

В таблице «Склад» учитываются: какие товары, какого сорта, каким поставщиком, когда и в каком количестве были поставлены на склад, а так же цена за единицу товара.

В таблице «Учет» учитываются: когда, и в каком количестве, клиент приобрел товар. А наличае связи РК_Скл —> FК_Скл сразу определяет полную характеристику приобре-

тенного товара (вид, сорт, цена ).

Ниже приведена структура БД в заполненных таблицах.

61

ЯЗЫК SQL

Язык SQL является инструментом, предназначенным для обработки (чтения, удаления, изменения) данных, содержащихся в БД.

SQL - это сокращенное название языка запросов (Structured Query Language). Как следует из названия, SQL является языком программирования, который применяется для органи­зации взаимодействия пользователя с базой данных.

Достоинства SQL

  • независимость от конкретных СУБД;

  • переносимость с одной вычислительной системы на другую;

  • наличие стандартов;

  • реляционная основа;

  • высокоуровневая структура;

  • возможность выполнения специальных интерактивных запросов;

  • обеспечение программного доступа к базам данных;

  • возможность различного представления данных.

Инструкция SELECT... FROM

По этой инструкции возвращаются данные из базы данных в виде набора записей.

Простейшая инструкция SELECT ... FROM

Синтаксис

S ELECT FROM

имена полей имена таблиц;

Элемент

имена полей

имена таблиц

Описание

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

Имена одной или нескольких таблиц, которые содержат от­бираемые данные.

64

1. Простейший запрос для одной таблицы SELECT поле1, поле2,....поле7 FROM таблица;

SELECT * FROM таблица;

(*- означает, по будут показаны все поля)

2. Простейший запрос для двух таблиц

SELECT таблица 1.поле 1, таблппа2.поле1. ... . таблица1.полеN FROM таблица1, таблица2;

Примечание: Имя таблицы необходимо применять в том случае: если имена по­лей в таблицах одинаковы.

Использование псевдонимов таблиц

SELECT таблица1.поле1, таблица2.поле1 FROM таблица 1, таблица2;

SELECT Tl. полеl, Т2.поле1 FROM таблица1 T1 таблица2 Т2;

Использование псевдонимов полей.

SELECT поле1, поле2, полеЗ AS Фамилия

FROM таблица;

Внимание! !!

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

SELECT [Год рождения] -замена псевдонимом > SELECT [Год рождения] AS Год

Пример: Простейший запрос для одной таблицы с использованием псевдонима поля.

SELECT [Фамилия студента] AS Фамилия, Оценка FROM Студенты;

Студенты

П рименение вычислений в полях

Пример: Товары

Арифметические выражения используются для расчета значений вычисляемых полей. При формировании вычисляемых полей следует придерживаться правил написания вы­ражений. Выражение пишется вместо имени поля.


SELECT Товар, Количество * Цена FROM Товары;

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

SELECT Товар, Количество * Цена AS Стоимость FROM Товары;

бб

Инструкция SELECT...INTO...FROM

- •

До сих пор инструкция SELECT создавала виртуальную таблицу, которая не сохранялась в базе данных. Для создания реальной таблицы как результат обработки существующих таблиц, исполь­зуется запрос SELECT...INTG...FROM Синтаксис

SELECT поле1, поле2 ,... INTO новая Таблица

FROM Таблица1, Таблица2, ....

Ниже перечислены аргументы инструкции SELECT...INTO ....FROM: Элемент Описание

noлel, поле2 Имена полей, которые следует скопировать в новую таблицу.

Имя создаваемой таблицы. Это имя должно удовлетворять стандарт­ным правилам именования. Если новая Таблица совпадает с именем существующей таблицы, возникает перехватываемая ошибка.

Таблица1.,Таблица2..., Имена существующих таблиц, из которых отбираются записи. Это мо­жет быть одна таблица, несколько таблиц или запрос.

Дополнительные сведения

Запрос на создание таблицы можно использовать для архивирования записей, созда­ния резервных копий таблицы, копий для экспорта в другую базу данных, а также в каче­стве основы отчета, отображающего данные за конкретный период времени. Например, можно создать отчет «Ежемесячные продажи по областям», выполняя каждый месяц один и тот же запрос на создание таблицы.

Примечания

  • При создании таблицы поля в новой таблице наследуют типы данных и размеры базовых полей; никакие другие свойства таблиц и полей не передаются.

  • Чтобы узнать, какие записи будут отобраны при выполнении запроса на создание

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

Новая Таблица.

Пример:

SELECT Фамилия, Оклад INTO Отчет

67


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

П редложение ORDER BY

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

Синтаксис

SELECT список Полей FROM таблица WHERE условие Отбора

поле1, поле2 Имена полей, по которым сортируются записи.

ASC сортировки по возрастанию (от «А» до «Я» и от 0 до 9).

DESC сортировки по убыванию (от «Я» до «А» и от 9 до 0).

По умолчанию используется порядок сортировки по возрастанию (от «А» до «Я» и от 0 до 9).

П редложение ORDER BY может содержать несколько полей. Сначала записи сортируются по первому полю в списке ORDER BY. Затем записи, имеющие совпадающие значения в первом по­ле, сортируются по второму полю и т.д.

П редложение ORDER BY является необязательным. Однако оно необходимо для отобра­жения данных в порядке сортировки.

Обе приведенные ниже инструкции SQL одинаково сортируют записи по фамилиям со­трудников:

SELECT Фамилия FROM Сотрудники

ORDER BY Фамилия ASC;

SELECT Фамилия FROM Сотрудники

ORDER BY Фамилия;

Пример (Сортировка по Окладу, а затем по Фамилии)

SELECT Фамилия, Оклад INTO Отчет

FROM Сотрудники

ORDER BY Оклад DESC, Фамилия;

Сотрудники Отчет

68

Предложение WHERE

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

Синтаксис

SELECT имена полей

FROM имена таблиц

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

Элемент

Условие Отбора

Описание

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

Предложение WHERE не является обязательным, однако, если оно присутствует, то должно следовать после предложения FROM.

Операции отношения

Простой отбор. Операции отношения ( =, <, >, о, >=, <= )

Допускается использование различных операций отношения. = равно, < меньше,

> больше, <= меньше или равно, >= больше или равно, о не равно.

1. Следующая инструкция SQL отбирает всех сотрудников, зарплата которых превышает 10 000 рублей:

SELECT Фамилия, Оклад FROM Сотрудники WHERE Оклад > 10000;

2. Отобрать всех сотрудников отдела продаж

SELECT Фамилия FROM Сотрудники WHERE Отдел = "Продажи"; Пример:

SELECT Фамилия, Оклад FROM Сотрудники WHERE Оклад >= 4000 Сотрудники

69

Логические выражения AND, OR, NOT, BETWEEN, IN

Отбор с использованием логических выражений AND, OR. NOT. BETWEI

Предложение WHERE может содержать выражения, связанные логически* ми, такими как AND, OR, NOT, BETWEEN IN.

Применение AND, OR

Выдать записи, если возраст человека лежит в диапазоне больше 22 или

больше 50.

Пример:

SELECT [Фамилия], Возраст

FROM Сотрудники

WHERE ((Возраст >22) And (Возраст < 30)) Or Возраст > 50;

Отбор с использованием логических выражений IS NULL.

Применяется в WHERE для отбора записей, в которых некоторое поле содержит з NULL (ничего нет).

Пример

Показать фамилии сотрудников не имеющих телефона.

SELECT Фамилия, Телефон

FROM Сотрудники

WHERE Телефон IS NULL;

Сотрудники

Показать фамилии сотрудников имеющих факс.

SELECT Фамилия, Факс FROM Сотрудники WHERE Факс IS NOT NULL; Сотрудники

70

Применение BETWEEN ... AND / (NOT BETWEEN...AND).

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

Синтаксис

SELECT имена полей

FROM имена таблиц

WHERE выражение [Not] Between значение1 And значение2;

1. Выдать записи, если возраст человека лежит в диапазоне от 22 до 30.

Например:

SELECT Фамилия, Возраст

FROM Сотрудники

WHERE Возраст BETWEEN 22 And 30;

2. Выдать записи, если возраст человека НЕ лежит в диапазоне от 22 до 30.

Пример:

SELECT Фамилия], Возраст

FROM Сотрудники

WHERE Возраст NOT BETWEEN 22 And 30;

Применение IN (NOT IN)

Проверяет, совпадает ли значение выражения с одним из элементов указанного списка.

Синтаксис

SELECT имена полей

FROM имена таблиц

WHERE выражение [Not] In (значение1, значенпе2. ...)

1. Выдать записи, если возраст человека равен 18 или 55.

Пример:

SELECT Фамилия, Возраст

FROM Сотрудники

WHERE Возраст IN (18,55);

Студенты

2. Выдать записи, если возраст человека НЕ равен 18 или 55. Пример:

SELECT Фамилия, Возраст

FROM Сотрудники

WHERE Возраст NOT IN (18,55);

Студенты

3. Выдать расписание поездов по вокзалам.

Пример:

SELECT Вокзал, Направление, День, Время FROM Расписание

WHERE Вокзал NOT IN ('Киевский'); Поясните, какое расписание будет выдано?

Онератор LIKE

Используется для сравнения строкового выражения.

Синтаксис

SELECT имена полей

FROM имена таблиц

WHERE выражение Like "образец"

Элемент Описание

выражение Выражение SQL, используемое в предложении WHERE. образец Строка, с которой сравнивается выражение.

Дополнительные сведения

Оператор Like используется для нахождения в поле значений, соответствующих указан­ному образцу. Для аргумента образец можно задавать полное значение (например, Like

"Иванов") или использовать подстановочные знаки для поиска диапазона значений (на­пример. Like "Ив*")-

Оператор Like используется в выражении для сравнения значений поля со строковым выражением. Например, если в запросе SQL ввести Like "с*", запрос возвратит все зна­чения поля, начинающиеся с буквы "С". В запросе с параметрами можно пригласить пользователя, указать искомый образец.

В следующем примере возвращаются данные, начинающихся с буквы «Р», за которой следуют любые буквы от «А» до «Д» и три цифры:

Like "Р[А-Д]###"

Следуюшая таблица содержит примеры использования оператора Like для тестирования

выражений с помощью разных образцов.

* - Любое количество, любых символов ? - Один, любой символ

# - Одна, любая цифра

Тип совпадения

Образец

Совпадение (True)

Несовпадение (False)

Несколько знаков

а* а

аа, аВа, аВВВа

аВС

*ab*

abc, AABB,Xab

aZb, bac

Специальный знак

а[*]а

а*а

ааа

Несколько знаков

аb*

abcdefg, abc

cab, aab

Одиночный знак

а?а

ааа, аЗа, аВа

аВВВа

Одиночная цифра

а#а

аОа, а 1а, а2а

ааа, а 10а

Диапазон знаков

[a-z]

f,p,j

2, &

Вне диапазона

[!a-z]

9, &, %

b, a

Не цифра

[!0-9]

А, а, &, ~

0, 1,9

Комб, выражение

a[!b-m]#

An9, azO, a99

abc, ajO

73

Работа с символами даты

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

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

SELECT *

FROM Заказы

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

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

SELECT *

FROM Заказы

WHERE ДатаИсполнения = DateValue('5/10/96'); Для российской базы данных, текст программы будет выглядеть так:

SELECT *

FROM Заказы

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

Пример:

SELECT [Наименование товара] AS Товар, Годность

FROM Товары

WHERE Годность <= #5/7/96#;

ИТОГОВЫЙ ПРИМЕР

Пусть имеется таблица Товары. Создать итоговую таблицу с наименованием товара и

стоимостью не проданного товара при условии, что стоимость непроданного товара должна быть больше ...

SELECT Товар, (Количество * Цена) AS Стоимость