Файл: Занятие 63 (І семестр) Вид занятия Лабораторная работа (30) Тема Построение запросов к базе данных на языке sql (различных типов).doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.12.2023
Просмотров: 209
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Учебно-методическая план-карта занятия
Занятие № 63
(І семестр)
Вид занятия: Лабораторная работа (№ 30)Тема:Построение запросов к базе данных на языке SQL (различных типов).Цель: Закрепить навыки построения запросов различных типов к базе данных на языке SQL. Обеспечить развитие у обучающихся навыков, способствующих развитию памяти, логического мышления и применению имеющихся знаний и умений при создании баз данных в СУБД MySQL. Способствовать формированию информационной культуры, умения и навыков коллективного и самостоятельного овладения знаниями.Оборудование: Раздаточный материал, компьютер, Open Server, MySQL.Литература:-
Джеймс Р., SQL: полное руководство, 3-е изд. / Джеймс Р. Грофф, Вайнберг Пол Н., Оппелъ, Эндрю Дж : Пер. с англ. - М.: ООО "И.Д. Вильямс", 2015. - 960 с. -
Кудрявцев К.Я. Создание баз данных: Учебное пособие/ К.Я. Кудрявцев. – М.:НИЯУ "МИФИ", 2010. – 155 с. -
Мартишин С.А. Проектирование и реализация баз данных в СУБД MySQL с использованием MySQL Workbench: Учебное пособие / С.А. Мартишин и др. – М.: ИД ФОРУМ: НИЦ Инфра-М, 2012. – 160 с.
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 | Да | Страна |
| Имя столбца | Тип данных | Размерность | Возможность значений 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 | Да | Авторский гонорар |
Задание 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 |
-
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'