Тема 8. Практическое занятие 1. Работа Анализ данных МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ

advertisement
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Тема 8. Практическое занятие 1. Работа
с сервером Microsoft (MS SQL Server 2000).
Анализ данных
Цель
Познакомиться
с возможностями
анализа
данных
с использованием
стандартного языка запросов SQL на примере учебной БД «Bank».
Основные понятия, определения
SQL (Structured Query Language) — структурированный язык запросов,
является стандартным языком запросов по работе с реляционными базами
данных.
SQL
состоит
из нескольких
подъязыков,
каждый
из которых
предназначен для определенной группы пользователей и выполняет свои
функциональные задачи. Обобщенная структура языка SQL приведена
на рис. 8.1.
Рис. 8.1. Структура языка SQL
Для конечных пользователей представляет наибольший интерес язык запросов
DQL (Data Query Language), который включает всего один оператор Select. SQL
создавался как язык запросов, соответствующий естественному языку, в качестве
которого был выбран английский. Предложения на языке SQL действительно
достаточно просто могут быть интерпретированы и переведены на английский
язык, что делает их понятными и доступными конечным пользователям
не программистам. Однако для пользователей, для которых английский
не является родным языком, интерпретация некоторых предложении может
вызвать определенные трудности.
Все предложения языка запросов позволяют выбрать из базы данных набор
фактов, которые удовлетворяют некоторым заданным условиям. Эти условия
обычно называются условиями отбора или фильтрации. Кроме того, при
выполнении запроса SQL позволяет выполнить некоторые дополнительные
операции обработки полученных данных, что соответствует выполнению
некоторых операций подсчета и группировки. Такая обработка позволяет
1
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
получить результат
пользователя виде.
в удобном
компактном,
семантически
значимом
для
Форма оператора запроса SELECT
Форма запроса представлена на рис. 8.2
Рис. 8.2 Структура простого запроса с фильтрацией
После ключевого слова «SELECT» должен идти перечень имен столбцов или
выражений, которые должны быть включены в результирующий набор данных.
Если мы собирается вывести полный набор всех столбцов исходных таблиц,
то можно поставить после слова «SELECT» просто знак — звездочку (Select *).
После ключевого слова «FROM» задается перечень имен таблиц, из которых
берутся данные. В запросе должна присутствовать, по крайней мере, одна
таблица, один источник данных. Если источников несколько, то их имена
разделяются запятыми. Часть Where является необязательной и может
отсутствовать, в этом случае в результирующий набор данных включаются все
строки из источников данных. Если же чаcть Where присутствует, то в ней
определяются условия отбора данных и условия объединения исходных таблиц.
Например, запрос
Select * from City
 позволяет
выбрать всю информацию из таблицы
мы получим следующие данные (см. рис. 8.3):
2
City.
В результате
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.3 Содержимое таблицы City
Если мы хотим выбрать не все столбцы, а только какие-то конкретные,
то их имена должны быть указаны после ключевого слова «SELECT». Например,
мы хотим выбрать только названия городов:
Select Name _ city From City. В этом случае мы получим только второй столбец
таблицы. Если мы захотим наложить некоторые дополнительные условия
на выбираемые из таблицы строки, то мы должны добавить раздел «Where»
в текст запроса и указать эти условия. Для числовых полей мы можем задавать
элементарные условия сравнения > (больше), < (меньше),>= (больше или
равно), <=(меньше или равно), =(равно), <>(не равно). Для символьных полей
мы можем указать условия равенства или условия вхождения каких-то символов.
Знак % означает любой набор символов. Символьные константы в запросах
всегда заключаются в одинарные кавычки, например ’Москва’. Допустим,
мы хотим найти все города из нашего списка, которые начинаются на букву
В, тогда наш запрос и результат его выполнения будет выглядеть так, как
представлено на рис. 8.4.
3
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.4. Поиск городов, начинающихся на букву ’В’
При составлении запроса, в котором участвуют несколько таблиц, необходимо
указать условия объединения всех таблиц. Пусть у нас есть вторая таблица,
которая содержит список филиалов различных банков с указанием кода города,
где этот филиал существует. Эти две таблицы соединены по коду города
(см. рис. 8.5):
Рис. 8.5. Связь двух таблиц
Если я хочу составить запрос на поиск всех филиалов различных банков,
которые распложены в городе ’Владивосток’, например, то мне необходимо
указать обе таблицы в запросе. В этом случае запрос будет выглядеть следующим
образом (см. рис. 8.6):
4
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.6. Список филиалов банков, расположенных в городе
’Владивосток’
Мы видим, что нам пришлось составить сложное условие. Первая его часть
содержит требование соединения двух таблиц по заданному полю kod _ city, при
этом мы указываем полное имя этого столбца, которое состоит из имени таблицы,
точка, имя столбца. Т. е. последовательность символов: banks.kod_city означает
столбец kod _ city из таблицы banks, а последовательность City.kod_city —
означает столбец kod _ city из таблицы City. Поставив знак равенства между
ними, мы потребовали, чтобы при объединении эти значения совпадали. Вторая
часть условия соединена с первой ключевым словом «and», что означает
логическое «И», т. е. выполнение обоих условий одновременно. Второе условие
содержит выбор строк, в которых название города равно ’Владивосток’.
Задание 1.
1. Подсоединитесь к учебной базе Bank, расположенной на сервере MS SQL
Server. Для этого выполните следующие действия:
 Запустите MSSQL Server: Enterprise Manager
Пуск->Программы-> MS SQL Server -> Enterprise Manager
 Теперь необходимо подключиться к серверу баз данных.
Для этого щелкните по плюсику в папке с серверами баз данных. Microsoft SQL
Servers, затем по SQLServer Group, в контекстном меню (правая кнопка мыши)
выбрать опцию (см. рис. 8.7) New SQL Server registration.
5
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.7. Регистрация пользователя на сервере MS SQL Server
После этого появляется окно мастера подключения (см. рис. 8.8).
Рис. 8.8. Мастер подключения
Нажимайте на кнопку «Далее». Введите нужные параметры:
Имя SQL сервера — APP (см. рис. 8.9). Нажимаем кнопку «Add» посередине
и переходим на следующую станицу конфигурации подключения.
6
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис.8.9. Выбор сервера при подключении
На этом экране вам необходимо выбрать способ аутентификации
пользователей. В нашем случае установлен тип защиты — NT authentication.
После этого вы должны получить сообщение (см. рис. 8.10)
Рис. 8.10. Сообщение об удачном завершении процесса регистрации
Нажимаем на кнопку «Close» — закрыть окно и возвращаемся в главную
панель управления сервером. Теперь нажимаем на крестик слева от указателя
«APP» и попадаем в консоль управления базами данных MS SQL Server
2000 (см. рис. 8.11).
7
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.11. Внешний вид управляющей консоли сервера
Слева в папках представлены все типы объектов, которые есть на сервере.
Для того чтобы раскрыть папки, надо нажать на плюсик справа от папки.
На сервере хранятся базы данных. Все они находятся в папке Databases.
Data Transformation server — утилиты для преобразования баз данных
из старых версий в текущую.
Management
остановка и т. д.
—
управление
Replication - управление
на других серверах БД.
сервером:
запуск,
репликациями —
приостановка,
дублированием
полная
информации
Security - управление доступом к базам данных.
Support Services — обслуживающие сервисы.
Meta Data Services
Системные базы их назначение
Кроме пользовательских баз данных MS SQL Server использует специальные
системные базы данных. Эти базы данных используются для внутренних нужд
сервера. Всего выделено 4 системные базы данных:
 master — системная база данных; хранит жизненно важную информацию
о SQL сервере; наличие достаточного количества свободного места
в БД master является критическим для нормального функционирования
сервера;
 model — модельная база данных; вновь создаваемые базы данных
используют данную базу как шаблон, включая набор объектов и прав;
 tempdb — база данных для хранения временных объектов пользователей,
системы и промежуточных результатов выполнения запросов; крайне
8
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
рекомендуется выносить tempdb на отдельное устройство; база данных
tempdb может быть вынесена в оперативную память для ускорения
выполнения операций.
 Msdb - системная база данных; предназначена для хранения всей
информации,
относящейся
к автоматизации
администрирования
и управления SQL Server, а также информации об операторах и событиях.
Задание 2. Работа с БД «Bank»
Учебная база «Bank» моделирует работу c лицевыми счетами клиентов банка,
которые открыты в разных филиалах. Эта модель упрощенная, в ней
мы придерживались следующих правил представления информации.
Каждый клиент может иметь несколько счетов. Каждый счет открывается
в конкретном филиале банка. Код счета клиента уникален в пределах филиала
банка. Поэтому в таблице счета первичным ключом является составной ключ,
который состоит из двух атрибутов — номера счета и номера филиала.
По каждому счету может выполняться множество операций. В нашей системе
допустимо всего 2 типа операций: ’занесение’ и ’снятие’.
Концептуальная (инфологическая модель БД представлена на рис. 8.12).
Рис. 8.12. Концептуальная модель БД «Bank»
В табл. 8.1 приведено описание всех полей из всех таблиц БД.
Таблица 1
Name
Code
Описание
ID_ckients
ID_ckien
уникальный код клиента
9
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
ts
Фамилия
Name
Фамилия и инициалы клиента
Паспорт,
серия
Pasport
_ ser
Серия паспорта
Паспорт,
номер
Pasport
_n
Номер паспорта
Код
организации
Kod
_ org
Уникальный код организации, выдавшей паспорт
Улица
Street
Улица
Корпус
Кorpus
Корпус
Дом
Dom
Номер дома
Код
Кod
Код города
Название
Сity
Название города
Номер счета
N _ BILL
Номер счета
Дата
открытия
Data
_ begin
Дата открытия счета
Дата
закрытия
Data
_ close
Дата закрытия счета (может быть не указана)
Номер
операции
ID
_ Oper
Номер операции, уникален
счета в конкретном филиале
SUM_Oper
SUM
_ Oper
Сумма в денежном
единичной операции
Date _ oper
Date
_ oper
для
выражении
конкретного
по конкретной
Дата выполнения операции
 открыть БД и просмотреть диаграмму, таблицы, их структуру и информацию,
содержащуюся в таблицах.
На рис. 8.13 представлена схема БД «Bank» на MS SQL Server 2000.
10
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.13. Схема БД «Bank»
Для того чтобы увидеть эту схему, щелкните по папке «Databases» и выберите
папку с именем «Bank», теперь, установив курсор на эту папку, дважды щелкните
мышкой по папке. После этого вы получите доступ ко всем объектам данной
БД. В число объектов БД входят (см. рис. 8.14).
Рис. 8.14. Структура объектов БД «Bank»
Для того чтобы увидеть схему, приведенную на рисунке 8.13, необходимо
щелкнуть по пиктограмме «Диаграммы».
11
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Если мы щелкнем по пиктограмме «Таблицы»,
раскроется список таблиц текущей БД (см. рис. 8.15).
то в правой
части
окна
Рис. 8.15. Список таблиц БД «Bank».
Каждая таблица относится к пользовательскому (user) или системному
(System) типу. Системные таблицы используются сервером для внутренних целей,
а в пользовательских таблицах хранятся данные. Для того, чтобы открыть
таблицу и посмотреть ее содержимое, необходимо выполнить следующие
действия:
 установить курсор на требуемую таблицу;
 нажать правую кнопку и выбрать из контекстного меню пункт «Open Table -
> Return all rows» (см. рис. 8.16).
12
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.16. Структура контекстного меню
Содержимое таблицы выводится в отдельном окне (см. рис. 8.17).
Рис. 8.17. Содержимое таблицы Bills-счета
Здесь знаком < NULL > обозначены незаданные значения. Фактически этот
знак стоит в тех местах, где не определена дата закрытия счета, т. е. это счета,
которые на настоящий момент могут считаться открытыми и действующими.
В теории баз данных такие значения называются неопределенными. Для того
чтобы найти эти значения, нельзя использовать стандартные операции сравнения
(равно =, не равно <>). В этих случаях необходимо использовать предикаты
(специальные ключевые выражения), которые предназначены для обработки
именно неопределенных значений. Такими предикатами являются IS NULL
(является неопределенным) и IS NOT NULL (не является неопределенным).
Составим запрос с подобными предикатами, например найдем список счетов,
которые на настоящий момент являются действующими.
Select N_bill
13
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
From Bills
Where Data_close IS NULL
Для выполнения запросов необходимо перейти в режим транслятора с языка
SQL. Для этого надо запустить SQL Query Analyzer: перейти в меню Tools -> SQL
Query Analyzer. Пред нами раскроется окно интерактивного исполнителя SQLзапросов. (см. рис. 8.18).
Рис. 8.18. Окно исполнения запросов
В правой части находится внутреннее окно, в котором можно писать запросы.
В левой части мы видим список баз данных. При написании запросов нам
требуется точно указывать названия таблиц и атрибутов. Для того чтобы иметь
это перед глазами, щелкните на знак плюс (+), находящийся слева от выбранной
базы данных (в нашем случае это bank). Папка раскроется и появится список
объектов, входящий в данную БД (см. рис. 8.19).
14
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.19. Список объектов БД
Рис. 8.20. Список объектов конкретной таблицы.
15
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Если повторить операцию щелканья по левому плюсику рядом с объектом,
то повится иерархически раскрывающийся список, в котором уже будут
представлены внутренние объекты. Так, на рис. 8.20 мы видим уже список полей
таблицы Bills. При формировании запросов вы можете перетаскивать поля таблиц
в текст запроса вместо того, чтобы набирать их на клавиатуре самостоятельно.
Аналогичный механизм можно использовать и при перетаскивании таблиц,
но в этом случае перед именем таблицы стоит набор символов «dbo.» Это
означает, что данная таблица создана владельцем данной БД (data base owner —
dbo.) (см. рис. 8.21).
Рис. 8.21. Вывод списка филиалов, в которых были открыты счета
Для того чтобы выполнить запрос, надо нажать на зеленый треугольник
в инструментальной панели. Тогда в нижнем окне появится результат выполнения
запроса. При выполнении указанного запроса мы видим, что в результирующем
списке много повторений. Действительно в одном филиале могло быть открыто
множество счетов. Если мы хотим получить список без повторений, то необходимо
использовать специальное ключевое слово «DISTINCT», которое сообщает
транслятору, что в результирующий список включаются только различные строки
результата, без повторений. Если мы применим данное слово к нашему запросу,
то получим следующий результат (см. рис. 8.22):
16
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис.8.22. Применение ключевого слова Distinct
Все ключевые слова транслятор окрашивает в синий цвет, и это является
дополнительной подсказкой для пользователей. Результат выполнения запроса
может содержать несколько столбцов (см. рис. 8.23). Выполним запрос, который
выводит содержимое таблицы Clients.
Рис. 8.23. Вывод содержимого таблицы Clients
При выполнении запроса мы заменили текст старого на новый запрос. Однако
запрос — это алгоритм решения некоторой задачи, и он может нам понадобиться
еще не раз. Поэтому хотелось бы его сохранить, да еще и снабдить некоторыми
комментариями на русском языке, которые позволят нам легко его найти
в дальнейшем. Комментарии отделяются двумя дефисами, которые стоят в начале
строки. Многострочные комментарии заключаются в набор символов /*
комментарий */. Запросы могут записываться последовательно, друг за другом,
снабжаясь комментариями. В этом случае при нажатии кнопки «Выполнить
запрос» будут выполнены все написанные запросы. Для того чтобы выполнить
только один запрос, необходимо его выделить и нажать соответствующую кнопку
(см. рис. 8.24).
17
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.24. Выполнение одного запроса из списка
Для того чтобы сохранить созданные вами запросы, необходимо нажать
на пиктограмму с дискеткой и перейти в стандартное окно сохранения файла.
Напоминаем, что сохраняются только тексты запросов, написанные в правом
верхнем окне. Это будет текстовый файл, который можно прочитать в любом
текстовом редакторе. Этот файл может быть загружен в SQL Query Analyzer
и выполнен. При этом результаты могут отличаться от тех, которые получены
ранее. Почему? Потому что мы выполняем запросы над новым состоянием
БД, которое могло измениться к данному времени, поэтому и результаты запросов
могут отличаться от прежних.
Задание 3.
Выполнить следующие простые запросы.
1. Вывести содержимое таблицы Filials
2. Вывести список типов счетов, которые доступны клиентам нашего банка.
Список типов счетов приведен в таблице Type _ bills, в таблице кроме названий
типов счетов находятся еще и коды типов счетов. Нам надо вывести только
названия типов счетов.
Select Name_type From Type_Bills
3. Вывести список клиентов нашего банка.
Select Name, Pasport_ser,Pasport_n From Clients
4. Вывести список городов, клиенты которых имеют счета в нашем банке.
Select Distinct City From Cityes,Clients
Where Cityes.Kod= Clients.Kod
А зачем мы использовали ключевое слово «DISTINCT»?
18
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Потому что города могут повторяться, и, для того чтобы в результирующем
списке исключить повторения, мы использовали слово «DISTINCT», которое
означает «Различных».
5. Вывести список районов, в которых расположены филиалы нашего банка.
Select Distinct Ragion
From Filials
6. Вывести список клиентов, которые открыли счет типа «срочный депозит
на 3».
Для выполнения данного запроса нам потребуются 3 таблицы: таблица
Clients — содержит список клиентов, таблица Bills — содержит список открытых
счетов и таблица Type _ biils — содержит список типов счетов. А почему нельзя
воспользоваться одной таблицей Bills? В этой таблице нет фамилий клиентов,
только их внутренние коды, в этой таблице отсутствуют названия типов, есть
только условные коды типов счетов, а мы не знаем, какой код у счета «срочный
депозит на 3».
Поэтому текст нашего запросы будет следующим:
Select distinct Name
from dbo.Clients,dbo.Bills,dbo.Type_bills
Where dbo.Clients.ID_ckients=dbo.Bills.ID_ckients and
dbo. Bills. KOD _ Type = dbo. Type _ bills. KOD _ Type
7. Вывести список счетов, которые открыты в филиале номер 1 нашего банка.
8. Вывести список клиентов, которые открыли счет в филиале 2 нашего банка
9.
Вывести
список
филиалов,
в которых
«до востребования» и «срочный депозит на 6»
открыты
счета
типа
10. Вывести список клиентов, которые закрыли свои счета в текущем месяце.
Задание 4
Кроме простых запросов можно составлять сложные запросы, которые
позволяют не только отбирать конкретные записи по условиям, но выполнять
некоторые расчеты. Часто требуется сосчитать количество строк, которое
удовлетворяет конкретным условиям, или выполнить операцию группировки строк
с одинаковыми значениями атрибутов в строках и для каждого такого значения
подсчитать, сколько же строк имеет это значение атрибута. Рассмотрим пример:
необходимо выполнить запрос «Вывести список районов с указанием количества
филиалов банка, которые расположены в данном районе».
На рис. 8.25 приведено содержимое таблицы филиалов (Filials).
19
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.25. Содержимое таблицы Filials
Существует возможность сгруппировать строки таблиц по значениям некоторых
столбцов, а потом к этим сгруппированным строкам можно применить ряд
агрегатных функций. Функция Count (*) считает количество строк в каждой
группе. Давайте сгруппируем по столбцу Ragion и сосчитаем количество строк
в каждой группе. Операция группировки записывается ключевыми словами Group
By <список столбцов группировки>.
Select Ragion, Count(*)
From Ragion
Group By Ragion
Для того чтобы получить результат в более понятном и читаемом виде,
мы можем добавить новое осмысленное название столбцу, который содержит
результат применения функции Count (*). Назовем его «Количество филиалов»
(см. рис. 8.26).
20
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.26. Подсчет количества филиалов в каждом районе
1. Вывести список филиалов с указанием количества счетов, которые открыты
в каждом филиале.
Select N_filial, Count(*)
From Bills
Group by N_Filial
2. Вывести список филиалов с указанием количества клиентов в каждом
филиале банка. Внимание!!! Каждый клиент может иметь несколько счетов,
поэтому результаты запросов 10 и 12 не совпадают.
Для того чтобы сосчитать клиентов, нам необходимо указать в функции Count
() в качестве параметра выражение Count (distinct ID _ ckients), что означает, что
мы подсчитываем количество различных значений атрибута Id _ ckients —
идентификаторов клиентов (см. рис. 8.27).
21
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.27. Подсчет количества клиентов в каждом филиале
3. Вывести список клиентов с указанием количества счетов, открытых ими
в нашем банке.
4. Сосчитать по каждому счету сумму поступлений.
Для выполнения этого запроса нам понадобится еще одна агрегатная
функция — это функция SUM (A), позволяющая сосчитать сумму значений
атрибута A в группе. Требуемый запрос будет выглядеть следующим образом
(см. рис. 8.28.):
22
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.28. Применение агрегатной функции SUM
5. Вывести список счетов с указанием номера филиала, где этот счет открыт,
и количества операций, которые были выполнены по данному счету.
6. Сосчитать остаток по каждому счету.
Это сложный запрос. Мы должны по каждому счету сосчитать сумму
поступлений и из нее вычесть сумму снятий, тогда мы получим остаток. В данном
случае мы используем технологию построения подзапросов, т. е. для каждого
значения, полученного в основном запросе, мы вычисляем некоторое значение
в подзапросе,
а потом
производим
операцию
вычитания
между
ними
(см. рис. 8.29).
23
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 8.29. Пример выполнения арифметических операций с подзапросом
Каждый подзапрос заключается в круглые скобки.
(Select SUM(SUM_Oper)
from Operations O
Where Type_oper = ’ снятие ’ and
O.N_bill=Operations.N_bill)
Здесь мы ввели синоним для ссылки на таблицу Operations — мы назвали
ее O. В подзапросе вычисляем сумму снятых денег со счета Operations. N _ bill,
который является текущим в главном запросе. Надо указать, что мы выбираем все
строки с таким же номером счета, поэтому мы ввели синоним и записали
выражение O. N _ bill = Operations. N _ bill, т. е. номер счета в подзапросе (O.
N _ bill) равен номеру счета в главном запросе.
Существуют дополнительные ключевые слова, которые позволяют проводить
операции многократного сравнения между запросом и подзапросом. Операция
многократного сравнения ANY истинна (TRUE) тогда, когда хотя бы одно
сравнение истинно (TRUE) В противном случае она дает результат ложь (FALSE).
Операция многократного сравнения ALL истинна (TRUE) тогда, когда ВСЕ
элементарные сравнения истинны (TRUE). В противном случае она дает результат
ложь (FALSE). Пример использования операций многократного сравнения:
Вывести список филиалов, в которых открыто максимальное количество счетов
Select N_Filial from Bills
Group by N_Filial
Having count(*) >= ALL (Select COUNT(*)
24
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
From Bills
Group By N_filial)
В верхнем подзапросе мы сосчитали для каждого филиала количество
открытых счетов, а потом проведем операцию многократного сравнения с правым
подзапросом и выберем строку, в которой число слева больше или равно любому
из чисел справа.
По данному образцу подготовить следующие запросы:
7. Вывести список клиентов, имеющих максимальное количество счетов
в нашем банке.
8. Вывести счета, по которым было проведено максимальное количество
операций.
25
Download