Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SC_sem6_2012_BD_w1.doc
Скачиваний:
0
Добавлен:
25.09.2019
Размер:
1.46 Mб
Скачать

5Система управления базами данных mysql

Теперь попробуем перенести частью, созданную нами базу данных, на другую реляционную СУБД, называемую MySQL. Данная СУБД является свободной и является удачным решением для баз данных, используемых приложениями малой и средней сложности.

В рамках данного раздела мы попытаемся реализовать один запрос технического задания.

В стандартной свободной комплектации, MySQL не имеет никакого графического интерфейса, а для работы с базами в ней служит терминал клиента. В терминале вводятся запросы на языке SQL (с которыми мы два раза уже встретились в предыдущем разделе).

Открываем терминал и вводим пароль клиента, который был создан во время установки СУБД. После удачного входа можно начать работу. Так как базы данных еще не создано, то создадим ее, написав следующую инструкцию

CREATE DATABASE faculty;

Здесь faculty – имя нашей базы данных. Теперь сделаем нашу базу активной с помощью инструкции USE следующим образом.

USE faculty;

Реализуем запрос на поиск успевающих студентов. Для этого нам понадобится две таблицы: студенты и сессия. В MySQL названия таблиц будем писать на латинице. Создадим первую таблицу, написав следующее выражение

CREATE TABLE students(

rec_book CHAR(255),

initial CHAR(255),

birthday DATE,

address CHAR(255),

phone CHAR(15),

num_group INTEGER,

far_away CHAR(1));

Мы не будем использовать все поля таблицы, поэтому заполним только столбцы rec_book (зачетная книжка) и initial (инициалы). Определим первичный ключ таблицы

ALTER TABLE students ADD PRIMARY KEY(rec_book);

Инициалы студента будем переводить на транслитерацию, т.к. мы не настроили кириллицу. Чтобы, например, вписать студента Иванова Федора Михайловича, который имеет номер зачетной книжки 0337001, нужно написать следующее

INSERT INTO students (rec_book, initial) VALUES ("0337001", "Ivanov F.M. ");

Аналогично поступаем для оставшихся 13-ти студентов. На рисунке 5.1 показан запрос на все записи таблицы students.

Рисунок 5.1 Таблица студентов в MySQL

Создадим таблицу session

CREATE TABLE session(

ID_disc INTEGER,

student CHAR(255),

result TINYINT,

form CHAR(20));

ALTER TABLE session ADD PRIMARY KEY(ID_disc,student);

Заполним в ней уже все поля. Например, запись о сдаче 8 предмета Ивановым будет выглядеть так

INSERT INTO session VALUES(8, "0337001", 5, "exam");

Аналогично перенесем записи из приложения А. На рисунке 5.2 показан запрос на записи таблицы session.

Рисунок 5.2 Таблица с записями о сессии

Имея все необходимые данные, найдем успевающих студентов. Как и в предыдущем разделе, решение здесь остается таким же, исключение неуспевающих студентов из общей массы. Найти неуспевающих студентов очень легко, так как их выдает хотя бы один не сданный экзамен, поэтому запрос будет выглядеть так

SELECT DISTINCT student

FROM session

WHERE form="exam" AND result<3;

Данный запрос следует сделать подчиненным. Основной же запрос должен сравнивать все записи с результатом подчиненного. Данная схема реализуется с помощью предложения IN и NOT IN, которая проверяет принадлежность элемента к множеству. С учетом этого, запрос на список успевающих студентов примет вид

SELECT rec_book, initial

FROM students

WHERE rec_book

NOT IN(

SELECT DISTINCT student

FROM session

WHERE form="exam" AND result<3)

ORDER BY rec_book;

Данный запрос следует понимать так: «выбрать те и только те записи с атрибутами rec_book и initial из таблицы students, которые не принадлежат множеству неуспевающих студентов и отсортировать их по номеру зачетки». На рисунке 5.3 представлен результат данного запроса. Нетрудно заметить, что результат соответствует результату запроса рисунка 3.16. Заметим, что мы обошлись без внешнего соединения, как это было в Access.

Рисунок 5.3 Запрос на список успевающих студентов

В заключении, проведем небольшой эксперимент. Так как наш вышепредставленный запрос соответствует стандарту SQL ANSI-92, то он является переносимым по отношению к Microsoft Access 2007, поддерживающий тот же стандарт. Создадим в Access новый запрос и перейдем в режим SQL. Теперь напечатаем наш запрос (разумеется, заменив имена таблиц) и попробуем его запустить. Как мы видим (рисунок 5.4), результат оказывается аналогичным. Из чего можно заключить, что вариант с естественным соединением был не очень удачной идеей.

Рисунок 5.4 Запрос «Успевающие студенты»

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]