Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задания по курсу 2013

.docx
Скачиваний:
15
Добавлен:
14.05.2015
Размер:
1.09 Mб
Скачать

Задания по курсу «Базы данных». Часть первая. Microsoft SQL Server.

  1. Простейшие SQL-запросы.

1) C помощью программы управления SQL Server Management Studio cоединитесь с сервером баз данных server, используя индивидуальные имя и пароль (которые следует получить у преподавателя) в режиме «SQL Server Authentication». Нажмите кнопку New Query и перейдите к базе данных pubs с помощью команды USE pubs. Все выполняемые SQL-инструкции сохраняйте в текстовом файле на вашем рабочем носителе с помощью команды меню File/SaveSQLQuery1.sql. При нажатии на кнопку Execute или Debug запрос будет отправлен на выполнение СУБД. Если вы сомневаетесь в синтаксисе команды, используйте клавишу F1, а также откройте online-помощь по адресу http://technet.microsoft.com/en-us/library/ms130214.aspx. Чтобы не выполнялись ранее написанные строки запросов, закомментируйте их так:

-- line comment

или так:

/*

multiline

comments

*/

Файл, созданный вами в процессе выполнения задания, по окончании работы передайте преподавателю. Это будет ваш отчёт о проделанной работе. В комментариях укажите вашу фамилию, имя, номер группы и номер варианта, который вы выполняли (он соответствует номеру компьютера, за которым вы сидите). Задания, отмеченные звёздочкой, могут быть оставлены для размышлений на последующие занятия.

Запросы к одной таблице.

2) Напишите запросы, выводящие полное содержимое таблиц authors, titles, titleauthor, publishers. Познакомьтесь со структурой и содержанием этих таблиц.

SELECT * FROM authors

SELECT au_lname AS [Фамилия], au_fname AS [Имя] FROM authors

Cписок авторов, проживающих в штате Калифорния:

SELECT * FROM authors WHERE state='CA'

Битовое поле contract таблицы authors содержит информацию о том, заключён ли договор с издательством. Пример запроса, показывающий, сколько авторов не заключили договора:

SELECT Count(*) FROM authors WHERE contract=0

3) Напишите запрос, выводящий список авторов, номера телефонов которых содержат номер вашего варианта. Тип поля phone является текстовым.

Отсортированный по алфавиту список тем, по которым выпускались книги. Наименование темы находится в поле type таблицы titles:

SELECT DISTINCT type FROM titles ORDER BY type

4) Напишите запрос, показывающий названия всех книг по темам «бизнес» и «психология».

Пример запроса, показывающий, сколько изданий выпущено по каждой теме. Список отсортирован по убыванию количества изданий.

SELECT type AS [Тема], Count(*) AS [Число изданий] FROM titles GROUP BY type ORDER BY [Число изданий]

5) Напишите запрос, выводящий отсортированный по убыванию стоимости список наименований книг и их цену в рублях, игнорируя книги, цена на которые не указана.

6*) Напишите запрос, выводящий тему, по которой выпущено наибольшее число изданий.

Запросы к нескольким таблицам.

Список названий книг вместе с названиями выпустивших их издательств:

Вариант 1 (современная нотация)

SELECT t.title, p.pub_name

FROM titles t INNER JOIN publishers p

ON t.pub_id = p.pub_id

Вариант 2 (нотация SQL-1, использовать не следует)

SELECT titles.title, publishers.pub_name

FROM titles, publishers

WHERE titles.pub_id = publishers.pub_id

Какие издания были выпущены издательством “New Moon Book’s”?

SELECT * FROM titles t INNER JOIN publishers p

ON t.pub_id = p.pub_id

WHERE p.pub_name = 'New Moon Books'

Oтсортированный по алфавиту список названий книг вместе с именами и фамилиями авторов:

SELECT t.title, au.au_lname, au.au_fname

FROM (titleauthor ta INNER JOIN titles t ON ta.title_id = t.title_id)

INNER JOIN authors au ON ta.au_id = au.au_id

ORDER BY t.title, ta.au_ord

7) Напишите запрос, позволяющий вывести отсортированный по алфавиту список названий книг с именем и фамилией только одного (главного) автора. Для главного автора поле au_ord в таблице titleauthor равно 1.

8) Напишите запрос, определяющий, автором каких книг является Akiko Yokomoto?

9) Напишите запрос, подсчитывающий, сколько книг написал каждый из авторов?

Пример запроса, показывающий, какие издания имеют более чем одного автора:

SELECT max (t.title) AS [Название], Count(*) as [Число авторов]

FROM titles t INNER JOIN titleauthor ta

ON t.title_id = ta.title_id

GROUP BY ta.au_id

HAVING Count(*)>1

10) Напишите запрос, который подсчитает, сколько книг было выпущено каждым из издательств (поле ytd_sales) до 1991 года, учитывая только издательства, выпустившие более 1 наименования книг.

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

  1. Разработка собственной базы данных.

Задание: Разработать собственную базу данных по примеру схемы данных «Расписание занятий». В данном примере предметная область соответствует расписанию занятий учебной группы на физическом факультете ПетрГУ. Вы можете использовать любую другую предметную область и создавать свою модель данных.

В первую очередь следует создать структуру базы данных, которая должна состоять из нескольких связанных между собой таблиц. В представленном примере модель данных, помимо сетки расписания по дням недели и часам, учитывает числитель и знаменатель, группы, подгруппы и смешанные группы, корпуса и аудитории. Одна из возможных инфологических моделей данных приведена на рисунке (это только иллюстрация – схему данных в удобном для работе виде можно найти в каталоге рабочих ресурсов курса «Базы данных»). Однако рекомендуется проявить творческую фантазию и не копировать эту модель.

Перейдите в базу данных с именем, соответствующим вашему логину. С помощью команды CREATE TABLE создайте таблицы, соответствующие инфологической модели вашей предметной области. Используйте команду DROP TABLE для удаления неудачной таблицы и ALTER TABLE для изменения структуры таблицы. SQL Server Management Studio предлагает инструменты для интерактивного редактирования таблиц (без использования вышеупомянутых команд), поэтому рекомендуется изучить оба способа. Используйте команду INSERT INTO для добавления данных в таблицы, и команду UPDATE в случае их изменения. В вашем отчётном файле должны сохраниться запросы на создание собственных таблиц и добавление в них данных.

Ниже приведено несколько примеров работы по созданию структуры БД и наполнению таблиц информацией.

  1. Если в базу потребуется вводить даты, сразу укажите принятый в России формат ввода:

SET DATEFORMAT dmy

  1. Создание таблицы, в которой хранятся названия студенческих групп (первичный ключ – номер группы):

CREATE TABLE Group_names ([Group] int PRIMARY KEY, name varchar(200), grade_level int DEFAULT 1)

  1. Добавление данных в созданную таблицу:

INSERT INTO Group_names VALUES (21101, 'Физика', 1)

INSERT INTO Group_names VALUES (21201, 'Физика', 2)

INSERT INTO Group_names VALUES (21103, 'Физическая электроника', 1)

SELECT * FROM Group_names

  1. Создание таблицы, хранящей информацию о студентах, со всякими сложными условиями, налагаемыми на ввод данных:

CREATE TABLE Students (id int PRIMARY KEY, f_name nvarchar(50) NOT NULL, l_name nvarchar(50) NOT NULL, birthdate datetime CHECK (birthdate >='1.01.1900' and birthdate <= GetDate()), [group] int REFERENCES Group_names([Group]))

  1. Добавление корректных и некорректных данных в таблицу:

INSERT INTO Students VALUES (17452433,'Игнат','Карбонат','11.06.1995',21101)

INSERT INTO Students VALUES (16322423,'Ходжа','Насреддин','25.10.1917',21301)

INSERT INTO Students VALUES (28764312,'Альберт','Эйнштейн','25.06.1879',21201)

3. Организация простейшего интерфейса к базе данных с использованием среды Visual Studio.

Рассмотрим элементарные шаги для удобного отображения списка вывода, полученного с помощью какого-либо из вышеприведенных select-запросов, с помощью визуального инструмента DataGridView. В качестве источника данных для примера будет использована БД pubs, однако выполнить задание необходимо, используя свою, только что созданную базу данных.

  1. Откройте среду Visual Studio и создайте новый проект на языке Visual Basic. Местом размещения проекта рекомендуется выбрать диск D:, но не рекомендуется использовать сетевые диски. Компромиссным вариантом является создание проекта на USB-накопителе.

  1. Для подключения к базе данных MS SQL Server следует воспользоваться пунктом меню «Данные / Добавить новый источник данных» и, на первой вкладке мастера, выбрать пиктограмму «База данных». В следующем окне мастера следует нажать на кнопку «Создать подключение», и выбрать источник и поставщика данных. Рабочим вариантом поставщика для связки SQL Server 2012 – Visual Studio 2008 SP1 является только OLE DB интерфейс (и только при наличии SP1 для среды Visual Studio 2008).

  1. В следующем окне укажите имя или IP-адрес сервера, к которому производится подключение, затем введите своё имя и пароль, выберите свою базу данных. После возвращения в основное окно мастера можно согласиться ввести конфиденциальные данные в строку подключения – так будет меньше проблем с доступом.

  1. На заключительном шаге мастера можно (ради интереса) выбрать все таблицы, которые затем появятся на вкладке «Источники данных». На вкладке «Обозреватель решений» появится автоматически созданный набор данных DataSet1.xsd, содержание которого можно посмотреть в виде графической схемы данных (ER-диаграммы). В созданный набор данных можно вносить различные изменения, например, добавлять собственные таблицы или таблицы, которые будут строиться по результатам запроса, однако без специального указания эти изменения не будут транслироваться обратно в базу данных SQL Server.

  1. Добавим в набор данных таблицу, которая будет строиться по результату запроса. В процессе создания «table adapter» будет вызван интерактивный мастер построения запросов. В очередном окне мастера «table adapter» выберите пункт «Использовать инструкции SQL», и нажмите кнопку «Построитель запросов». Используйте его возможности для связывания между собой нескольких таблиц и постановки необходимых условий на выборку данных. С помощью мастера разработайте и проверьте созданный запрос на выборку данных.

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

  1. Вытащите из панели элементов на форму элемент DataGridView и сформируйте для него источник данных, который базируется на только что созданной таблице. С помощью пункта «Правка столбцов» отредактируйте названия и положение столбцов таблицы на форме. Дополнительное дизайнерское оформление можно применить, используя панель «Свойства» для данного элемента.

  1. Запустите проект на исполнение, посмотрите результат.

  1. Расширьте функциональность вашей системы в зависимости от поставленных вами целей. Начните со взаимодействия нескольких элементов управления. В данном примере сделаем поле с выпадающим списком, которое будет показывать названия всех издательств, а общая таблица будет показывать только книги и их авторов для выбранного издательства. Будем предполагать, что поле pub_id присутствует в списке полей вывода для элемента DataGridView, однако свойство видимости для этого поля выключено. Для этого вытащим на форму элемент «поле с выпадающим списком» и свяжем его с таблицей publishers.

  1. Для создания фильтра на источник данных для DataGridView потребуется обработать событие SelectedIndexChanged для поля с выпадающим списком. Для этого создадим обработчик…

… и напишем внутри него следующий код:

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

If ComboBox1.SelectedValue <> "" Then DataTable1BindingSource.Filter = "pub_id=" & ComboBox1.SelectedValue

End Sub

Что-то похожее можно вставить и в функцию Form1_Load , чтобы не было рассогласования полей в момент старта программы. После запуска программы элемент с выпадающим списком начинает управлять содержанием DataGridView: