Слайд 1Введение в язык SQL
Построение запросов
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 2Построение простых запросов на SQL к одной таблице
Тема занятия: Построение запросов
в Access (QBE и SQL) к одной таблице БД, изменение списка имен столбцов в запросе, вставка текстовых столбцов, запросы с условиями
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 31.1. Построение запроса в QBE и просмотр его в режиме SQL
Важным
моментом методики освоения конструкций языка SQL является освоение приема создания запросов с помощью конструктора запросов (QBE - Query By Example) и просмотра созданного запроса в редакторе SQL.
Для построения учебных запросов будем использовать базу данных Avto.mdb, которая состоит из таблиц: Salespeople, Customers, Price, Orders
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 4Пример базы данных Avto.mdb
Схема базы данных Avto.mdb в Access
к.т.н. Герасимов Н.А.,
Магин Б.Е.
Слайд 5Построение запроса в QBE
(Query By Example)
В СУБД Access для построения
запросов к базе данных существует простой и удобный инструмент – конструктор (или мастер) построения запросов, называемый QBE , использование которого заключается в следующем:
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 6Выбор закладки «ЗАПРОСЫ»
- надо войти в закладку ЗАПРОСЫ;
- выбрать режим
«Создать» запрос с помощью «Конструктора запросов» (на экране появится макет запроса как показано на рис. ниже);
- на верхнем поле конструктора надо разместить таблицу Salespeople (для этого можно использовать кнопку ДОБАВИТЬ);
- затем для создания нашего запроса надо из макета таблицы Salespeople мышкой перетащить «звездочку» (*) в макет запроса (в первый столбец первой строки (Поле:) ). После правильного выполнения этих процедур получается макет запроса, как показано на рис.1.
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 7Выбор режима «Запросы»
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 8Рабочее окно построителя запросов QBE (Query By Example)
Поле для выбора таблиц
к.т.н.
Герасимов Н.А., Магин Б.Е.
Слайд 9Пример запроса к одной таблице
Макет простого запроса к таблице Salespeople, построенный
в конструкторе на QBE
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 10Запуск запроса на исполнение
Для выполнения запроса нажмите пиктограмму [!], которая находится
в центре сроки пиктограмм.
В результате выполнения запроса, получится таблица, которая отображает все строки и все столбцы таблицы Salespeople (см. рис. ниже.).
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 11Результат простейшего запроса
Результат выполнения запроса, сконструированного на QBE (см. рис.).
Запрос: «Выбрать
все столбцы и все строки из таблицы Salespeople»
Слайд 12Внимание!
Замечательная особенность конструктора QBE в Access состоит в том, что параллельно
с табличной формой конструирования запроса создается и SQL- выражение, которое можно просмотреть и отредактировать с помощью специального режима «SQL».
Теперь перейдем в режим SQL, для чего выполним следующее:
Вид→SQL,
и получим отображение созданного запроса на языке SQL, который будет иметь вид как показано на рис.3. Внимательно рассмотрим его и убедимся, что его структура полностью соответствует синтаксису команды SELECT в языке SQL, которая в общем виде может представлена следующей структурой:
Слайд 13Вид запроса в SQL
SELECT Salespeople.*
FROM Salespeople;
Слайд 14Структура запроса SELECT
SELECT
FROM
[WHERE ]
[ORDER BY
<условия сортировки>]
[GROUP BY <условия группировки>];
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 15Пояснения
где SELECT, FROM, WHERE, ORDER BY, GROUP BY ключевые слова языка
SQL,
[ ] – обозначает необязательное присутствие термов,
<список столбцов> - задает список выводимых столбцов, разделенных запятой ( в нашем случае выбраны все столбцы, что обозначено специальным символом «звездочка» ),
<таблица> - задает имя таблицы (или нескольких объединенных таблиц), из которой происходит выбор строк ( в нашем случае таблица Salespeople).
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 16SELECT * FROM Salespeople;
В нашем запросе, созданным с помощью QBE используются
только ключевые слова SELECT и FROM. Другие ключевые слова (WHERE, ORDER BY и т.п.) в запросе отсутствуют, поэтому в данном случае запрос имеет вид как показано выше. Этот запрос выводит все строки и все таблиц таблицы Salespeople
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 17Редактирование SQL запроса
Пример сконструированного запроса на языке SQL
Вид SQL запроса после
редактирования:
SELECT * FROM Salespeople;
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 18Пояснение:
Используя встроенный текстовый редактор, отредактируем полученный запрос (рис. выше) до вида
как показано на рис ниже и еще раз запустим запрос на исполнение с помощью пиктограммы [!]. Убедимся, что результат выполнения запроса не изменился.
Таким образом, мы можем не только, просматривать запросы в режиме SQL, что само по себе весьма поучительно, но и конструировать любые требуемые запросы на языке SQL, а затем выполнять их в среде СУБД Access.
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 19Окончательный вид отредактированного SQL запроса
Вид отредактированного запроса в режиме редактора
SQL.
Утверждение: Созданный в QBE запрос можно легко и удобно корректировать в режиме редактора SQL
Слайд 20Изменение SQL запроса
Чтобы убедиться в правильности нашего утверждения, добавим в созданный
запрос условие на отбор строк из таблицы Salespeople. Предположим, что нам надо получить список продавцов, которые живут в городе Москве (т.е. отобрать все записи, которые удовлетворяют условию: WHERE saddress = “Москва”). И так, наш запрос на SQL будет выглядеть так:
SELECT * FROM Salespeople
WHERE saddress = “Москва”.
Слайд 21Запуск созданного SQL запроса на исполнение
Используя пиктограмму [!], запустим созданный запрос
на исполнение и получим следующую таблицу, которая отображена на рис. ниже. Отобраны только 3-и строки, которые удовлетворяют заданному условию: продавцы живут в городе Москва.
Слайд 22Результат выполнения SQL запроса с условием
Пример простого запроса с условием.
SELECT
* FROM Salespeople FROM WHERE saddress = “Москва”
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 23Замечание:
При формировании условия значения текстовых столбцов должны браться в кавычки (двойные
или одинарные), столбцы дат – в «решетки» (#).
Примеры:
SName = “Иванов”
ODate > #10/02/2010#
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 24Возврат из QBE в SQL
Теперь вернемся в режим представления запроса в
форме QBE (режим Конструктор). Для этого выполним
Вид → Конструктор,
на экране получим форму запроса как показано на рис.6.
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 25Просмотр запроса SQL
в режиме QBE
Созданный в SQL запрос с условием
можно просмотреть в режиме конструктора.
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 26Возврат из режима QBE в режим SQL
Запрос, созданный в QBE, в
режиме SQL будет выглядеть так (для перехода в режим SQL выполни Вид→SQL):
SELECT Salespeople.*
FROM Salespeople
WHERE (((Salespeople.saddress)="Москва"));
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 27Замечание:
Язык SQL не чувствителен к регистру, на котором пишутся ключевые слова
(например, SELECT и select будут восприниматься одинаково), однако рекомендуется выделять ключевые слова, используя регистр заглавных букв. Кроме того, конструктор при автоматическом построении запросов расставляет много круглых скобок, которые можно удалить при редактировании.
Слайд 28Пример отредактированного запроса с условием
Например, выше приведенный запрос можно отредактировать, упростить
и представить так:
SELECT * FROM Salespeople WHERE saddress ="Москва";
Слайд 29Резюме:
Таким образом, построенные в SQL запросы удобно просматривать в QBE, где
запрос можно изменить и проверить его корректность, а затем снова вернуться в режим SQL и редактировать запрос в режиме текстового редактора. Такой способ может стать основой быстрого проектирования SQL-запросов («экспресс» технологии), которые затем могут использоваться в других приложениях (например, в VBA или в Web-приложениях).
Слайд 301.2. Задание списка имен столбцов и изменение имен столбцов в запросе.
При
формировании запросов можно указывать список выводимых столбцов и накладывать ограничения на выбранные строки, путем формирования сложных условий отбора записей.
Построить запрос, который отображает нужный набор столбцов (например, snum, sname, semail):
SELECT snum, sname, semail FROM Salespeople;
Слайд 31Запрос с селекцией столбцов
Результат выполнения запроса.
SELECT snum, sname, semail FROM
Salespeople;
Слайд 32Переименование столбцов
Не редко необходимо переименовать столбцы в запросе, для этого к
имени каждого столбца добавим синоним, используя ключевое слово AS и переделаем запрос следующим образом:
SELECT snum AS Номер, sname AS Фамилия , semail AS Почта FROM Salespeople;
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 33Запрос с изменение имен столбцов
Результат выполнения запроса с переименованием столбцов
SELECT
snum AS Номер, sname AS Фамилия , semail AS Почта FROM Salespeople;
Слайд 34Внимание!
Таким образом порядок выбранных столбцов и наименования, которые будут выводится в
результате выполнения запроса , определяются в ключевом слове SELECT.
Замечание. Использование синонимов столбцов (с помощью ключевого слово AS), позволяет разработчикам баз данных не использовать кириллицу в именах столбцов на этапе физического проектирования базы данных
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 351.3. Построение запросов со сложными условиям
В языке SQL условия отбора записей
из таблицы задаются ключевым словом WHERE, а при формировании сложные условий используются следующих основные правила:
Слайд 36Таблица символов для формирования условия отбора строк
Правило 1. Для формирования простого
условия можно использовать набор символов, который показан в таблице ниже:
= Равно
> Больше
>=Больше или равно
< Меньше
<=Меньше или равно
<>Не равно
Слайд 37Пример запроса с простым условием
Отобрать все товары (т.е. строки из таблицы
price), которые имеют цену больше или равную (>=) 3000.
SELECT pnun AS номер , pname AS наименование, price AS цена
FROM price
WHERE price>=3000;
Слайд 38
Результат выполнения запроса с условием (price>=3000).
SELECT pnun AS номер , pname
AS наименование, price AS цена
FROM price
WHERE price>=3000;
Слайд 39Правило 2.
Для логического соединения простых условий и создания сложного условия используются
логические операторы (ЛО):
OR- Логическое «ИЛИ»
AND- Логическое «И»
NOT- Не равно
Слайд 40Пример запроса со сложным условием
Дополним условие предыдущего запроса еще одним ограничением
по дате регистрации продукта в прайсе (например, pdate>#12/14/2005#;).
Иначе говоря, надо отобрать все строки с товарами, которые имеют цену больше или равную 3000 и зарегистрированы позднее 12/14/2005.
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 41Пример SQL запроса со сложным условием
На языке SQL запрос выглядит следующим
образом:
SELECT price.pnun AS номер, price.pname AS наименование, price.price AS цена, price.pdate
FROM price
WHERE price>=3000 AND pdate>#12/14/2005#;
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 42Результат выполнения запроса
Выполнение запроса с условием (price>=3000 AND pdate>#12/14/2005#)
SELECT price.pnun
AS номер, price.pname AS наименование, price.price AS цена, price.pdate
FROM price
WHERE price>=3000 AND pdate>#12/14/2005#;
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 43Рекомендация
Рассмотрите этот запрос в режиме QBE.Здесь Вы заметите, что условие AND
формируется соседними столбцами. Оно указывает, что отбираются записи, которые удовлетворяют и первому и второму условиям одновременно (логическое «И»).
Слайд 44Просмотр запроса со сложным условием в QBE
Запрос в формате QBE
со сложным условием (price>=3000 AND pdate>#12/14/2005#)
Слайд 45Запрос с логической связкой OR
Сформулируем запрос со сложным условием, который использует
логическую связку «ИЛИ» (OR).
Например, надо отобрать все строки прайса для автомобилей «Волга» и «Ауди». ( т.е. условие WHERE pname="Волга" OR pname ="Ауди")
Слайд 46Вид SQL запроса с логической связкой OR
SELECT pnum AS
номер, pname AS наименование, price AS цена
FROM price
WHERE pname="Волга" OR pname ="Ауди" ;
Слайд 47Замечание:
Логический оператор «ИЛИ» соответствует обычному (бытовому) пониманию союза «и» (т.е. можно
интерпретировать этот логический оператор как «и тот и другой»).
В режиме QBE запрос со связкой «ИЛИ» выглядит так, как показано на рис.ниже. Условия располагаются в одном столбце и связываются союзом «ИЛИ».
Слайд 48Вид запроса с логическим оператором OR в QBE
Построение запроса со сложным
условием (pname="Волга" OR pname ="Ауди")
Слайд 49Результат выполнения SQL запроса
Результат выполнения запроса с логическим условием «ИЛИ» (pname="Волга"
OR pname ="Ауди") показан на рис. ниже.
Отобраны только две строки, в которых наименования автомобилей удовлетворяют заданным условиям.
Слайд 50Результат выполнения запроса
Пример запроса со сложным условием «ИЛИ» (pname="Волга" OR pname
="Ауди")
SELECT pnum AS номер, pname AS наименование, price AS цена
FROM price
WHERE pname="Волга" OR pname ="Ауди" ;
Слайд 51Правило 3.
Когда много простых условий связано большим числом логических связок, порядок
проверки условий, можно регулировать расстановкой круглых скобок.
Сначала проверяется условие, которое находится внутри самых «глубоких» скобок.
Слайд 52Пример SQL запроса со сложным логическим условием
Пусть задано сложное условие вида
((<условие C >ЛО2(<условие A>ЛО1< условие B>))ЛО3< условие D > ),
в котором используются 4-ре простых условия A, B, C и D, соединенные тремя логическими операторами ЛО1, ЛО2 и ЛО3. Последовательность исчисления логического предиката будет следующая:
Сначала вычисляется <условие A> и < условие B> и выполняется логическая связка ЛО1;
Затем вычисляется <условие C > и выполняется ЛО2;
В заключении вычисляется < условие D > ) и выполняется ЛО3.
Слайд 53SQL запрос со вложенной структурой условий
Рассмотрим запрос со вложенной структурой условий.
Например, надо построить таблицу, в которой будут отобраны строки из таблицы Price, удовлетворяющие следующим условиям:
SELECT pnum AS Номер, pname AS Наименование, price AS Цена
FROM price
WHERE (( pnum ='3001' Or pnum ='3003')
AND ( pdate <=#12/16/2005#) AND ( pdate >=#12/14/2005#)
AND ( price >3000));
Слайд 541.4. Вставка текстовых столбцов
В запросы можно вставлять текстовые столбцы, которые
облегчают понимание результатов. Например в запросе ниже вставлено два столбца: «Наименование» и «цена».
SELECT pnum AS НОМЕР, 'Наименование' , pname AS НАЗВАНИЕ, 'Цена' , price AS ЦЕНА
FROM price
WHERE pnum ='3003' ;
Слайд 55Вставка текстовых столбцов
Пример запроса со вставленными текстовыми столбцами
SELECT pnum AS НОМЕР,
'Наименование' , pname AS НАЗВАНИЕ,
'Цена' , price AS ЦЕНА FROM price WHERE pnum ='3003' ;
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 561.5. Вычисляемые столбцы
Следуя принципу минимизации хранимой информации, обычно в реляционных таблицах
не хранятся столбцы, значения которых может быть получено на основании данных из других столбцов.
к.т.н. Герасимов Н.А., Магин Б.Е.
Слайд 57Запрос с вычисляемым полем
Вывести список заказов (только номера) и вычислить сумму
заказа (произведение цены на стоимость)
к.т.н. Герасимов Н.А., Магин Б.Е.