Файл: Занятие 63 (І семестр) Вид занятия Лабораторная работа (30) Тема Построение запросов к базе данных на языке sql (различных типов).doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.12.2023
Просмотров: 49
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Учебно-методическая план-карта занятия
Занятие № 63
(І семестр)
Вид занятия: Лабораторная работа (№ 30)
Тема: Построение запросов к базе данных на языке SQL (различных типов).
Цель: Закрепить навыки построения запросов различных типов к базе данных на языке SQL. Обеспечить развитие у обучающихся навыков, способствующих развитию памяти, логического мышления и применению имеющихся знаний и умений при создании баз данных в СУБД MySQL. Способствовать формированию информационной культуры, умения и навыков коллективного и самостоятельного овладения знаниями.
Оборудование: Раздаточный материал, компьютер, Open Server, MySQL.
Литература:
-
Джеймс Р., SQL: полное руководство, 3-е изд. / Джеймс Р. Грофф, Вайнберг Пол Н., Оппелъ, Эндрю Дж : Пер. с англ. - М.: ООО "И.Д. Вильямс", 2015. - 960 с. -
Кудрявцев К.Я. Создание баз данных: Учебное пособие/ К.Я. Кудрявцев. – М.:НИЯУ "МИФИ", 2010. – 155 с. -
Мартишин С.А. Проектирование и реализация баз данных в СУБД MySQL с использованием MySQL Workbench: Учебное пособие / С.А. Мартишин и др. – М.: ИД ФОРУМ: НИЦ Инфра-М, 2012. – 160 с.
Структура занятия:
1. Организационная часть
2. Сообщение темы, цели и основных задач
3. Вопросы занятия:
3.1. Контроль исходного уровня знаний студентов и актуализации опорных знаний:
3.1.1 Какие основных условий отбора (в стандарте ANSI/ISO они называются предикатами) используются в SQL?
3.1.2. Какие итоговые функции используются в SQL?
3.1.3. Чем CROSS JOIN отличается от UNION JOIN ?
3.1.4. Что собой представляет вложенный запрос?
3.2. Инструктаж по технике безопасности на рабочем месте.
3.3. Выполнение студентами заданий лабораторной работы.
Содержание задания: см. инструкцию.
3.4. Текущий контроль выполнения работы
3.5. Защита отчетов по работе
4. Подведение итогов (анализ, систематизация знаний и навыков).
5. Выдача задания для самостоятельной работы студентов
Оформить отчет по лабораторной работе
6. Уборка рабочих мест
Преподаватель: Гирич Н.Н.
Лабораторная работа №30
Тема: Построение запросов к базе данных на языке SQL (различных типов).
Цель: Закрепить навыки построения запросов различных типов к базе данных на языке SQL. Обеспечить развитие у обучающихся навыков, способствующих развитию памяти, логического мышления и применению имеющихся знаний и умений при создании баз данных в СУБД MySQL. Способствовать формированию информационной культуры, умения и навыков коллективного и самостоятельного овладения знаниями.
Оборудование: Раздаточный материал, компьютер, Open Server, MySQL.
Содержание отчета:
1. Тема, цель лабораторной работы.
2. Тексты SQL запросов и результаты их выполнения для каждого пункта индивидуального задания (Номер варианта указан в самом левом столбце (N п/п) журнала вашей группы).
4. Выводы.
Порядок выполнения работы
База данных книготорговой компании (база данных pubs) включает три таблицы, определяющие сущности: таблица authors определяет авторов, таблица publishers - издателей, а таблица titles - сами книги. Четвертая таблица titleauthor задает отношение между таблицами titles и authors. Она показывает, какие авторы написали какие книги. Связь между таблицами titiles и publishers определяется столбцом pub_id в данных таблицах.
Ниже представлены структуры используемых таблиц.
Структура таблицы authors
Имя столбца | Тип данных | Размерность | Возможность значений null | Содержательное описание |
au_id | varchar | 11 | Нет | Идентификатор автора |
au_lname | varchar | 40 | Нет | Фамилия автора |
au_fname | varchar | 20 | Нет | Имя автора |
phone | char | 12 | Нет | Номер телефона |
address | varchar | 40 | Да | Адрес (улица, дом, квартира) |
city | varchar | 20 | Да | Город проживания |
state | char | 2 | Да | Штат проживания |
zip | char | 5 | Да | Энергичность |
contract | bit | 1 | Нет | Наличие контракта |
Структура таблицы publishers
Имя столбца | Тип данных | Размерность | Возможность значений null | Содержательное описание |
pub_id | char | 4 | Нет | Идентификатор издательства (издателя) |
pub_name | varchar | 40 | Да | Название издательства (имя издателя) |
city | varchar | 20 | Да | Город |
state | char | 2 | Да | Штат |
country | varchar | 30 | Да | Страна |
Структура таблицы titles
Имя столбца | Тип данных | Размерность | Возможность значений null | Содержательное описание |
title_id | varchar | 6 | Нет | Идентификатор книги |
title | varchar | 80 | Нет | Название книги |
type | char | 12 | Нет | Тип книги |
pub_id | char | 4 | Да | Идентификатор издательства |
price | money | 8 | Да | Цена |
advance | money | 8 | Да | Аванс (стоимость предварительной продажи) |
royalty | int | 4 | Да | Гонорар |
ytd_sales | int | 4 | Да | Число книг, проданных в текущем году |
notes | varchar | 200 | Да | Замечания |
pubdate | datetime | 8 | Нет | Дата опубликования |
Структура таблицы titleauthor
Имя столбца | Тип данных | Размерность | Возможность значений null | Содержательное описание |
au_id | varchar | 11 | Нет | Идентификатор автора книги |
title_id | varchar | 6 | Нет | Идентификатор книги |
au_ord | tinyint | 1 | Да | Порядок автора в названии книги |
royaltyper | int | 4 | Да | Авторский гонорар |
В столбце type таблицы titles используются следующие типы книг: business - книги по бизнесу, mod_cook - книги по современной кулинарии, popular_comp - книги по компьютерной тематике, psychology - книги по психологии, trad_cook - книги по традиционной кулинарии, UNDECIDED - неопределенный тип книги.
В столбцах state таблиц authors и publishers используются следующие обозначения административных единиц США: CA - штат Калифорния, DC - округ Колумбия, IL - штат Иллинойс, IN - штат Индиана, KS -штат Канзас, MD - штат Мэриленд, MA - штат Массачусетс, MI - штат Мичиган, NY - штат Нью-Йорк, OR - штат Орегон, TN - штат Теннесси, TX - штатТехас, UT - штат Юта.
В столбце country таблицы publishers используются следующие обозначения стран: France - Франция, Germany - Германия, USA - США.
Домен городов, используемый в таблицах authors и publishers, включает города Ann Arbor, Berkeley, Boston, Chicago, Corvallis, Colevo, Dallas, Gary, Lawrence, Menlo Park, Munchen, Nashville, New York, Oakland, Palo Alto, Paris, Rockville, Salt Lake City, San Francisco, San Jose, Vacaville, Walnul Creek, Washington.
Задание 1
-
Выполните импорт базы данных Labа_30, которая находится в папке задания по лабораторной работе.
Вариант | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Номер SQL-запроса | 1, 46, 47, 92, 93 | 2, 45, 48, 91, 94 | 3, 44,49, 90, 95 | 4, 43, 50, 89, 96 | 5, 42, 51, 88, 93 | 6, 41, 52, 87, 94 | 7, 40, 53, 86, 95 |
Вариант | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
Номер SQL-запроса | 8, 39, 54, 85, 96 | 9, 38, 55, 84, 93 | 10, 37, 56, 83, 94 | 11, 36, 57, 82, 95 | 12, 35, 58, 81, 96 | 13, 34, 59, 80, 93 | 14, 33, 60, 79, 94 |
Вариант | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
Номер SQL-запроса | 15, 32, 61, 78, 95 | 16, 31, 62, 77, 96 | 17, 30, 63, 76, 93 | 18, 29, 64, 75, 94 | 19, 28, 65, 74, 95 | 20, 27, 66, 73, 96 | 21, 26, 67, 72, 93 |
Вариант | 22 | 23 | | | | | |
Номер SQL-запроса | 22, 25, 68, 71, 94 | 23, 24, 69, 70, 95 |
Дать содержательную интерпретацию SQL-запросам, выполнить их, дать содержательную интерпретацию результатам выполнения SQL-запросов.
-
SELECT au_lname, au_fname
FROM authors -
SELECT au_lname, au_fname
FROM authors
ORDER BY au_lname -
SELECT au_lname, au_fname
FROM authors
ORDER BY au_lname, au_fname -
SELECT title_id, price, ytd_sales,
price*ytd_sales 'ytd dollar sales'
FROM titles
ORDER BY price*ytd_sales -
SELECT title_id, price, ytd_sales,
price*ytd_sales 'ytd dollar sales'
FROM titles
ORDER BY price*ytd_sales DESC -
SELECT title_id, type, ytd_sales
FROM titles
ORDER BY type ASC, ytd_sales DESC -
SELECT AVG(price)
FROM titles -
SELECT DISTINCT type
FROM titles
ORDER BY type ASC -
SELECT DISTINCT city
FROM authors
ORDER BY city DESC -
SELECT DISTINCT state
FROM authors
ORDER BY state -
SELECT DISTINCT country
FROM publishers
ORDER BY country DESC -
SELECT AVG(price), AVG(DISTINCT price)
FROM titles -
SELECT *
FROM titles -
SELECT au_lname, au_fname
FROM authors
WHERE state= 'CA' -
SELECT type, title_id, price
FROM titles
WHERE price*ytd_sales < advance -
SELECT au_id, city, state
FROM authors
WHERE state= 'CA' OR city= 'Palo Alto' -
SELECT title_id, price
FROM titles
WHERE price between $5 AND $15 -
SELECT title_id, price
FROM titles
WHERE type IN ('mod_cook', 'trad_cook', 'business') -
SELECT au_lname, au_fname, city, state
FROM authors
WHERE city like 'San%' -
SELECT type, title_id, price
FROM titles
WHERE title_id like 'B_2075' -
SELECT type, title_id, price
FROM titles
WHERE title_id like 'B[AUN]7832' -
SELECT AVG(price) 'AVG'
FROM titles
WHERE type= 'business' -
SELECT AVG(price) 'avg', SUM(price) 'sum'
FROM titles
WHERE type IN ('business', 'mod_cook') -
SELECT COUNT(*)
FROM authors
WHERE state= 'CA' -
SELECT COUNT(*)
FROM titles
WHERE title LIKE 'Co%s' -
SELECT title
FROM titles
WHERE ytd_sales IS NULL -
SELECT au_lname 'Фамилия', au_fname 'Имя'
FROM authors
WHERE contract=1 AND phone LIKE '408____-__2_' -
SELECT phone
FROM authors
WHERE address LIKE '%Broadway Av.%' -
SELECT title, pubdate
FROM titles
WHERE pubdate>= 'Jun 9 1991 12:00AM'
AND pubdate< '6/16/91' -
SELECT type, AVG(price) 'avg', SUM(price) 'sum'
FROM titles
WHERE type IN ('business', 'psychology')
GROUP BY type -
SELECT type, pub_id, AVG(price) 'avg', SUM(price) 'sum'
FROM titles
WHERE type IN ('business', 'mod_cook')
GROUP BY type, pub_id -
SELECT type, AVG(price)
FROM titles
WHERE price>$11
GROUP BY type
HAVING AVG(price)>$19.7 -
SELECT au_id, COUNT(*)
FROM authors
GROUP BY au_id
HAVING COUNT(*)>1 -
SELECT type, MIN(price), MAX(price)
FROM titles
GROUP BY type
ORDER BY type -
SELECT type, MIN(price), MAX(price)
FROM titles
GROUP BY type
HAVING MAX(price)-MIN(price)>=3 -
SELECT state, COUNT(DISTINCT pub_id)
FROM publishers
GROUP BY state -
SELECT pub_name, AVG(price) 'avg',
COUNT(DISTINCT title_id) 'count'
FROM titles t JOIN publishers p ON t.pub_id=p.pub_id
GROUP BY pub_name -
SELECT type, (MIN(price)+MIN(price))/2, AVG(price)
FROM titles
GROUP BY type
HAVING type<> 'UNDECIDED'
ORDER BY 2 DESC -
SELECT type, MIN(pubdate), MAX(pubdate)
FROM titles
GROUP BY type -
SELECT title, pub_name
FROM titles CROSS JOIN publishers -
SELECT *
FROM titles, publishers -
SELECT title, pub_name
FROM titles, publishers
WHERE titles.pub_id=publishers.pub_id -
SELECT title, pub_name
FROM titles JOIN publishers ON titles.pub_id=publishers.pub_id -
SELECT *
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id -
SELECT t.*, pub_name
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id -
SELECT a.city, a.state
FROM authors a, publishers p
WHERE a.city=p.city AND a.state=p.state -
SELECT au_lname, au_fname
FROM authors a JOIN titleauthor ta ON a.au_id=ta.au_id
JOIN titles t ON ta.title_id=t.title_id
WHERE au_lname LIKE 'R%'
AND state IN ('CA', 'TX', 'NY', 'OR', 'UT')
AND (title LIKE '_h_ %' OR title LIKE '% _h_ %'
OR title LIKE '% _h_') -
SELECT title, type
FROM authors a, titles t, titleauthor ta, publishers p
WHERE ta.title_id=t.title_id AND a.au_id=ta.au_id
AND t.pub_id=p.pub_id AND p.city=a.city -
SELECT au_lname, au_fname, title
FROM authors a, titles t, titleauthor ta, publishers p
WHERE ta.title_id=t.title_id AND a.au_id=ta.au_id
AND t.pub_id=p.pub_id
AND ((p.country= 'USA' AND t.type='popular_comp')
OR (p.country='France' AND t.type='psychology')) -
SELECT au_lname, au_fname, city
FROM authors a, titles t, titleauthor ta
WHERE ta.title_id=t.title_id AND a.au_id=ta.au_id
AND (city LIKE '[CPR]%' OR city LIKE '%San%')
AND (title LIKE '% the %' OR title LIKE 'The %'
OR title LIKE '% a %' OR title LIKE 'A %') -
SELECT DISTINCT au_lname, au_fname
FROM authors a JOIN titleauthor ta ON a.au_id=ta.au_id
JOIN titles t ON ta.title_id=t.title_id
JOIN publishers p ON p.pub_id=t.pub_id
WHERE p.state= 'CA'
ORDER BY au_lname, au_fname -
SELECT pub_name
FROM publishers p JOIN titles t ON p.pub_id=t.pub_id
WHERE $15>price AND type= 'psychology'
ORDER BY pub_name -
SELECT pub_name, AVG(price)
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id
GROUP BY pub_name -
SELECT pub_name, AVG(price)
FROM titles t JOIN publishers p ON t.pub_id=p.pub_id
GROUP BY pub_name -
SELECT au_lname, au_fname, title
FROM authors a, titles t, titleauthor ta
WHERE ta.title_id=t.title_id AND a.au_id=ta.au_id
AND type= 'popular_comp' -
SELECT au_lname, au_fname, title
FROM authors a JOIN titleauthor ta ON a.au_id=ta.au_id
JOIN titles t ON ta.title_id=t.title_id
WHERE type= 'psychology' -
SELECT au_lname, au_fname, pub_name, COUNT(*)
FROM authors a, titles t, titleauthor ta, publishers p
WHERE ta.title_id=t.title_id AND a.au_id=ta.au_id AND t.pub_id=p.pub_id
GROUP BY au_lname, au_fname, pub_name -
SELECT MIN(price)
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id
GROUP BY country
HAVING country='USA' -
SELECT pub_name, COUNT(*)
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id
AND (type= 'mod_cook' OR type='trad_cook')
GROUP BY pub_name -
SELECT pub_name, COUNT(*)
FROM publishers p, titles t
WHERE p.pub_id=t.pub_id AND price>$15
GROUP BY pub_name
ORDER BY pub_name DESC -
SELECT title, COUNT(DISTINCT a.au_id)
FROM titles t JOIN titleauthor ta ON t.title_id=ta.title_id
JOIN authors a ON ta.au_id=a.au_id
JOIN publishers p ON p.pub_id=t.pub_id
GROUP BY title -
SELECT state, COUNT(DISTINCT p.pub_id)
FROM publishers p JOIN titles t ON p.pub_id=t.pub_id
GROUP BY state -
SELECT title
FROM titles
WHERE pub_id=
(SELECT pub_id
FROM publishers
WHERE pub_name= 'Binnet & Hardley') -
SELECT pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type= 'business') -
SELECT pub_name
FROM publishers p
WHERE EXISTS
(SELECT *
FROM titles t
WHERE p.pub_id=t.pub_id
AND type='popular_comp') -
SELECT pub_name
FROM publishers p
WHERE NOT EXISTS
(SELECT *
FROM titles t
WHERE p.pub_id=t.pub_id
AND type='mod_cook') -
SELECT pub_name
FROM publishers
WHERE pub_id NOT IN
(SELECT pub_id
FROM titles
WHERE type='psychology') -
SELECT type, price
FROM titles
WHERE price < (SELECT AVG(price) FROM titles) -
SELECT type, AVG(price)
FROM titles
GROUP BY type
HAVING AVG(price) < (SELECT AVG(price) FROM titles) -
SELECT DISTINCT a.city, a.state
FROM authors a
WHERE NOT EXISTS
(SELECT *
FROM publishers p
WHERE a.city=p.city AND a.state=p.state) -
SELECT DISTINCT p.city, p.state
FROM publishers p
WHERE NOT EXISTS
(SELECT *
FROM authors a
WHERE p.city=a.city AND p.state=a.state) -
SELECT MIN(price)
FROM titles t
WHERE t.pub_id IN
(SELECT pub_id
FROM publishers
WHERE country='USA') -
SELECT title, type, price
FROM titles
WHERE price>ALL
(SELECT price
FROM titles
WHERE type= 'psychology') -
SELECT COUNT(DISTINCT city)
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type= 'psychology') -
SELECT pub_name
FROM publishers p
WHERE 15>SOME
(SELECT price
FROM titles t
WHERE p.pub_id=t.pub_id AND type= 'trad_cook') -
SELECT pub_name, state
FROM publishers
WHERE pub_id NOT IN
(SELECT pub_id
FROM titles) -
SELECT title
FROM titles
WHERE pub_id NOT IN
(SELECT pub_id
FROM publishers) -
SELECT t.title
FROM titles t
WHERE t.price>=
(SELECT AVG(tt.price)
FROM titles tt
GROUP BY tt.pub_id
HAVING t.pub_id=tt.pub_id) -
SELECT au_lname, au_fname, price
FROM authors a, titles t, titleauthor ta, publishers p
WHERE ta.title_id=t.title_id AND a.au_id=ta.au_id
AND t.pub_id=p.pub_id AND country='USA'
AND price=
(SELECT MIN(price)
FROM titles tt, publishers pp
WHERE tt.pub_id=pp.pub_id
GROUP BY country
HAVING country='USA') -
SELECT DISTINCT au_lname, au_fname
FROM authors a, titles t, titleauthor ta
WHERE a.au_id=ta.au_id AND ta.title_id IN
(SELECT title_id
FROM titles
WHERE ytd_sales=
(SELECT MAX(ytd_sales)
FROM titles)) -
SELECT DISTINCT a.city, a.state
FROM authors a
WHERE NOT EXISTS
(SELECT *
FROM publishers p
WHERE a.city=p.city AND a.state=p.state)
UNION SELECT DISTINCT p.city, p.state
FROM publishers p
WHERE NOT EXISTS
(SELECT *
FROM authors a
WHERE p.city=a.city AND p.state=a.state) -
SELECT title, price
FROM titles t JOIN publishers p ON t.pub_id=p.pub_id
WHERE p.country= 'USA' AND t.price=
(SELECT MAX(price)
FROM titles tt JOIN publishers pp ON tt.pub_id=pp.pub_id
WHERE country= 'USA') -
SELECT pub_name, COUNT(*)
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id
GROUP BY pub_name
HAVING COUNT(*)>=ALL
(SELECT COUNT(*)
FROM titles tt, publishers pp
WHERE tt.pub_id=pp.pub_id
GROUP BY pub_name) -
SELECT pub_name, city, state, country
FROM publishers p
WHERE EXISTS
(SELECT *
FROM titles t
WHERE t.pub_id=p.pub_id)
AND 20>ALL
(SELECT price
FROM titles t
WHERE t.pub_id=p.pub_id
AND price IS NOT NULL) -
SELECT state, SUM(price)
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id
GROUP BY state
HAVING state NOT IN ('TN', 'MA', 'TX')
AND SUM(price)>
(SELECT SUM(price)
FROM titles tt, publishers pp
WHERE tt.pub_id=pp.pub_id
AND pp.city= 'Boston') -
SELECT pub_name, MIN(price)
FROM titles t, publishers p
WHERE t.pub_id=p.pub_id
GROUP BY pub_name
HAVING MIN(price)>=ALL
(SELECT MIN(price)
FROM titles tt JOIN publishers pp ON tt.pub_id=pp.pub_id
GROUP BY pub_name) -
SELECT *
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type= 'psychology' AND pub_id IN
(SELECT pub_id
FROM publishers
WHERE country= 'USA' AND state<> 'CA')) -
SELECT au_lname, au_fname
FROM authors a
WHERE a.au_id IN
(SELECT au_id
FROM titleauthor ta
WHERE ta.title_id IN
(SELECT title_id
FROM titles t
WHERE 'CA'=SOME
(SELECT state
FROM publishers p
WHERE p.pub_id=t.pub_id)))
ORDER BY au_lname, au_fname -
SELECT state, COUNT(*)
FROM publishers p
WHERE EXISTS
(SELECT *
FROM titles t
WHERE p.pub_id=t.pub_id)
AND $22>ALL
(SELECT price
FROM titles t
WHERE p.pub_id=t.pub_id
AND price IS NOT NULL)
GROUP BY state
ORDER BY state ASC -
SELECT state
FROM publishers p1
GROUP BY state
HAVING COUNT(DISTINCT pub_name)=
(SELECT COUNT(*)
FROM publishers p2
WHERE EXISTS
(SELECT *
FROM titles t
WHERE p2.pub_id=t.pub_id)
AND $22.5>ALL
(SELECT price
FROM titles t
WHERE p2.pub_id=t.pub_id AND price IS NOT NULL)
GROUP BY state
HAVING p1.state=p2.state) -
SELECT p1.pub_id
FROM titles t1, publishers p1
WHERE t1.pub_id=p1.pub_id
GROUP BY p1.pub_id
HAVING COUNT(DISTINCT title)=
(SELECT COUNT(*)
FROM titles t2
WHERE t2.pub_id=p1.pub_id
AND EXISTS
(SELECT *
FROM titleauthor ta3, authors a3
WHERE ta3.au_id=a3.au_id
AND ta3.title_id=t2.title_id
AND a3.state IN
(SELECT state
FROM publishers p4
WHERE 'business'=SOME
(SELECT type
FROM titles t5
WHERE p4.pub_id=t5.pub_id)))) -
SELECT city, state
FROM authors
UNION SELECT city, state
FROM publishers
ORDER BY state, city -
SELECT city
FROM authors
UNION SELECT city
FROM publishers -
SELECT state
FROM authors
UNION SELECT state
FROM publishers -
SELECT city, state
FROM authors
WHERE state IS NOT NULL
UNION SELECT city, state
FROM publishers
WHERE state IS NOT NULL
ORDER BY city DESC, state ASC -
SELECT state, MIN(price), MAX(price), AVG(price)
FROM authors a, titles t, titleauthor ta
WHERE ta.title_id=t.title_id AND a.au_id=ta.au_id
GROUP BY state
HAVING state<> 'CA'