- •1. Вложенные запросы. Привести примеры.
- •2. Методы компонента adoTable. Привести примеры.
- •3. Подключение к базе данных.
- •1. Объединение таблиц. Привести примеры.
- •2. Свойства компонента adoTable.
- •3. Оператор выбора Select. Привести примеры.
- •1. Операция Like в sql-запросах. Привести примеры.
- •2. Доступ к значению поля. Привести примеры.
- •3. Создание базы данных. Создание таблиц. Привести примеры.
- •1. Свойства компонента adoTable. Методы навигации по набору данных. Привести примеры.
- •2. Динамические запросы с параметром. Привести примеры
- •1. Динамический запрос всегда выполняется в том-же коннекте и как отдельный пакет(batch). Другими словами при использовании такого запроса,
- •3. Компиляция запроса происходят непосредственно перед его вызовом. Т.Е. Обо всех синтаксических ошибках вы узнаете только в этот момент.
- •3. Методы компонента adoTable. Привести примеры.
- •1. Объединение таблиц в sql-запросах.
- •2. Операторы добавления, редактирования, удаления данных в sql-запросах. Привести примеры.
- •3. Поиск записей в наборе данных.
- •1. Компонент adoConnection.
- •2. Операторы Alter Table, Create Table, Drop Table.
- •3. Компонент adoQuery. Основные свойства adoQuery. Привести примеры.
- •1. Написать оператор, осуществляющий создание бд в ms sql Server.
- •2. Написать sql- запрос, осуществляющий объединение данных из нескольких таблиц.
- •3. Методы создания и модификации таблиц.
- •1. Представления, их создание в ms sql Server.
- •2. Написать хранимую процедуру, осуществляющую добавление данных в таблицу.
- •3. Создание отчетов. Привести примеры.
- •1. Написать добавление, удаление, редактирование данных в таблице, используя, операторы Update, Delete, Insert.
- •2. Типы данных в sql-сервер.
- •Varchar(size) Может хранить не более 255 символов.
- •3. Операторы Update, Insert, Delete, Alter Table. Примеры.
- •1. Хранимые процедуры в ms sql Server.
- •2. Написать хранимую процедуру, осуществляющую удаление данных из таблицы.
- •3. Операторы Alter Table, Create Table, Drop Table.
- •2.Написать вложенный sql-запрос на примере любой базы данных.
- •1.Написать оператор выбора, осуществляющий выборку полей по нескольким критериям.
- •3. Создать базу данных, таблицу. Продемонстрировать на этой таблице операторы Update, Delete, Insert.
- •1.Представления. Хранимые процедуры. Привести примеры.
- •1. Оператор выбора Select. Отбор записей из таблицы. Вычисляемые поля.
- •1.Операторы присваивания значений переменным.
- •2. Написать sql- запрос, осуществляющий использование агрегатных функций.
- •1. Технология доступа к данным ado.
- •3. Извлечение данных. Поиск, сортировка данных.
- •1. Оператор выбора Select. Отбор записей из таблицы. Вычисляемые поля.
- •2. Использование операторов in, Between, like. Агрегатные функции. Упорядочивание записей.
- •3. Динамические запросы с параметром. Способы задания параметров
- •1. Оператор объявления переменных в хранимой процедуре.
- •2. Оператор выбора Select. Сортировка данных. Использование специальных операторов. Вычисляемые поля.
- •3. Агрегатные характеристики в sql – запросах. Вложенные запросы. Объединение таблиц в sql-запросах.
- •1. Написать хранимые процедуры на редактирование данных одного поля, нескольких полей.
- •2. Написать несколько представлений в базе данных.
- •3. Вызов представлений и хранимых процедур в среде ms sql Server.
3. Создать базу данных, таблицу. Продемонстрировать на этой таблице операторы Update, Delete, Insert.
CREATE TABLE `table1` (`user_id` INT(5) NOT NULL AUTO_INCREMENT, `username` VARCHAR(50), PRIMARY KEY(`user_id`), INDEX(`username`));
CREATE TABLE `table2` (`phone_id` INT(5) NOT NULL AUTO_INCREMENT, `user_id` INT(5) NOT NULL, phone_number INT(10) NOT NULL, PRIMARY KEY (`phone_id`), INDEX(`user_id`, `phone_number`));
CREATE TABLE `table3` (`room_id` INT(5) NOT NULL AUTO_INCREMENT, `phone_id` INT(5) NOT NULL, `room_number` INT(4) NOT NULL, PRIMARY KEY(`room_id`), INDEX(`phone_id`, `room_number`));
Теперь необходимо добавить данные в таблицы. Для добавления записей используется оператор INSERT.
INSERT INTO table1 (username) VALUE ('foo');
INSERT INTO table2 (user_id, phone_number) VALUE ('2','200');
Предположим, мы ошиблись при добавлении значений (использовали команду [3] вместо [2]), не надо рваться удалять таблицу или всю базу — значение можно изменить с помощью оператора UPDATE.
UPDATE table2 SET user_id='2', phone_number='200' WHERE phone_id='1';
Удалить строку с user_id равным 1 из таблицы table1:
DELETE FROM table1 WHERE user_id = 1;
БИЛЕТ № 14
1.Представления. Хранимые процедуры. Привести примеры.
Представление – это заранее определенный запрос, сохраненный в базе данных, имеющий вид обычной таблицы и проявляющий себя подобно таблице, но не требующий дополнительного места для хранения. Представление используется точно так же, как и обычная таблица.
Представление – это заранее определенный запрос, сохраненный в базе данных, имеющий вид обычной таблицы и проявляющий себя подобно таблице, но не требующий дополнительного места для хранения. Представление используется точно так же, как и обычная таблица.
После предложения CREATE VIEW следует имя представления, а затем указывается подзапрос, в котором определяются возвращаемые поля и условия отбора записей. Следующий запрос создает простое представление:
CREATE VIEW SimpleView
AS SELECT * FROM Employees
WHERE City = 'London'
Условием отбора записей в представление явилось соответствие значений поля City значению London. Это представление потом можно использовать как обычную таблицу:
SELECT * FROM SimpleView
В ходе выполнения запроса были выбраны все записи представления. Если из преставления нужно извлечь только поля City, FirstName и LastName, следует применить другой запрос.
SELECT City, FirstName, LastName FROM SimpleView
Хранимые процедуры – это набор операторов SQL, созданный для удобства использования в программах.
Сохраненную процедуру использовать проще, чем каждый раз записывать весь набор входящих в нее операторов SQL. Сохраненные процедуры можно вкладывать одну в другую
Например, мы хотим увеличить на единицу значения номеров курсов (в поле Grup_COURSE) в таблице GRUPPA:
CREATE PROCEDURE new_course
AS
UPDATE GRUPPA
SET Grup_COURSE = Grup_COURSE +1
Проверим работу процедуры:
EXEC new_course
SELECT * FROM GRUPPA
Простая процедура по использованию оператора SELECT:
CREATE PROCEDURE spisok_stud
AS
SELECT * from Students
2.Написать динамический запрос с параметром на примере любой базы данных.
3.Осуществить поиск конкретного значения поля в базе данных.
select * from Таблица where Выражение [order by ИмяПоля [desc]]
Эта команда – основная и очень мощная. Предназначена она для того, чтобы искать все записи, удо-влетворяющие выражению Выражение. Ее возможности гораздо более богаты, чем то сжатое изложение,которое здесь приведено, и о них можно прочитать в книгах, посвященных SQL. Если записей несколько,то при указанном предложении order by они будут отсортированы по тому полю, имя которого записыва-ется правее этого ключевого слова (если задан описатель desc, то упорядочивание происходит в обратном порядке). В предложении order by могут также задаваться несколько полей. Особое значение имеет символ *. Он предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. С другой стороны, вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения. Но чаще всего все же используется именно *.
БИЛЕТ № 15
1.Создание базы данных.
CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET charset] [COLLATE collation];
db_name
- Имя, которое будет присвоено создаваемой базе данных.
IF NOT EXISTS
- Если не указать этот параметр, то при попытке создания базы данных с уже существующим именем, возникнет ошибка выполнения команды.
CHARACTER SET, COLLATE
- Используется для задания стандартной кодировки таблицы и порядка сортировки.
Если при создании таблицы эти параметры не указываются, то кодировка и порядок сортировки вновь создаваемой таблицы берутся из значений, указанных для всей базы данных. Если задан параметр CHARACTER SET, но не задан параметр COLLATE, то используется стандартный порядок сортировки. Если задан параметр COLLATE, но не задан CHARACTER SET, то кодировку определяет первая часть имени порядка сортировки в COLLATE.
Кодировка, заданная в CHARACTER SET, должна поддерживаться сервером (latin1 или sjis), а порядок сортировки должен быть допустимым для текущей кодировки.
Примеры использования CREATE DATABASE
Следущий пример создает базу данных "my_db":
CREATE DATABASE `my_db`
или
CREATE DATABASE `my_db` CHARACTER SET utf8 COLLATE utf8_general_ci;
2. Написать SQL- запрос, осуществляющий использование агрегатных функций.
Агрегатные функции используются подобно именам полей в предложении SELECT запроса, но с одним исключением, они берут имена поля как аргументы. Агрегатные функции производят одиночное значение для всей группы таблицы. Список этих функций:
COUNT — выводит количество полей, которые выбрал запрос;
SUM — выводит арифметическую сумму всех выбранных значений данного поля;
MAX — выводит наибольшее из всех выбранных значений данного поля;
MIN — выводит наименьшее из всех выбранных значений данного поля;
AVG — выводит усреднение всех выбранных значений данного поля.
При написании запросов с агрегатными функциями, необходимо научиться правильным образом организовать группировку (GROUP BY).
Пример запроса с группировкой:
SELECT COUNT(p.product_id) cnt,
g.group_name
FROM Products p, Product_groups g
WHERE p.group_id_ref = g.group_id
GROUP BY p.group_id_ref
Запрос выведет нам список групп и количество товаров в каждой:
Select min(Year_r), max(Year_r), avg(Year_r) from Pers
вернет минимальное, максимальное и среднее значение года рождения, а оператор
Select min(GetDate()-Year_r), max(GetDate()-Year_r), avg(GetDate()-Year_r) from Pers
выдаст аналогичные данные, но относящиеся к возрасту сотрудников.
3.Написать вложенный SQL-запрос на примере любой базы данных.
Вложенные запросы
В рамках нашего примера, допустим, что нам понадобилось узнать имена узлов, которые посещали сайт www.dom2.ru. Требуемую информацию можно получить запросом:
SELECT hst_name FROM hosts WHERE hst_pcode IN
(SELECT vis_hstcode FROM visits, sites
WHERE (sit_pcode = vis_sitcode) AND (sit_name LIKE 'www.dom2.ru'));
Рассмотрим этот запрос более пристально. Первый оператор SELECT нужен для выборки имен узлов. Чтобы выбрать требуемые нам имена, в запросе указана секция WHERE, в которой первичный ключ таблицы «Узлы» (hst_pcode) проверяется на принадлежность множеству (оператор IN). Судя по всему, множество для проверки на принадлежность должен вернуть второй оператор SELECT, находящийся в скобках. Рассмотрим его отдельно:
SELECT vis_hstcode FROM visits, sites WHERE (sit_pcode = vis_sitcode)
AND (sit_name LIKE 'www.dom2.ru')
Как видно из списка полей для выборки, запрос возвращает одно поле - vis_hstcode. Это коды узлов из таблицы «Посещения» (visits). Но после слова FROM указано две таблицы - visits и sites. Это нужно для удобства. Дело в том, что имена сайтов хранятся в таблице «Сайты» (sites), а в таблице «Посещения» - только идентификаторы сайтов. Таким образом, чтобы выбрать из таблицы «Посещения» данные только для сайта www.dom2.ru - мы связали две таблицы и указали в условии привычное для человека имя сайта. Подробнее о связывании речь пойдет чуть ниже. Таким образом, запрос, вернувший нам коды узлов будет являться вложенным запросом.
БИЛЕТ № 16
1. Технология доступа к данным ADO.
Начиная с C++ Builder 5 появились возможности работы с базами данных посредством разработанной в Microsoft технологии ActiveX Data Objects (ADO). ADO – это пользовательский интерфейс к любым типам данных, включая реляционные и нереляционные базы данных, электронную почту, системные, текстовые и графические файлы. Связь с данными осуществляется посредством так называемой технологии OLE DB.
Использование ADO является альтернативой Borland Database Engine (BDE), обеспечивающей более эффективную работу с данными. Для использования этой возможности на вашем компьютере должна быть установлена система ADO (та или иная версия ADO имеется во всех последних версиях Windows). Кроме того, должна быть установлена клиентская система доступа к данным, например, Microsoft SQL Server, а в ODBC должен иметься драйвер OLE DB для того типа баз данных, с которым вы работаете.
Для работы с ADO в C++ Builder предусмотрены компоненты, расположенные на странице библиотеки – ADO. Они инкапсулируют такие объекты ADO, как Connection, Command и Recordset. Им соответствуют компоненты C++ Builder ADOConnection, ADOCommand и ADODataSet.
Связь с базой данных технологии ADO осуществляется обычной цепочкой: набор данных => источник данных (компонент DataSource) => компоненты управления и отображения данных (DBGrid, DBEdit и др.). Отличие заключается только в первом звене этой цепочки, в котором вместо компонентов, расположенных на странице DataAccess библиотеки используются компоненты, расположенные на странице ADO.
2. Основные компоненты для работы с базами данных в среде C++Builder.
Компонент ADO Компонент BDE
ADOTable Table
ADOQuery Query
ADOStoredProc StoredProc
ADOConnection Database
ADODataSet Table, Query,
StoredProc
ADOCommand
ADOConnection используется для связи с набором данных ADO
ADODataSet универсальный компонент связи с набором данных, который может работать в различных режимах, заменяя связанные с BDE компоненты Table, Query, StoredProc.
ADOQuery используется для работы с набором данных с помощью запросов SQL, включая такие запросы языка DDL (data definition language), как CREATE TABLE.
ADOCommand используется в основном для выполнения команд SQL, не возвращающих множество результатов.
3. Извлечение данных. Поиск, сортировка данных.
Для сортировки данных используется выражение ORDER BY
field_name` [ASC | DESC] [, `field_name2` [ASC | DESC]]
Существует 2 направления сортировки данных в SQL-запросе. ASC – по возрастанию и DESC – по убыванию. По-умолчанию данные сортируются по возрастанию.
Пример:
SELECT `id` FROM `table` ORDER BY `id`;
mysql> SELECT `id` FROM `table` ORDER BY `id` ASC;[/mysql]
SELECT * FROM table_name WHERE (выражение) [order by field_name [desc][asc]] поиск
Эта команда ищет все записи в таблице table_name, которые удовлетворяют выражению выражение.
Если записей несколько, то при указанном предложении order by они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задано слово desc, то упорядочивание происходит в обратном порядке). В предложении order by могут также задаваться несколько полей.
Особое значение имеет символ *. Он предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. С другой стороны, вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения. Но чаще всего все же пользуются именно *.
БИЛЕТ № 17
