ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.09.2025
Просмотров: 327
Скачиваний: 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример 1. Получить содержимое всех полей таблицы Employee
SELECT * FROM Employee;
|
Id_employee |
name |
Profession_id |
Brigade_id |
|
1 |
Иванов И.И. |
1003 |
2001 |
|
2 |
Петров П.П. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример2. Получить содержимое поля name таблицы Employee
SELECT name FROM Employee;
Ключевое слово DITINCT ПОЗВОЛЯЕТ ИСКЛЮЧИТЬ из результирующего набора повторяющиеся записи:
SELECT DISTINCT profession_id FROM Employee;
Каждая СУБД позволяет записывать выражения с использованием широкого набора операторов и функций. В результирующий набор помещается значение выражения, вычисленное для каждой записи таблицы. Для вновь созданного столбца требуется задать имя с помощью ключевого слова AS:
выражение AS имя
Пример. Рассчитать премию сотрудников в размере 20% от оклада
SELECT id_employee, name, salary, salary*0.2 AS bonus FROM Employee
Формат предложения FROM:
FROM таблица [JOIN таблица2 ON условие ...]
Предложение FROM определяет источник данных для запроса. Данные могут извлекаться как из существующей таблицы, так и из виртуальной таблицы, полученной в результате выполнения реляционных операций.
С точки зрения реляционной алгебры предложение FROM можно рассматривать как ограничение декартового произведения отношений.
|
|
|
|
|
|
|
|
|
|
|
|
При использовании нескольких таблиц в запросах следует указывать полное имя в виде:
Таблица. Поле.
Пример1. Получить домашние адреса сотрудников
SELECT Employee.name, EmployeeInfo.address
FROM Employee JOIN EmployeeInfo ON Employee.id_employee=EmployeeInfo.id_employee;
Если при использовании кратких имён полей не возникает неоднозначности, то имена таблиц можно не указывать.
Пример 2. Получить профессии сотрудников
SELECT name, jobtitle
FROM Employee JOIN Profession ON profession_id=id_profession;
Формат предложения WHERE:
WHERE Поле ОПЕРАТОР Выражения …
Предложение WHERE позволяет поместить в результирующий набор только те записи исходной таблицы, которые будут удовлетворять требуемому условию.
Сточки зрения реляционной алгебры предложения WHERE можно рассматривать как ограничение отношения.
В предложении WHERE допускается использовать следующие параметры:
Отношения: <, >, =, ≤, ≥, <>
Логические: AND, OR, NOT
Специальные: IN, BETWEEN, IS, LIKE, EXISTS
Оператор IN используется для сравнения поля с несколькими значениями
jobtitle IN («слесарь», «столяр, «штукатур»)
<=> jobtitle = “слесарь” OR jobtitle = “столяр” OR jobtitle = “штукатур”
Оператор BETWEEN используется для проверки, попадает ли значение поля в заданный диапазон
salary BETWEEN 700 AND 900
<=> salary ≥ 700 AND salary ≤900
Оператор IS используется для сравнения со значением NULL (т.е. проверяет, имеет ли поле значение)
brigade_id IS NULL
Оператор LIKE используется для сравнения с шаблоном строки
В шаблоне могут использоваться символы:
_ - соответствует ровно одному любому символу
% - соответствует любому количеству любых символов
|
Пример условия |
Результат поиска |
|
Word LIKE ‘За_ор’ |
Забор Затор |
|
Word LIKE ‘Д%нь’ |
День, Длинная тень |
|
Word LIKE ‘%й’ |
138-й, Последний |
Пример 1. Получить список сотрудников имеющих профессию «столяр»
SELECT name
FROM Employee
WHERE profession_id = 1001;
или
SELECT name
FROM Employee JOIN Profession ON profession_id = id_profession
WHERE jobtitle = ‘столяр’;
Пример 2. Получить список сотрудников , проживающих на улице Чкалова.
SELECT name
FROM Employee JOIN EmployeeInfo
ON Employee.id_employee = EmployeeInfo.id_employee
WHERE address LIKE ‘%Чкалова%’;
Формат предложение GROUP BY
GROUP BY список полей
Предложение GROUP BY позволяет разбить исходную таблицу на группу записей с одинаковыми значениями указанных полей. В результирующем наборе каждая группа представляется одной записью.
С точки зрения реляционной алгебры предложение GROUP BY можно рассматривать как деление отношений.
При использовании предложения GROUP BY, предложение SELECT может содержать выражения, содержащие только
Пример. Получить список сотрудников, имеющихся в каждой бригаде.
SELECT Brigade.name, Profession.jobtitle
FROM Employee
JOIN Brigade
ON Employee.brigade_id = Brigade.id_brigade
JOIN Profession
ON Employee.profession_id = Profession.id_profession
GROUP BY Brigade.name, Profession.jobtitle;
Итог:
name jobtitle
столярная столяр
слесарная слесарь
Агрегатные (агрегировать – объединять) функции позволяют получить значение, характеризующее группу записей:
MAX (поле|выражение)
находит максимальное значение поля (выражения)
MIN (поле|выражение)
находит минимальное значение поля (выражения)
AVG (поле|выражение)
находит среднее значение поля (выражения)
SUM (поле|выражение)
находит сумму значения поля (выражения)
COUNT (поле|*)
находит количество непустых полей (общее количество записей)
Пример. Получить количество сотрудников в каждой бригаде.
SELECT Brigade.name, count (*) AS count
FROM Employee
JOIN Brigade ON Employee.brigade_id = Brigade.id_brigade
GROUP BY Brigade.name;
Итог:
name count
столярная 2
слесарная 2
Агрегатные функции допустимо применять без использования предложения GROUP BY. В этом случае из действие распространяется на всю таблицу.
Пример. Найти общее количество сотрудников
SELECT count (*) AS count
FROM Employee;
Итог:
count
5
Формат предложения HAVING:
HAVING условие …
Предложение HAVING позволяет включить в результирующую таблицу только те группы записей, которые удовлетворяют указанному условию.
В условии можно использовать только те поля, которые были перечислены только в GROUP BY, а также агрегатные функции.
Пример. Получить список бригад с заданным количеством сотрудников
SELECT Brigade.name, count (*) AS count
FROM Employee
JOIN Brigade ON Employee.brigade_id = Brigade.id_brigade
GROUP BY Brigade.name
HAVING count (*) = 2;
Итог:
name count
столярная 2
слесарная 2
Если в одном запросе встречаются и предложения WHERE, и предложение HAVING, то отбор осуществляется по следующей схеме:
Из исходной таблицы выбираются записи, удовлетворяющие условию WHERE.
Полученный набор записей разбивается на группы в соответствии с GROUP BY.
Из групп записей выбираются те, которые удовлетворяют условию HAVING.
Формат предложения ORDER BY;
ORDER BY поле [ ASC | DESK] [ …]
Предложение ORDER BY позволяет отсортировать строки результирующего набора по значениям одного или нескольких столбцов (или выражений)
ASC – сортировка по возрастанию (по умолчанию)
DESC – сортировка по убыванию
Пример. Вывод фамилий сотрудников в алфавитном порядке
SELECT Brigade.name AS BrigadeName, Employee.name AS EmployeeName
FROM Employee JOIN Brigade ON Employee.brigade_id = Brigade.id_brigade
ORDER BY BrigadeName ASC, EmployeeName ASC.
Итог:
BrigadeName EmployeeName
слесарная Андреев А.А.
слесарная Петров П.П.
столярная Иванов И.И.
столярная Сидоров С.С.
Технология доступа к данным
Различные СУБД по-разному организуют и хранят базы данных:
- Для каждой таблицы отдельные файлы (Paradox и dBase). БД – каталог, в котором находятся файлы таблиц;
- Несколько таблиц в одном файле (MS Access и InterBase). БД – файл с путём доступа к нему.
Технологии доступа к данным решают проблему унификации доступа к различным базам данных – предоставление универсального способа доступа к разным форматам данных единым образом.
С++ Builder предлагает следующие механизмы доступа к данным:
BDE (IDAPI);
ADO; // будем рассматривать
dbExpress;
IntelBase Express.
Средства C++ Builder для работы с базами данных можно разделить на 2 вида:
Инструменты – специальные программы и пакеты, обеспечивающие обслуживание БД вне разрабатываемых приложений.
Компоненты – предназначены для создания приложений, осуществляющих операции с базами данных.
Инструменты С++ Builder для операции с БД:
BDE Administrator – утилита для настройки различных параметров BDE, настройки драйверов баз данных, создания и удаления драйверов ODBC, создания и обслуживания псевдонимов.
Database Desktop – программа предназначенная для создания и редактирования структуры и записей таблиц, а также создания, редактирования и выполнения SQL-запросов.
SQL Explorer – проводник БД, позволяющий просматривать и редактировать БД и словари данных.
SQL Monitor – программа отслеживания порядка выполнения SQL-запросов к удалённым БД.
Data Pump – программа для переноса данных (схемы базы данных и содержимого) между БД.
Компоненты для создания приложений БД в C++ Builder:
Не визуальные. Предназначены для организации доступа к данным, содержащимися в таблицах, обеспечивают связь между данными таблиц БД и визуальными компонентами.
Визуальные. Используются для построения интерфейса приложения БД.
Компоненты для создания приложений БД в С++ Builder сгруппированы на следующих страницах:
Data Access – не визуальные компоненты, предназначенные для организации доступа к данным.
DataSource (источник данных)
ClientDataSet (клиентский набор данных)
DataSetProvier (провайдер набора данных)
Компоненты преобразования документа XML
Data Controls – визуальные компоненты, предназначенные для управления данными.
DBGrid (сетка или таблица)
DBNavigator (навигационный интерфейс)
DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheakBox, DBRadioGroup
DBLookupListBox, DBLookupComboBox
DBRichEdit, DBCtrlGrid, DBChart
dbExpress – компоненты, предназначенные для соединения приложений для работы с БД с помощью dbExpress
SQLConnection dbExpress (соединение с сервером БД
SQLDataSet (набор данных)
SQLQuery (набор данных запроса)
SQLStoredProc (вызов хранимой процедуры сервера)
SQLTable (набор данных таблицы)
SQLMonitor (монитор выполнения SQL-запросов)
SQLClientDataSet (клиентский набор данных)
DataSnap – содержит компоненты, предназначенные для создания трёхуровневых (многоуровневых) приложений.
BDE – содержит компоненты, предназначенные для управления данными с использованием BDE.
Table
Query
StoredProc
DataBase
Session, Batch Move, UpdateSQL, NestedTable, BDEClientDataSet
ADO – компоненты, предназначенные для управления данными с использованием технологии ADO (Active Data Objects)
ADOConnection
ADOCommand
ADODataSet
ADOTable
ADOQuery
ADOStoredProc, RDSConnection
InterBase – компоненты, предназначенные для работы с сервером InterBase
IBTable, IBQuery, IBStoredProc, IBDatabase, IBTransaction, IBUpdateSQL, IBDataSet, IBSQL, IBDatabaseInfo, ...
Decision Cube – компоненты, предназначенные для построения систем принятия решений.
DecisionCube, DecisionQuery, DecisionSource, SecisionPivor, DecisionGrid, DecisionGraph
QReport – компоненты, предназначенные для построения отчётов.
В большинстве случаев назначение компонента можно определить по префиксу:
DB – визуальный компонент, связан с данными и используется для построения интерфейса приложения БД
QR – компонент используется для построения отчётов QuickReport
IB – компонент предназначен для работы с сервером InterBase