19
SELECT Постановка JOIN Задача Запросы из нескольких таблиц Информатика 10-11 классы 4 декабря 2012 г. Информатика 10-11 классы Запросы из нескольких таблиц

Оператор JOIN

Embed Size (px)

Citation preview

Page 1: Оператор JOIN

SELECT Постановка JOIN Задача

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

Информатика10-11 классы

4 декабря 2012 г.

Информатика 10-11 классы Запросы из нескольких таблиц

Page 2: Оператор JOIN

SELECT Постановка JOIN Задача

Повторим: GROUP BY и HAVING

id student_id gender mark created_at

Таблица: exam_results

Список учеников, у которых средний балл выше 3? Приэтом отсортировать по убыванию баллов?

Listing 1: GROUP BY HAVING

SELECT ∗ , AVG(mark ) AS avg_mark FROM exam_resu l t sGROUP BY s tudent_idHAVING avg_markORDER BY avg_mark DESC ;

Информатика 10-11 классы Запросы из нескольких таблиц

Page 3: Оператор JOIN

SELECT Постановка JOIN Задача

id student_id gender mark created_at

Таблица: exam_results

Найти сумму всех положительных оценокучеников

Информатика 10-11 классы Запросы из нескольких таблиц

Page 4: Оператор JOIN

SELECT Постановка JOIN Задача

id student_id gender mark created_at

Таблица: exam_results

Listing 2: SUM

SELECT SUM(mark ) AS sum FROM exam_resu l t sWHERE mark > 2 ;

Информатика 10-11 классы Запросы из нескольких таблиц

Page 5: Оператор JOIN

SELECT Постановка JOIN Задача

Постановка

Информатика 10-11 классы Запросы из нескольких таблиц

Page 6: Оператор JOIN

SELECT Постановка JOIN Задача

Постановка

Информатика 10-11 классы Запросы из нескольких таблиц

Page 7: Оператор JOIN

SELECT Постановка JOIN Задача

Постановка

Информатика 10-11 классы Запросы из нескольких таблиц

Page 8: Оператор JOIN

SELECT Постановка JOIN Задача

Как получить данные о десяти пользователях,набравших большинство очков?

Информатика 10-11 классы Запросы из нескольких таблиц

Page 9: Оператор JOIN

SELECT Постановка JOIN Задача

Оператор JOIN

Оператор JOIN позволяет объединить две таблицы ввыдаче.Запрос звучит следующим образом: ИЗВЛЕЧЬ все записииз таблицы пользователей и добавить к ним записи изтаблицы баллов, при этом для каждого пользователяприкреплять только его баллы.Запрос JOIN всегда возвращает множество пар“пользователи–баллы”.

Информатика 10-11 классы Запросы из нескольких таблиц

Page 10: Оператор JOIN

SELECT Постановка JOIN Задача

JOIN

Информатика 10-11 классы Запросы из нескольких таблиц

Page 11: Оператор JOIN

SELECT Постановка JOIN Задача

Виды JOIN

Информатика 10-11 классы Запросы из нескольких таблиц

Page 12: Оператор JOIN

SELECT Постановка JOIN Задача

Пример LEFT JOIN

id first_name last_name gender created_at

Таблица: users

id user_id score created_at

Таблица: scores

Пример запроса с JOIN’ом

Listing 3: LEFT JOIN

SELECT ∗ FROM u s e r s uLEFT JOIN s c o r e s sON u . i d = s . use r_ id ;

Информатика 10-11 классы Запросы из нескольких таблиц

Page 13: Оператор JOIN

SELECT Постановка JOIN Задача

Что выведет LEFT JOIN

id first_name last_name gender created_at1 Vasya Ivanov 1 2012-01-012 Masha Petrova 2 2012-03-013 Kos Palpatine 1 2012-04-08

Таблица: users

id user_id score created_at1 1 100 2012-01-012 1 50 2012-01-053 2 195 2012-03-034 1 5 2012-03-125 4 205 2012-04-12

Таблица: scores

Информатика 10-11 классы Запросы из нескольких таблиц

Page 14: Оператор JOIN

SELECT Постановка JOIN Задача

В результате будет 4 записи.Три — для Васи (связи Вася — первый балл, Вася —второй балл, Вася — третий балл) и одна — для Маши(Маша — её первый балл).

Информатика 10-11 классы Запросы из нескольких таблиц

Page 15: Оператор JOIN

SELECT Постановка JOIN Задача

Задача на сумму

id first_name last_name gender created_at

id user_id score created_at

Посчитаем, сколько баллов набрал каждый пользователь,и выведем на экран таблицу в формате id, имя, фамилия,сумма очков.

Listing 4: LEFT JOIN

SELECT u . id , u . f i r s t_name , u . last_name , SUM( s . s c o r e )FROM u s e r s uLEFT JOIN s c o r e s sON u . i d = s . use r_ id ;

Информатика 10-11 классы Запросы из нескольких таблиц

Page 16: Оператор JOIN

SELECT Постановка JOIN Задача

Почему предыдущий запросработает не так, как хочется?

Информатика 10-11 классы Запросы из нескольких таблиц

Page 17: Оператор JOIN

SELECT Постановка JOIN Задача

Правильный вариант LEFT JOIN

Мы получили одну запись, вместо простого спискапользователей.Хотелось бы сгруппировать результаты (привет, GROUPBY).

Listing 5: LEFT JOIN GROUP BY

SELECT u . id , u . f i r s t_name , u . last_name , SUM( s . s c o r e )FROM u s e r s uLEFT JOIN s c o r e s sON u . i d = s . use r_ idGROUP BY u . i d ;

Информатика 10-11 классы Запросы из нескольких таблиц

Page 18: Оператор JOIN

SELECT Постановка JOIN Задача

Вопрос: что сделает LEFT JOIN, если упользователя нет баллов?

Информатика 10-11 классы Запросы из нескольких таблиц

Page 19: Оператор JOIN

SELECT Постановка JOIN Задача

Таблицы для задачи

id side_id first_name last_name1 1 Mace Windu2 2 Kos Palpatine3 1 Yoda4 2 Dooku5 1 Obi-Wan Kenobi

Таблица: persons

id side1 Jedi2 Sith

Таблица: sides

Информатика 10-11 классы Запросы из нескольких таблиц