Sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
Базы данных
Практические работы
13. Работа с готовой таблицей
1. Откройте базу данных Учебники.odb[1] и изучите её структуру. Сколько таблиц она содержит?
Ответ:
1
2. Откройте таблицу Учебники.
3. Найдите любой учебник, выпущенный издательством «Вита-Пресс».
4. Отсортируйте отобранные записи в алфавитном порядке по полю Авторы, а учебники одного и того же автора – по номеру класса (в порядке убывания). Покажите работу учителю.
5. Используя «быстрый фильтр» (фильтр по выделенному), найдите все учебники, которые выпустило издательство «Вита-Пресс». Сколько записей было отобрано?
Ответ:
25
6. Измените фильтр так, чтобы отобрать все учебники по русскому языку издательства «Дрофа». Сколько записей было отобрано?
Ответ:
6
7. Добавьте в базу данных информацию о новом учебнике: Минаева С.С., Рослова Л.О., Рыдзе О.А. и. Математика. 1 класс. – М.: «Вентана-Граф», 2013.
8. Используя фильтр и сортировку[2], определите, сколько учебников выпустили издательства «Дрофа», «Вита-Пресс» и «Вентана-Граф» для 1-ого класса. Подсказка: программа автоматически считает число выделенных записей.
Ответ:
22
14. Создание однотабличной базы данных
1. Создайте новую базу данных Футбол.
2. Создайте таблицу Футбол. В конструкторе добавьте следующие поля:
• Команда (ключевое поле, размер поля – 20 символов)
• Выигрыши
• Ничьи
• Проигрыши
• Зарплата
Определите правильный тип данных для каждого поля.
Ответ:
Текст [VARCHAR], Число [NUMERIK], Число [NUMERIK], Число [NUMERIK], Текст [VARCHAR]
3. Введите следующие данные:
Команда
| Выигрыши
| Ничьи
| Проигрыши
| Зарплата
| Аметист
|
|
|
| 13 290 р.
| Бирюза
|
|
|
| 12 500 р.
| Восход
|
|
|
| 22 000 р.
| Закат
|
|
|
| 18 780 р.
| Коллектор
|
|
|
| 20 200 р.
| Кубань
|
|
|
| 14 000 р.
| Малахит
|
|
|
| 17 340 р.
| Ротор
|
|
|
| 15 820 р.
| Статор
|
|
|
| 19 300 р.
| Финиш
|
|
|
| 12 950 р.
| 4.
4. Отсортируйте записи по убыванию количества выигрышей.
5. Примените фильтр, который отбирает только команды, имеющие более 10 побед и меньше 5 проигрышей. Сколько команд отобрано с помощью этого фильтра?
Ответ:
2
15. Создание запросов
При выполнении этой работы используются база данных Футбол, с которой вы работали на предыдущем уроке.
1. Постройте запрос с именем ЗапросЛучшие, который выводит все поля таблицы Футбол для всех команд, имеющих более 8 побед и меньше 5 проигрышей. Команды должны быть расставлены по убыванию числа побед. Сколько команд осталось в результатах запроса?
Ответ:
4
Как выглядит этот запрос на языке SQL?
Ответ:
SELECT "Выигрыши", "Проигрыши" FROM "Футбол" WHERE "Выигрыши" > 8 AND "Проигрыши" < 5 ORDER BY "Выигрыши" DESC
2. Постройте запрос с именем ЗапросОчки, который отбирает все поля из таблицы, кроме поля Зарплата. Как выглядит этот запрос на языке SQL?
Ответ:
SELECT "Команда", "Выигрыши", "Ничьи", "Проигрыши" FROM "Футбол"
3. Добавьте в этот запрос вычисляемое поле Очки (за каждую победу команда получает 3 очка, за ничью – 1 очко).
Как выглядит этот запрос на языке SQL?
Ответ:
SELECT "Команда", "Выигрыши", "Ничьи", "Проигрыши", "Ничьи" + 3 * "Выигрыши" AS "Очки" FROM "Футбол"
4. Отсортируйте записи (с помощью запроса) так, чтобы на 1-ом месте стоял победитель (команда, набравшая наибольшее количество очков). Какая команда оказалась на первом месте и сколько очков она набрала?
Ответ:
Восход (44 очка)
5. Постройте запрос с именем ЗапросЗарплата, который отбирает команды, где зарплата игроков не меньше суммы, введенной пользователем; команды должны быть расставлены по убыванию зарплаты.
Как выглядит этот запрос на язык SQL?
Ответ:
SELECT "Зарплата" FROM "Футбол" WHERE "Зарплата" >= :Минимальная_зарплата
16. Создание формы
При выполнении этой работы используются база данных Футбол, с которой вы работали на предыдущих уроках.
1. Постройте форму на основе таблицы Футбол с помощью мастера.
2. Добавьте на форму изображение футбольного мяча (файл ball.jpg).
3. Удалите надпись «Команда» и выделите название команды жирным шрифтом увеличенного размера. Внешний вид формы должен получиться примерно такой, как на рисунке справа.
4. С помощью этой формы добавьте в таблицу еще три записи:
Команда
| Выигрыши
| Ничьи
| Проигрыши
| Зарплата
| Зубр
|
|
|
| 15 900 р.
| Тур
|
|
|
| 12 300 р.
| Бизон
|
|
|
| 18 700 р.
| 5.
5. Проверьте, появились и эти записи в таблице Футбол.
6. Выполните запрос ЗапросОчки и посмотрите, как изменилась ситуация в турнирной таблице. Какая команда теперь на первом месте и сколько у неё очков?
Ответ:
Бизон (48 очков)
17. Оформление отчёта
При выполнении этой работы используются база данных Футбол, с которой вы работали на предыдущих уроках.
1. Постройте отчет Результаты на основе запроса ЗапросОчки с помощью мастера. Расположите команды по убыванию количества набранных очков.
2. Измените внешний вид отчета так, как показано на рисунке. При редактировании отчёта в OpenOffice Writer нужно добавить новый столбец Место и установить для ячейки стиль нумерованного списка.
19. Построение таблиц в реляционной БД
1. Создайте новую базу данных Кафе.
Таблицы Блюда и Заказано постройте с помощью конструктора.
1. Запишите SQL-запрос для создания таблицы Заказы и выполните его:
Ответ:
-
Примечание. Тип «дата» на языке SQL записывается как DATE.
2. Установите связи между таблицами:
3. Заполните таблицы данными из §14 (рис. 3.16). Можно добавить и свои данные. Таблицу Заказы заполните с помощью SQL-запросов. Запишите эти запросы в следующем поле:
Ответ:
-
Примечание. Дата 03.11.2014 вводится на языке SQL следующим образом:
– в OpenOffice Base как '2014-11-03';
– в русской версии Microsoft Access как '03.11.2014'.
20. Создание запросов к реляционной базе данных
1. Постройте простой запрос ЗапросЗаказы, который собирает всю информацию о составе сделанных заказов. Как выглядит этот запрос на языке SQL?
Ответ:
SELECT "Заказано"."Номер заказа", "Заказано"."Код блюда", "Блюда"."Название" AS "Навзание блюда", "Блюда"."Цена", "Заказы"."Дата" FROM "Заказано", "Блюда", "Заказы" WHERE "Заказано"."Код блюда" = "Блюда"."Код" AND "Заказано"."Номер заказа" = "Заказы"."Номер"
2. Объясните, как на языке SQL учитываются связи между таблицами?
Ответ:
SQL проверяет каждую комбинацию строк таблиц и проверяет их на условие указанное в предложении WHERE. Если эта комбинация удовлетворяет ему, то она выводится.
3. Задайте псевдонимы (подписи) для столбцов запроса. Как псевдонимы изменили SQL-запрос?
Ответ:
Добавили команду AS
4. Постройте итоговый запрос ЗапросКОплате, который подсчитывает общую сумму оплату по каждому из сделанных заказов. Как выглядит этот запрос на языке SQL?
Ответ:
SELECT SUM( "Блюда"."Цена" ) AS "Общая цена заказа", "Заказы"."Номер", "Заказы"."Дата" FROM "Заказано", "Блюда", "Заказы" WHERE "Заказано"."Код блюда" = "Блюда"."Код" AND "Заказано"."Номер заказа" = "Заказы"."Номер" GROUP BY "Заказы"."Номер", "Заказы"."Дата"
5. Объясните, как выполняется на языке SQL суммирование цен отдельных блюд?
Ответ:
С помощью команды GROUP BY
6. Объясните, что означают ключевые слова GROUP BY на языке SQL?
Ответ:
GROUP BY используется для определения групп выходных строк, к которым могут применяться разные функции, например, SUM
21. Создание формы с подчинённой
1. Используя материал §21 учебника, постройте форму, показанную на рис. 3.43.
22. Создание отчёта с группировкой
1. Используя материал §21 учебника, постройте отчёт с группировкой, показанный на рис. 3.50.
23. Нереляционные базы данных
В этой работе мы познакомимся с документо-ориентированной СУБД MongoDB (http://www.mongodb.org). Эта СУБД кроссплатформенная и относится к категории свободного программного обеспечения (Open Source). Для управления данными используется язык JavaScript.
Данные хранятся не в виде таблиц, а в виде коллекций документов. Документ – это объект, имеющий свойства, то есть пары «имя-значение». Главное свойство документа – это его идентификатор (код), который всегда играет роль первичного ключа.
В одной коллекции могут быть совершенно разные документы с разным набором свойств, это и отличает документо-ориентированную БД от реляционной.
Информация об объекте записывается в фигурных скобках, например:
{ name: "Вася", age: 16 }
Этот объект имеет два свойства (поля) – свойство name со значением «Вася» и свойство age со значением 16. Такой текстовый формат записи называется JSON (англ. JavaScript Object Notation =запись объектов с помощью JavaScript).
Свойства объекта могут быть списками значений (массивами), они перечисляются в квадратных скобках через запятую:
{ name: "Вася", age: 16, lang: ["C", "Pascal", "JavaScript"] }
Здесь свойство lang – массив, в котором записаны названия языков программирования.
Свойства могут сами быть объектами со своими свойствами, например:
{
name: "Вася",
family: { mother: "Вера", father: "Петя" }
}
Свойство family содержит два внутренних свойства (поля): mother и father.
Начало работы
1. Запустите программу mongo в консольном режиме. Определите рабочую базу данных, выполнив команду db (от англ. database = база данных)
db
Ответ:
2. Мы построим простую базу данных для блога в Интернете. Переключитесь на базу данных blog с помощью команды
Use blog
Если этой базы данных раньше не было, она будет создана. Проверьте, что она действительно стала активной.
3. Для добавления объекта в коллекцию используется оператор insert (вставить):
db.posts.insert ( документ )
Первая часть записи, «db», означает обращение к рабочей базе данных; вторая, «posts» - название коллекции (если такой коллекции нет, она будет создана), в скобках записываются свойства объекта-документа. В нашем примере в базе blog будет одна коллекция posts (сообщения, записи, «посты»). Для каждого поста нужно задать дату и текст. Добавьте одну запись следующим образом[3]:
db.posts.insert (
{date: new Date("04/23/2013"), text: "Привет!"} )
Дата (свойство date) строится с помощью функции Date; ей передается символьная запись даты в формате, принятом в США (месяц/день/год).
4. Проверьте, создана ли коллекция posts с помощью команды, которая показывает все коллекции текущей базы:
show collections
5. Проверьте, добавлена ли запись, с помощью команды
db.posts.find()
которая ищет и показывает все документы, входящие в коллекцию posts. Для вывода в красивом формате можно дополнительно вызвать функцию pretty (англ. приятный)
Db.posts.find().pretty()
В этом случае, если список свойств документа не помещается в одну строку, он выводится в столбик:
{
"_id": ObjectId("5176abbc06a6380da34966a2"),
"date": ISODate("2013-04-22T20:00:00Z"),
"text": "Привет!"
}
СУБД автоматически добавила поле «_id» (идентификатор, код), которое представляет собой суррогатный первичный ключ и строится случайным образом с помощью функции ObjectId. Дата преобразована в формат Международной организации по стандартизации (ISO).
6. Если нужно, значение ключа «_id» можно задать самостоятельно, какое мы хотим. Удалим все документы из коллекции командой remove:
db.posts.remove()
и добавим четыре новых поста в базу, указав явно идентификаторы[4]:
db.posts.insert ( {_id: 1, date: new Date("04/23/2013"), text: "Привет!" } )
db.posts.insert ( {_id: 2, date: new Date("04/24/2013"), text: "Это второй пост." } )
db.posts.insert ( {_id: 3, date: new Date("04/25/2013"), text: "Это третий пост." } )
db.posts.insert ( {_id: 4, date: new Date("04/26/2013"), text: "Это четвёртый пост." } )
Убедитесь, что документы действительно добавлены в коллекцию.
Поиск
7. Для поиска нужных документов используется уже знакомая нам функция find. В скобках можно задать критерий поиска – это объект (записанный в фигурных скобках), который содержит название поля и значение этого поля, которое мы ищем. Например, найдите документ с кодом (идентификатором, _id), равным 2:
db.posts.find( {_id: 2} )
8. В условиях можно использовать не только строгие равенства, как в предыдущее примере, но неравенства. Неравенство – это тоже объект, у которого специальное название свойства, начинающееся знаком $:
$ne – не равно,
$lt – меньше, $lte – меньше или равно,
$gt – больше, $gte – больше или равно
Например, найдем записи с идентификатором больше 2:
db.posts.find( {_id: {$gt: 2} } )
Сколько документов найдено?
Ответ:
9. Найдем посты, написанные 24.04.2013 или позднее:
db.posts.find({date: {$gte: new Date("04/24/2013")} })
10. Для поиска можно использовать сразу несколько условий. Если все условия нужно выполнить одновременно, их записывают как один объект с несколькими свойствами. Например, следующий запрос находит все документы, у которых свойство «_id» больше 2, а дата создания – не раньше 26.04.2013:
db.posts.find( { _id: {$gt: 2},
date: {$gtе: new Date("04/26/2013")} } )
11. Самое мощное средство поиска в MongoDB – это оператор $where, которому можно передать строку в кавычках, задающую условие поиска на JavaScript, например,
db.posts.find( { $where: "this._id > 2" } )
Здесь this – это объект (документ), который требуется проверить; через точку записывается название нужного поля. Оператору $where можно передать любую функцию на JavaScript, которая возвращает логическое значение (истинное, если условие отбора выполняется). Например, запрос, показанный в п. 10, можно было записать так:
db.posts.find( { $where: function()
{ return this._id > 2 &&
this.date >= new Date("04/26/2013")
}
} )
Пара символов && в языке JavaScript обозначает логическую операцию «И», а символы || – логическую операцию «ИЛИ». Проверка на равенство записывается как «==», а условие «не равно» – как «!=».
12. Составьте запрос для поиска всех документов, у которых свойство _id равно 1 или дата создания равна 26.04.2013:
Ответ:
Сортировка
13. Для сортировки используется функция sort. Она сортирует те документы, которые предварительно найдены с помощью find. При вызове функции sort в скобках указывается порядок сортировки – объект (в фигурных скобках), содержащий название поля для сортировки; значение этого поля может быть 1 (сортировка по возрастанию) или «-1» (по убыванию).
Отсортируйте документы по возрастанию даты
db.posts.find().sort( {date: 1} )
а теперь по убыванию:
db.posts.find().sort( {date: -1} )
Изменение
14. Для изменения документов используют команду update. Допустим, мы хотим добавить к документу с идентификатором 1 новое логическое свойство visible (англ. видимый) и присвоить ему значение false (ложь), которое означает, что это пост пока скрыт и выводить его на веб-страницу не нужно.
Функции update передаются два объекта в фигурных скобках: условие, позволяющее найти нужный документ, и свойства, которые у него нужно изменить. Попробуйте выполнить команду
db.posts.update( {_id: 1}, {visible: false} )
и посмотрите, что получилось в результате.
Ответ:
15. Восстановите исходный пост с кодом 1.
16. Для того, чтобы не заменять документ полностью, а изменить (или добавить) значение какого-то поля, нужно использовать специальный объект со свойством $set (установить):
db.posts.update( {_id: 1}, {$set: {visible: false}} )
Примените эту команду и проверьте результат её выполнения.
Обратите внимание, что сейчас в коллекции posts находятся документы с разной структурой: один из них имеет свойство visible, а остальные – нет. При этом никаких изменений в структуру базы данных вносить не пришлось.
17. Найдите все документы, у которых свойство visible равно false. Какой запрос нужно для этого выполнить?
Ответ:
18. Теперь выполним множественное обновление: установим свойство visible равным true (истина) для всех документов, для которых это свойство не установлено (или, что то же самое, равно специальному нулевому значению null):
db.posts.update( {visible: null},
{$set: {visible: true}}, {multi: true} )
Третий параметр – объект со свойством multi (англ. множественный), равным true (истина) разрешает изменение нескольких документов сразу (если его не указать, будет изменён только один документ – тот, который найден первым).
19.Составьте запрос для поиска всех документов, у которых свойство visible равно true, а дата создания – не позднее 25.04.2013:
Ответ:
Проверьте результат его работы.
20. Теперь добавим к комментарии к одному из постов (с идентификатором 2). Заметьте, что благодаря документо-ориентированной СУБД заранее планировать наличие комментариев не нужно – мы можем добавлять новые свойства к любому документу «на ходу».
Комментариев может быть много, поэтому новое свойство comments будет массивом. Для добавления нового элемента в массив используется специальный объект со свойство $push (англ. втолкнуть):
db.posts.update( {_id: 2},
{$push: {comments: "Комментарий 1"} })
db.posts.update( {_id: 2},
{$push: {comments: "Комментарий 2"} })
db.posts.update( {_id: 2},
{$push: {comments: "Комментарий 3"} })
Когда выполняется первая из этих команд, у документа с идентификатором 2 еще нет свойства comments – оно будет создано автоматически.
21. Все документы с комментариями можно найти с помощью объекта со свойством $exists (существует):
var c = db.posts.find( {comments: {$exists: true}} )
Результат этого запроса не выводится на экран, а записывается в переменную c. Затем можно определить его длину (число найденных документов) с помощью функции length (англ. длина) и вывести на экран в цикле в формате JSON с помощью функции printjson:
for(i = 0; i < c.length(); i++) printjson( c[i] )
Можно работать и с отдельными свойствами, например, вывести на экран даты всех найденных постов с помощью функции print:
for(i = 0; i < c.length(); i++) print( c[i].date )
Удаление
22. Как вы уже знаете, для удаления всех документов из коллекции используется команда remove. Запишите команду, которая удаляет все документы из коллекции posts, но не выполняйте её.
Ответ:
23. С помощью команды remove можно удалять отдельные записи – условие для поиска нужных записей задается как параметр функции. Например:
db.posts.remove( {_id: 4} )
Выполните эту команду и проверьте её выполнение.
24. Запишите команду для удаления всех документов, у которых свойство visible установлено в false выполните её.
Ответ:
25. С помощью команды drop вся коллекция удаляется из базы. Например,
db.posts.drop()
26. Объясните, в чём отличие между командами remove() и drop().
Ответ:
27. Проверьте, что коллекция posts действительно была удалена. Какую команду нужно для этого использовать?
Ответ:
Дополнительная информация:
1. http://www.mongodb.org – официальный сайт разработки MongoDB.
2. http://docs.mongodb.org/manual/installation/ – инструкция по установке MongoDB для разных операционных систем.
3. http://jsman.ru/mongo-book/ – русский перевод книги K. Seguin «The Little MongoDB Book».
Установка MongoDB
Windows
1. Скачайте архив с программой со страницы http://www.mongodb.org/downloads
2. Распакуйте архив в отдельный каталог в любом месте диска, например, в каталог C:\MongoDB. Внутри этого каталога должен появиться каталог bin, в котором находятся все файлы СУБД.
3. Создайте новый каталог, где будут храниться данные. Удобно создать это каталог прямо внутри каталога C:\MongoDB, например, C:\MongoDB\data.
4. Создайте в каталоге C:\MongoDB\bin командный файл start.bat с командой запуска серверной части, в параметре dbpath указывается путь к каталогу с базами данных:
C:\MongoDB\bin\mongod.exe --dbpath C:\МongoDB\data
5. Создайте (например, на рабочем столе) ярлык на файл C:\MongoDB\bin\start.bat для запуска серверной части.
6. Создайте (например, на рабочем столе) ярлык на файл C:\MongoDB\bin\mongo.exe для запуска консоли (оболочки).
7. Запустите серверную часть, затем запустите консоль.
Ubuntu
Установка пакета
1. В Терминале введите следующую команду для импорта публичного GPG-ключа (http://docs.mongodb.org/10gen-gpg-key.asc):
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
2. Создайте файл /etc/apt/sources.list.d/10gen.list и добавьте в него строку для обращения к репозиторию компании 10gen:
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
3. Перегрузите список репозиториев командой
sudo apt-get update
4. Установите последнюю версию пакета командой
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2025 stydopedia.ru Все материалы защищены законодательством РФ.
|