
- •Вводный раздел
- •1. Информационные системы. Основные понятия
- •Моделирование информационных систем
- •2. Архитектуры распределенного приложения с базой данных. Функции клиента и сервера при различных вариантах расслоения. Типовые клиенты доступа к бд на основе различных технологий.
- •Модель Клиент – Сервер
- •Трехуровневая модель
- •Распределенная (многоуровневая) модель
- •4 Технологии программ расширений
- •Тема 1. Средства взаимодействия клиента и сервера бд
- •1.1 Сервисы сети Internet. Сетевая архитектура osi.
- •1.2 Протоколы прикладного уровня в стеке tcp/ip. Унифицированный локатор ресурса при работе с бд
- •1.3 Блоки данных в стеке протоколов
- •Тема 2. Удаленные базы данных
- •2.1 Понятие удаленных баз данных
- •2.2 Инструментальные средства проектирования структуры бд. Утилиты автоматизированного проектирования бд.
- •2.3 Характеристика субд удаленного доступа
- •Тема 3. Разработка и эксплуатация серверной части
- •3.1 Проектирование структуры базы данных (на самостоятельное изучение) Вопросы для самостоятельной работы
- •3.2 Создание баз данных, таблиц и индексов
- •Удаление баз данных, таблиц
- •Изменение структуры таблиц
- •3.3 Типы данных в MySql
- •Integer и его вариации
- •3.4 Методы заполнения полей базы данных Использование insert
- •Использование replace
- •Использование delete
- •Использование truncate
- •Использование update
- •Загрузка данных с помощью load data infile
- •Тема 4. Разработка и эксплуатация клиентской части.
- •4.1 Простые запросы
- •4.2 Выбор строк с помощью where
- •Удаление повторений с помощью distinct
- •Выбор групп с помощью having
- •Сортировка результатов поиска с помощью order by
- •Ограничение результатов поиска с помощью limit
- •4.4 Сложные запросы Объединение двух таблиц
- •Объединение нескольких таблиц
- •Самообъединение таблиц
- •Типы объединений
- •4.5 Создание подзапросов
- •4.6 Встроенные функции MySql
- •Операторы
- •Типы таблиц MySql
- •Тема 5. Язык html как средство внешнего представления данных.
- •5.1 Основные правила проектирования пользовательского интерфейса
- •5.2. Построение абзацев в гипертекстовом документе
- •5.3 Построение заголовков в гипертекстовом документе
- •Тема 6. Разработка бизнес-слоя и интерактивных компонентов
- •6.1 Perl как средство разработки программ –приложения
- •6.2 Типы данных в Рerl
- •Переменные
- •Скалярные переменные
- •Массивы
- •Ассоциативные массивы
- •6.3 Конструкции языка Рerl Простые и составные операторы
- •Условные операторы
- •Оператор unless
- •Оператор do
- •Циклы и ветвления
- •Цикл until
- •Циклы for и foreach
- •Оператор безусловного перехода goto
- •Генерация динамических выражений с помощью функции eval
- •6.4 Подпрограммы
- •Использование пакетов для изоляции подпрограмм
- •6.5 Операторы языка Perl .Операторы сравнения
- •Логические операторы
- •6.6 Работа с файлами и строками
- •Функция chop
- •Функция index
- •Функция length
- •Функция substr
- •Функция join
- •Функция split
- •Функции для обработки списков
- •Функция reverse
- •Функция sort
- •Функции работы с массивами
- •Функции push и pop
- •Функция shift
- •Функция unshift
- •Функция splice
- •Функция scalar
- •Функция grep
- •Функции обработки ассоциативных массивов
- •Функция keys
- •Функция values
- •Функция each
- •Функция delete
- •Пример скриптов для выполнения практического задания
- •1. Добавление информации в базу (на примере винного погреба -добавление страны)
- •Часть 1
- •Удаление информации из базы (удаление страны)
- •Часть 2
- •Часть 3
- •Поиск информации в базе данных
- •Занесение новой информации во все таблицы базы данных
- •Часть 1
- •Часть 2
4.5 Создание подзапросов
Подзапрос — это запрос внутри другого запроса, т.е. запрос, в котором используются результаты другого запроса. Иногда подзапросы называют вложенными запросами или подвыборками.
Подзапросы производных таблиц
Подзапросы производных таблиц дают возможность указать запрос в выражении FROM другого запроса. По сути это позволяет создать временную таблицу и добавить ее в запрос. Например, рассмотрим следующий простой запрос:
select employeelD, name from employee where job='Программист';
Должно быть очевидным, что этот запрос возвратит имена и кодовые номера всех программистов. Можно использовать этот запрос в рамках другого, чтобы получить дополнительную информацию:
select programmer.name
from (select employeeID, name from employee where job='Программист')
as programmer,
assignment
where programmer.employeelD = assignment.employeelD;
В данном случае мы используем подзапрос (select employeelD, name from employee where job='Программист') для создания производной таблицы, содержащей только employeelD и name, которой мы назначаем псевдоним programmer. После этого к созданной таблице можно обратиться с запросом, как к любой другой. В данном случае мы используем эту таблицу для того, чтобы выяснить, кто из программистов работал над выполнением внешних заданий и получаем следующий результат
Подзапросы с одним значением
Как и в предыдущем разделе, мы начинаем с простого запроса
select max(hours) from assignment;
Он возвращает одно значение, представляющее собой максимальное время (в часах), которое работник потратил на выполнение задания. Здесь используется функция MySQL, которую мы не еще упоминали, — функция
max (),
возвращающая максимальное значение соответствующего столбца. Использование результатов, возвращенных такими функциями, является типичным примером применения подзапросов с одним значением.
Подзапросы с одним значением возвращают одно значение столбца и обычно используются для сравнения. Рассмотрим, например, следующий запрос:
select e.employeeID, e.name
from employee e, assignment a
where е. employeeID = a. employeeID
and a.hours = (select max(hours) from assignment);
Здесь мы пытаемся найти того, кого можно назвать "ломовой лошадью" компании: кто из служащих потратил больше всех времени на выполнение задания? Вот результат выполнения такого запроса:
Подзапросы в логических выражениях
Подзапросы в логических выражениях используются для проверки истинности результата некоторых специальных функций, возвращающих значения типа BOOLEAN. Такими специальными функциями являются IN, EXISTS, а также ALL, ANY и SOME.
Ключевое слово IN используется для проверки принадлежности к некоторому множеству значений. Рассмотрим следующий запрос:
select name
from employee
where employeelD not in
(select employeeID
from assignment);
Этот запрос даст тот же результат, что и запрос, рассмотренный выше в примере применения LEFT JOIN. Он позволяет найти служащих, которые не имели внешних заданий. Ключевое слово IN позволяет провести поиск в некотором множестве значений. Здесь мы получим то же, что и от вышеприведенного запроса с LEFT JOIN:
select name
from employee
where employeeID not in (6651, 1234);
Ключевое слово EXISTS работает лишь немного по-другому по сравнению со словом IN. При использовании EXISTS мы на самом деле используем в подзапросе данные некоторого внешнего запроса. Такой запрос иногда называют связанным подзапросом.
Рассмотрим следующий пример:
select e.name, e.employeeID
from employee e
where not exists
(select *
from assignment
where employeelD = e.employeelD);
Здесь нам нужно получить список служащих, которые никогда не работали над внешними заданиями.
В подзапросе мы ищем строки таблицы assignment, в которых значение employeeID совпадает со значением employee.employeeID. Значение е.employeelD получено от внешнего запроса. На самом деле MySQL здесь делает следующее. Для каждой строки из таблицы employee проверяются результаты подзапроса, и в случае отсутствия соответствия (WHERE NOT EXISTS) информация о служащем добавляется в результирующее множество.
Некоторые пользователи находят такой синтаксис более простым для понимания, но тот же результат можно получить и при помощи LEFT JOIN, как это было сделано выше. Использование LEFT JOIN, кроме того, будет более эффективным, и, таким образом, соответствующий запрос будет выполнен быстрее. Запрос предоставит точно такой же результат
Ключевые слова ALL, ANY и SOME используются для сравнения с набором значений, возвращенных подзапросом.
Предположим, что Нора Эдварде, которая, если вы помните, является наиболее загруженным программистом, поставит задачу доказать, что никто не работает больше программистов. Чтобы установить этот факт, она создаст следующий запрос:
select e.name
from employee e, assignment a
where e.employeeID = a.employeeID and a.hours > all
(select a.hours
from assignment a, employee e
where e.employeeID = a.employeeID
and e.job='Программист') ;
Здесь подзапрос возвращает список значений времени (количество часов), которое было затрачено на выполнение заданий программистами в компании. Затем запрос ищет сотрудников, которые работали над заданиями больше, чем эти программисты, используя для этого а . hours > ALL (время программистов).
Для вас не будет сюрпризом, что этот запрос не вернет ни одной строки, доказывая тот факт, что в данной компании никто не работает так тяжело, как программисты.