12.51M

SQL (3)

1.

SQL
(это не сложно)

2.

Несколько базовых советов
Учимся красиво оформлять запросы с самого начала. Потом сами себе
спасибо скажете :)

3.

Несколько базовых советов
Особенно когда начнутся такие запросы

4.

Несколько базовых советов
Правильно сокращаем названия таблиц, например:
responses - r
app_install_sources - ais
response_clinic - rc
Это поможет вам легко находить в запросе нужные данные и не
путаться в коротких названиях таблиц, если нужно получить результат
сразу из нескольких
Если вам не нужны конкретные столбцы из таблицы, а вы хотите
посмотреть все, то ставим *

5.

Несколько базовых советов
Если вам нужно дать название новому столбцу, в который вы хотите
выводить данные, то его название не должно содержать пробелов,
вместо пробела используем “_”, также перед названием ставим
оператор AS
Тут мы говорим: “Суммируй все баллы и выведи эту сумму в
результирующей таблице, назови этот столбец как ‘total_points’

6.

Несколько базовых советов
Не стесняйтесь мучить Chat GPT (на самом деле он вам и готовый запрос
напишет, если захотите, но основы все равно лучше знать самому).

7.

Несколько базовых советов
Перед тем, как писать запрос - проверьте в каких таблицах и в каком
формате лежат ваши данные. Это необходимо для проставления
корректных операторов.
Проверьте, есть ли у вас доступ на чтение всех нужных для запроса
таблиц, в противном случае запрос не выполнится.
А нужен ли вам на самом деле запрос? Или достаточно строки в
консоли? Запрос имеет смысл писать, если нужно вывести данные из
нескольких таблиц или с более чем одним условием.

8.

Несколько базовых советов
Если хочется погрузиться в теорию и подробнее про все почитать:
https://shultais.education/blog/sql-for-beginners
https://www.schoolsw3.com/sql/index.php

9.

Пишем первые запросы
Перечисляем список столбцов с данными, которые нам нужно вывести
SELECT
Из какой таблицы нужно вывести данные
FROM
Какому условию должны соответствовать эти данные
WHERE
По какому условию нужно сгруппировать данные
GROUP BY
Если нужно вывести данные, соответствующие определенному шаблону
LIKE
Если нужно вывести данные, соответствующие определенному промежутку (min,max или дата)
BETWEEN
LEFT JOIN,
Аналог ВПР в Excel - если нужно вывести данные после сопоставления двух и более таблиц

10.

Пишем первые запросы
Вывести в результате пустые значения
IS NULL
Выводить только данные, где нет пустых значений
IS NOT NULL
Сложить все числа в определенном диапазоне
SUM

11.

Давайте попробуем поэтапно написать запрос под такую задачу (а
заодно посмотрим, как что работает):
Нужно вывести список опубликованных отзывов, полученных после
записи с 1 по 5 июля, с оценкой “4” и “5”, и чтобы они были только на
клинику без врача, и название клиники чтобы было. А еще чтобы среди
этих клиник были только моно-клиники.

12.

Сначала мы определимся, с какими таблицами работаем, чтобы
составить запрос. Иногда приходится тыкаться по таблицам и искать откуда брать тот или иной параметр.
Итак, здесь нам потребуются таблицы responses, clinics,
response_clinic и clinic_computed_infos

13.

Таблиц будет много, так что
сразу присваиваем короткие
названия
Таблиц несколько, но основная, из которой мы будем тянуть данные, и к
которой будем присоединять другие таблицы - responses. С нее и
начнем

14.

Указываем короткое название
таблицы, чтобы было понятно,
откуда брать это условие
Cписок опубликованных отзывов, после
записи, с 1 по 5 июля, с оценкой “4” и “5”,
на клинику без врача, название клиники.
Только моно-клиники.
Нам нужно получить данные с 1
по 5 включительно, поэтому
ставим по 6. Если поставить по 5,
в выводе будут данные с 1 по 4

15.

Каждое новое условие просто
перечисляем через AND
Cписок опубликованных отзывов, после
записи, с 1 по 5 июля, с оценкой “4” и “5”,
на клинику без врача, название клиники.
Только моно-клиники.
В зависимости от типа данных
оформляем, данные бывают
типов: числа, текст, значение.
Если нужно полное совпадение,
ставим знак =

16.

Когда AND становится слишком
много, удобнее их переносить на
отдельную строку - так их легче
найти и считать
Cписок опубликованных отзывов, после
записи, с 1 по 5 июля, с оценкой “4” и “5”,
на клинику без врача, название клиники.
Только моно-клиники.

17.

Если в условии более 1 параметра, используем
оператор IN, он включит все строки, содержащие
нужные параметры. Оформляем скобками,
параметры через запятую
Cписок опубликованных отзывов, после
записи, с 1 по 5 июля, с оценкой “4” и “5”,
на клинику без врача, название клиники.
Только моно-клиники.

18.

Если нужно получить данные
более чем из 1 таблицы,
используем JOIN.
Cписок опубликованных отзывов, после
записи, с 1 по 5 июля, с оценкой “4” и “5”,
на клинику без врача, название клиники.
Только моно-клиники.
Чтобы приджоинить таблицу,
нужно найти столбец, который
есть общий в обеих таблицах и
указать его.
Иногда бывает, что общего столбца в
обеих таблицах нет. В таком случае ищем
третью таблицу, в которой есть общий
столбец с той, которую нужно
присоединить и той, к которой нужно
присоединить. Джоиним сначала ее, а
потом через нее уже нужную таблицу.

19.

Важно! WHERE всегда должно быть в самом
конце запроса, в противном случае это будет
нарушение синтаксиса и запрос не выполнится
Cписок опубликованных отзывов, после
записи, с 1 по 5 июля, с оценкой “4” и “5”,
на клинику без врача, название клиники.
Только моно-клиники.
Если нам нужно вывести только строки, где в
определенном столбце не должно быть данных,
используем IS NULL

20.

Cписок опубликованных отзывов, после
записи, с 1 по 5 июля, с оценкой “4” и “5”,
на клинику без врача, название клиники.
Только моно-клиники.

21.

Бонус для самых усидчивых
О, а давайте мы еще к этому запросу добавим инфу по юзерам. Но только
чтобы там были юзеры, которые оставили более двух отзывов за все
время. И чтобы кол-во оставленных отзывов выводилось тоже.
Первоначальный запрос существенно осложнился, но это не проблема!
Важно помнить, что JOIN и WHERE - хорошо, но это не панацея. Сложные
запросы требуют отчаянных мер и тогда в игру вступают подзапросы

22.

Юзеры, которые оставили более двух
отзывов за все время + кол-во отзывов
3
1
2
Посмотри, сколько отзывов (строк) есть в responses по каждому юзеру
1. Считать (группировать) будем по created_by
2. Условие - на 1 юзера более 2 отзывов
3. Выведи счетчик отзывов (строк) по каждому юзеру и назови этот столбец в
таблице count_responses

23.

Наш запрос вывел такой результат. Но как бы нам теперь эту инфу
приделать к предыдущему запросу?

24.

Мы приджоинили результат нашего второго запроса к первому.
Весь запрос целиком обязательно берем в скобки.
Обязательно даем короткое название с помощью AS, так как теперь
результат этого запроса - тоже в своем роде таблица с данными.
Находим, что у нее общего с нашей основной таблицей (тут created_by) и
по нему джоиним.

25.

ВАЖНО!
В SELECT таблицы 2 указать
столбцы, по которым вы сможете
приджоинить таблицу 2 к таблице
1. Даже если лично вам они не
нужны.
Вы можете джоинить столько таблиц к основной, сколько вам нужно, это поможет в
случаях, когда надо провести сложную аналитику, состоящую из многих параметров.
Потратив однажды время на написание такого запроса, вы сэкономите кучу времени
на сопоставлении этого всего вручную - особенно касается регулярных запросов.

26.

Нет большей радости для
старого учителя, чем SQLзапрос, написанный его учеником

27.

Спасибо за внимание!
English     Русский Rules