Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы MySQL.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
448.25 Кб
Скачать

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