ИТ Лекция. БД2.pptx
- Количество слайдов: 35
Отбор данных 1. Выбор данных из нескольких таблиц 2. Группировка данных 3. Отбор по сгруппированным данным 4. База данных «Касса» 1
1 Выбор данных из нескольких таблиц Универсальное отношение Отбор данных 2
1 Выбор данных из нескольких таблиц Хранение данных в СУБД Отбор данных 3
1 Выбор данных из нескольких таблиц Таблицы: - firm id_f – идентификатор организации name – наименование организации id_f – простой ключ - worker id_f – идентификатор организации id_w – идентификатор сотрудника name – ФИО sex – пол bdate – дата рождения id_f , id_w – составной ключ Отбор данных 4
1 Выбор данных из нескольких таблиц Выбор данных из двух таблиц: вывести в одну строку Наименование организации, ФИО, Пол, Дату рождения, где идентификатор организации id_f таблицы firm равен идентификатору организации id_f таблицы Worker SELECT FROM firm. name, worker. sex, worker. bdate firm, worker WHERE firm. id_f = worker. id_f Отбор данных 5
1 Выбор данных из нескольких таблиц Удобнее использовать псевдонимы таблиц SELECT a. name, b. sex, b. bdate FROM firm a, worker b WHERE a. id_f=b. id_f a – псевдоним таблицы firm b – псевдоним таблицы worker Отбор данных 6
1 Выбор данных из нескольких таблиц Выведем сотрудников женского пола с указанием наименования организации, ФИО, пола и даты рождения SELECT a. name, b. sex, b. bdate FROM firm a, worker b WHERE a. id_f=b. id_f and b. sex=‘ж’ Отбор данных 7
1 Выбор данных из нескольких таблиц Выведем всех людей, отсортировав по ФИО SELECT a. name, b. sex, b. bdate FROM firm a, worker b WHERE a. id_f=b. id_f ORDER BY b. name Отбор данных 8
1 Выбор данных из нескольких таблиц Выведем всех людей, отсортировав по наименованию организации и ФИО SELECT a. name, b. sex, b. bdate FROM firm a, worker b WHERE a. id_f=b. id_f ORDER BY a. name, b. name Отбор данных 9
Отбор данных 1. Выбор данных из нескольких таблиц 2. Группировка данных 3. Отбор по сгруппированным данным 4. База данных «Касса» 10
2 Группировка данных Группировка – объединение данных по заданному критерию для выделения требуемой информации из данных при помощи агрегатных функций Некоторые агрегатные функции: • count • max • min • avg • sum Отбор данных 11
2 Группировка данных Поле 1 Поле 2 Поле 3 п 1_знач1 п 2_знач3 п 3_знач1 п 1_знач2 п 2_знач1 п 3_знач2 п 1_знач1 п 2_знач1 п 3_знач3 п 1_знач3 п 2_знач3 п 3_знач3 п 1_знач3 п 2_знач2 п 3_знач3 п 1_знач2 п 2_знач1 п 3_знач3 п 1_знач1 п 2_знач1 п 3_знач3 группировка по «поле 1» Поле 1 п 1_знач2 п 1_знач3 Поле 1 п 1_знач2 п 3_знач1 п 1_знач2 п 3_знач2 п 1_знач1 п 3_знач3 п 1_знач2 Отбор данных п 3_знач1 п 1_знач3 группировка по «поле 1» , «поле 3» Поле 3 п 3_знач3 12
2 Группировка данных Сгруппировать людей по фамилиям, выяснить сколько людей проживают с одинаковыми фамилиями SELECT surname, count(*)'Кол-во' FROM people group by surname Отбор данных 13
2 Группировка данных График рождаемости: Год, пол, число родившихся SELECT year(birthday) , sex , count(*) FROM ref_people group by year(birthday), sex order by year(birthday) desc Отбор данных 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1 2 1 2 1 2 10827 10234 18120 16956 17038 16277 16327 15296 15904 15126 16889 15815 16636 15644 15921 15006 14383 13636 14253 13185 14
2 Группировка данных Пять наиболее популярных детских имен за конкретный год select from top 5 [name], count(*) where ref_people year(birthday)=1995 group by name order by count(*) desc Отбор данных 15
2 Группировка данных 1980 ЕЛЕНА АЛЕКСАНДР НАТАЛЬЯ СЕРГЕЙ ОЛЬГА 1985 2912 2676 2563 2534 2314 1995 АЛЕКСАНДР АНАСТАСИЯ ДМИТРИЙ ЕКАТЕРИНА СЕРГЕЙ Отбор данных 1496 1494 1122 1115 943 АЛЕКСАНДР ЕЛЕНА ЕКАТЕРИНА СЕРГЕЙ ОЛЬГА 3288 2792 2631 2506 2283 2005 АНАСТАСИЯ ДАРЬЯ НИКИТА ВИКТОРИЯ АЛЕКСАНДР 1393 966 905 864 852 16
2 Группировка данных Десять наименее популярных детских имен за конкретный год select from top 10 [name], count(*) where ref_people year(birthday)=1995 group by name order by count(*) Отбор данных 17
2 Группировка данных 1980 ЛИА НЭЛЛИ РИФАР ГУЛЬФИНА ИЛЬСИЯР ХУСАН ЭРКИНЖОН ВАСИФ ДАМИРА ГАДЕЛЬ Отбор данных 1985 1 1 1995 ГУЛЬЗАТ 1 ИЛЬФАР ЛИА ХАНИЯ МЕХРАН ФАЗЛИДИН МИЛЕДИ ДОНИЁР ИЛЬСИЯР ЭРГАШБОЙ ЖАДРА ЕСАИ НЭЛЛИ МАРТЫН ДАМИРА ХОШБАХТ АЛЕСАНДРА МИЛИЯ ВОЛОДЯ РАДЖ 1 1 1 1 18
Отбор данных 1. Выбор данных из нескольких таблиц 2. Группировка данных 3. Отбор по сгруппированным данным 4. База данных «Касса» 19
3 Отбор по сгруппированным данным HAVING определяет условие поиска для группы, обычно используется в предложении GROUP BY. Когда GROUP BY не используется, предложение HAVING работает так же, как и предложение WHERE. Отбор данных 20
3 Отбор по сгруппированным данным Вывести только те фамилии, под которыми проживают больше 4000 человек (отсортировать по убыванию кол-ва) SELECT surname, count(*) 'Кол-во' FROM people group by surname HAVING count(*)>4000 ORDER BY count(*) desc Отбор данных 21
3 Отбор по сгруппированным данным Вывести только те фамилии, под которыми проживают больше 4000 человек, а так же вывести дату рождения самого старого SELECT surname, count(*) 'Кол-во', min(birthday)'др' FROM people group by surname HAVING count(*)>4000 Отбор данных 22
Отбор данных 1. Выбор данных из нескольких таблиц 2. Группировка данных 3. Отбор по сгруппированным данным 4. База данных «Касса» 23
4 База данных «Касса» type_commodity – тип товара (id – идентификатор типа товара; name – наименование типа товара) commodity – перечень товаров (id – идентификатор товара; id_type – тип товара; name – наименование товара; price – цена за единицу товара) сash – кассовые чек(day – дата чека; id – номер чека; id_comm – идентификатор товара; count – кол-во товара) Отбор данных 24
4 База данных «Касса» commodity type_commodity Отбор данных 25
4 База данных «Касса» cash Отбор данных 26
4 База данных «Касса» Запросим данные о продаже каждой единицы товара по каждому чеку с указанием всех известных данных (дата продажи, номер чека, тип товара, наименование товара, цена, кол-во) Отбор данных 27
4 База данных «Касса» SELECT a. day, a. id, c. name, b. price, a. count FROM cash a, commodity b, type_commodity c Where a. id_comm = b. id and c. id=b. id_type Отбор данных 28
4 База данных «Касса» Сколько всего позиций было продано за все дни? SELECT count(*) FROM cash Ответ: 25 Отбор данных 29
4 База данных «Касса» Сколько всего позиций было продано в рамках каждого дня? SELECT day, count(*) FROM cash group by day Отбор данных 30
4 База данных «Касса» Рассчитать итоговую сумму по каждому чеку? 1) Рассчитаем расходы по каждой позиции SELECT a. day, a. id, b. name, b. price, a. count, b. price*a. count FROM cash a, commodity b where a. id_comm = b. id Отбор данных 31
4 База данных «Касса» 2) Сгруппируем данные и применим функцию sum SELECT a. day, a. id, sum(b. price*a. count) ‘Итого’ FROM cash a, commodity b where a. id_comm = b. id group by a. day, a. id Отбор данных 32
4 База данных «Касса» Какой самый популярный товар? Отсортировать по популярности по убыванию SELECT b. name, count(*) FROM cash a, commodity b where a. id_comm = b. id group by b. name order by count(*) desc Отбор данных 33
4 База данных «Касса» Вывести только те товары, популярность которых больше 2. Отсортировать по популярности по убыванию SELECT b. name, count(*) FROM cash a, commodity b where a. id_comm = b. id group by b. name having count(*) >=2 order by count(*) desc Отбор данных 34
4 База данных «Касса» Вывести самый популярный тип товара, отсортировать по популярности по убыванию SELECT c. name, count(*) FROM cash a, commodity b, type_commodity c where a. id_comm = b. id and c. id=b. id_type group by c. name order by count(*) desc Отбор данных 35
ИТ Лекция. БД2.pptx