Вывести характеристику упаковки unit для товара steeleye stout sql

SQL запросы быстро. Часть 1

Введение

Язык SQL очень прочно влился в жизнь бизнес-аналитиков и требования к кандидатам благодаря простоте, удобству и распространенности. Из собственного опыта могу сказать, что наиболее часто SQL используется для формирования выгрузок, витрин (с последующим построением отчетов на основе этих витрин) и администрирования баз данных. И поскольку повседневная работа аналитика неизбежно связана с выгрузками данных и витринами, навык написания SQL запросов может стать фактором, из-за которого кандидат или получит преимущество, или будет отсеян. Печальная новость в том, что не каждый может рассчитывать получить его на студенческой скамье. Хорошая новость в том, что в изучении SQL нет ничего сложного, это быстро, а синтаксис запросов прост и понятен. Особенно это касается тех, кому уже доводилось сталкиваться с более сложными языками.

Читайте также:  Как вывести строительный лак с одежды

Обучение SQL запросам я разделил на три части. Эта часть посвящена базовому синтаксису, который используется в 80-90% случаев. Следующие две части будут посвящены подзапросам, Join’ам и специальным операторам. Цель гайдов: быстро и на практике отработать синтаксис SQL, чтобы добавить его к арсеналу навыков.

Практика

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

Кликнуть здесь

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

Структура sql-запросов

Общая структура запроса выглядит следующим образом:

Разберем структуру. Для удобства текущий изучаемый элемент в запроса выделяется CAPS’ом.

SELECT, FROM

SELECT, FROM — обязательные элементы запроса, которые определяют выбранные столбцы, их порядок и источник данных.

Выбрать все (обозначается как *) из таблицы Customers:

Выбрать столбцы CustomerID, CustomerName из таблицы Customers:

WHERE

WHERE — необязательный элемент запроса, который используется, когда нужно отфильтровать данные по нужному условию. Очень часто внутри элемента where используются IN / NOT IN для фильтрации столбца по нескольким значениям, AND / OR для фильтрации таблицы по нескольким столбцам.

Фильтрация по одному условию и одному значению:

Фильтрация по одному условию и нескольким значениям с применением IN (включение) или NOT IN (исключение):

Фильтрация по нескольким условиям с применением AND (выполняются все условия) или OR (выполняется хотя бы одно условие) и нескольким значениям:

GROUP BY

GROUP BY — необязательный элемент запроса, с помощью которого можно задать агрегацию по нужному столбцу (например, если нужно узнать какое количество клиентов живет в каждом из городов).

При использовании GROUP BY обязательно:

  1. перечень столбцов, по которым делается разрез, был одинаковым внутри SELECT и внутри GROUP BY,
  2. агрегатные функции (SUM, AVG, COUNT, MAX, MIN) должны быть также указаны внутри SELECT с указанием столбца, к которому такая функция применяется.

Группировка количества клиентов по городу:

Группировка количества клиентов по стране и городу:

Группировка продаж по ID товара с разными агрегатными функциями: количество заказов с данным товаром и количество проданных штук товара:

Группировка продаж с фильтрацией исходной таблицы. В данном случае на выходе будет таблица с количеством клиентов по городам Германии:

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

HAVING

HAVING — необязательный элемент запроса, который отвечает за фильтрацию на уровне сгруппированных данных (по сути, WHERE, но только на уровень выше).

Фильтрация агрегированной таблицы с количеством клиентов по городам, в данном случае оставляем в выгрузке только те города, в которых не менее 5 клиентов:

В случае с переименованным столбцом внутри HAVING можно указать как и саму агрегирующую конструкцию count(CustomerID), так и новое название столбца number_of_clients:

Пример запроса, содержащего WHERE и HAVING. В данном запросе сначала фильтруется исходная таблица по пользователям, рассчитывается количество клиентов по городам и остаются только те города, где количество клиентов не менее 5:

ORDER BY

ORDER BY — необязательный элемент запроса, который отвечает за сортировку таблицы.

Простой пример сортировки по одному столбцу. В данном запросе осуществляется сортировка по городу, который указал клиент:

Осуществлять сортировку можно и по нескольким столбцам, в этом случае сортировка происходит по порядку указанных столбцов:

По умолчанию сортировка происходит по возрастанию для чисел и в алфавитном порядке для текстовых значений. Если нужна обратная сортировка, то в конструкции ORDER BY после названия столбца надо добавить DESC:

Обратная сортировка по одному столбцу и сортировка по умолчанию по второму:

JOIN — необязательный элемент, используется для объединения таблиц по ключу, который присутствует в обеих таблицах. Перед ключом ставится оператор ON.

Запрос, в котором соединяем таблицы Order и Customer по ключу CustomerID, при этом перед названиям столбца ключа добавляется название таблицы через точку:

Нередко может возникать ситуация, когда надо промэппить одну таблицу значениями из другой. В зависимости от задачи, могут использоваться разные типы присоединений. INNER JOIN — пересечение, RIGHT/LEFT JOIN для мэппинга одной таблицы знаениями из другой,

Внутри всего запроса JOIN встраивается после элемента from до элемента where, пример запроса:

Другие типы JOIN’ов можно увидеть на замечательной картинке ниже:


В следующей части подробнее поговорим о типах JOIN’ов и вложенных запросах.

При возникновении вопросов/пожеланий, всегда прошу обращаться!

Источник

Задачи на продвинутые SQL запросы

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор

Перед решением задач изучите теорию к данному уроку.

Примеры решения задач

Задача

Задача. Выберите из таблицы workers записи с id равным 3, 5, 6, 10.

Задача

Задача. Выберите из таблицы workers записи с id равным 3, 5, 6, 10 и логином, равным ‘eee’, ‘zzz’ или ‘ggg’.

Задача

Задача. Выберите из таблицы workers записи c зарплатой от 500 до 1500.

Задача

Задача. Выберите из таблицы workers все записи так, чтобы вместо id было workersId, вместо login – workersLogin, вместо salary — workersSalary.

Задача

Задача. Найдите в таблице workers минимальный возраст.

Задача

Задача. Найдите в таблице workers суммарный возраст.

Задача

Задача. Вставьте в таблицу workers запись с полем date с текущим моментом времени в формате ‘год-месяц-день часы:минуты:секунды’.

Задача

Задача. Вставьте в таблицу workers запись с полем date с текущей датой в формате ‘год-месяц-день’.

Задача

Задача. При выборке из таблицы workers запишите день, месяц и год в отдельные поля.

Задача

Задача. Выберите из таблицы workers записи, в которых минуты больше секунд.

Задача

Задача. При выборке из таблицы workers прибавьте к дате 1 год.

Задача

Задача. При выборке из таблицы workers отнимите от даты 1 год.

Задача

Задача. При выборке из таблицы workers прибавьте к дате 3 года, 4 месяца.

Задача

Задача. При выборке из таблицы workers прибавьте к дате 4 дня, 3 часа, 2 минуты, 1 секунду.

Задача

Задача. При выборке из таблицы workers прибавьте к дате 3 дня и отнимите 2 часа.

Задачи для решения

На IN

Выберите из таблицы workers записи с id равным 1, 2, 3, 5, 14.

Выберите из таблицы workers записи с login равным ‘eee’, ‘bbb’, ‘zzz’.

Выберите из таблицы workers записи с id равным 1, 2, 3, 7, 9, и логином, равным ‘user’, ‘admin’, ‘ivan’ и зарплатой больше 300.

На BETWEEN

Выберите из таблицы workers записи c зарплатой от 100 до 1000.

Выберите из таблицы workers записи c id от 3 до 10 и зарплатой от 300 до 500.

На AS

Выберите из таблицы workers все записи так, чтобы вместо id было userId, вместо login – userLogin, вместо salary — userSalary.

На DISTINCT

Выберите из таблицы workers все записи так, чтобы туда попали только записи с разной зарплатой (без дублей).

Получите SQL запросом все возрасты без дублирования.

На MIN и MAX

Найдите в таблице workers минимальную зарплату.

Найдите в таблице workers максимальную зарплату.

На SUM

Найдите в таблице workers суммарную зарплату.

Найдите в таблице workers суммарную зарплату для людей в возрасте от 21 до 25.

Найдите в таблице workers суммарную зарплату для id, равного 1, 2, 3 и 5.

На AVG

Найдите в таблице workers среднюю зарплату.

Найдите в таблице workers средний возраст.

На NOW, CURRENT_DATE, CURRENT_TIME

Выберите из таблицы workers все записи, у которых дата больше текущей.

Вставьте в таблицу workers запись с полем date с текущим моментом времени в формате ‘год-месяц-день часы:минуты:секунды’.

Вставьте в таблицу workers запись с полем date с текущей датой в формате ‘год-месяц-день’.

Вставьте в таблицу workers запись с полем time с текущим моментом времени в формате ‘часы:минуты:секунды’.

На работу с частью даты

Выберите из таблицы workers все записи за 2016 год.

Выберите из таблицы workers все записи за март любого года.

Выберите из таблицы workers все записи за третий день месяца.

Выберите из таблицы workers все записи за пятый день апреля любого года.

Выберите из таблицы workers все записи за следующие дни любого месяца: 1, 7, 11, 12, 15, 19, 21, 29.

Выберите из таблицы workers все записи за вторник.

Выберите из таблицы workers все записи за первую декаду любого месяца 2016 года.

Выберите из таблицы workers все записи, в которых день меньше месяца.

При выборке из таблицы workers запишите день, месяц и год в отдельные поля.

При выборке из таблицы workers создайте новое поле today, в котором будет номер текущего дня недели.

На EXTRACT, DATE

При выборке из таблицы workers запишите год, месяц и день в отдельные поля с помощью EXTRACT.

При выборке из таблицы workers запишите день, месяц и год в отдельное поле с помощью DATE в формате ‘год-месяц-день’.

На DATE_FORMAT

При выборке из таблицы workers выведите дату в формате ‘31.12.2025’.

При выборке из таблицы workers выведите дату в формате ‘2025% 31.12’.

На INTERVAL, DATE_ADD, DATE_SUB

При выборке из таблицы workers прибавьте к дате 1 день.

При выборке из таблицы workers отнимите от даты 1 день.

При выборке из таблицы workers прибавьте к дате 1 день, 2 часа.

При выборке из таблицы workers прибавьте к дате 1 год, 2 месяца.

При выборке из таблицы workers прибавьте к дате 1 день, 2 часа, 3 минуты.

При выборке из таблицы workers прибавьте к дате 1 день, 2 часа, 3 минуты, 5 секунд.

При выборке из таблицы workers прибавьте к дате 2 часа, 3 минуты, 5 секунд.

При выборке из таблицы workers прибавьте к дате 1 день и отнимите 2 часа.

При выборке из таблицы workers прибавьте к дате 1 день и отнимите 2 часа, 3 минуты.

На математические операции

При выборке из таблицы workers создайте новое поле res, в котором будет число 3.

При выборке из таблицы workers создайте новое поле res, в котором будет строка ‘eee’.

При выборке из таблицы workers создайте новое поле 3, в котором будет число 3.

При выборке из таблицы workers создайте новое поле res, в котором будет лежать сумма зарплаты и возраста.

При выборке из таблицы workers создайте новое поле res, в котором будет лежать разность зарплаты и возраста.

При выборке из таблицы workers создайте новое поле res, в котором будет лежать произведение зарплаты и возраста.

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

Выберите из таблицы workers все записи, в которых сумма дня и месяца меньше 10-ти.

На LEFT, RIGHT, SUBSTRING

При выборке из таблицы workers получите первые 5 символов поля description.

При выборке из таблицы workers получите последние 5 символов поля description.

При выборке из таблицы workers получите из поля description символы со второго по десятый.

На UNION

Даны две таблицы: таблица category и таблица sub_category с полями id и name. Достаньте одним запросом названия категорий и подкатегорий.

На CONCAT, CONCAT_WS

При выборке из таблицы workers создайте новое поле res, в котором будут лежать одновременно зарплата и возраст (слитно).

При выборке из таблицы workers создайте новое поле res, в котором будут лежать одновременно зарплата и возраст (слитно), а после возраста будут идти три знака ‘!’.

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

При выборке из таблицы workers получите первые 5 символов логина и добавьте троеточие.

На GROUP BY

Найдите самые маленькие зарплаты по группам возрастов (для каждого возраста свою минимальную зарплату).

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

На GROUP_CONCAT

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

На подзапросы

Выберите из таблицы workers все записи, зарплата в которых больше средней зарплаты.

Выберите из таблицы workers все записи, возраст в которых меньше среднего возраста, деленного на 2 и умноженного на 3.

Выберите из таблицы workers записи с минимальной зарплатой.

Выберите из таблицы workers записи с максимальной зарплатой.

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

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

При выборке из таблицы workers создайте новое поле avg, в котором будет лежать деленная на 2 разница между максимальным значением зарплаты и минимальным значением зарплаты для возраста 25 лет.

На JOIN

Даны две таблицы: таблица category с полями id и name и таблица page с полями id, name и category_id. Достаньте одним запросом все страницы вместе с их категориями.

Даны 3 таблицы: таблица category с полями id и name, таблица sub_category с полями id и name и таблица page с полями id, name и sub_category_id. Достаньте одним запросом все страницы вместе с их подкатегориями и категориями.

Источник

Оцените статью