Найти тему
Excel Analytics | обучение Excel

Как понять SQL

Почему я решила написать эту статью на канале про Excel? Во-первых, по своему примеру: я работаю в Excel 80% рабочего времени, т.е. бОльшую часть, но без SQL я не обхожусь. Мой канал называется Excel Analytics, т.е. - эксель для аналитиков. А аналитика без знания SQL я себе не представляю...

А во-вторых - потому что сама когда-то боялась SQL. "Этожпрограммирование, аааа"

Мне когда-то повезло, и в нужное время подвернулась простая и понятная статья на хабре. И теперь я хочу, чтобы моя статья для кого-то стала таким же помощником.

Язык SQL-запросов (расшифровывается как Struc­tured Query Lan­guage) предназначен для работы с реляционными базами данных, основанных, как правило Microsoft SQL Serv­er или Oracle. При помощи SQL можно создавать или удалять таблицы или строки в них, вносить изменения.  Но чаще всего данный язык запросов используется для выгрузки определенной информации. В этой статье мы узнаем, как создать простой SQL запрос на выгрузку данных из базы.

Кратко о методах в SQL

SQL насчитывает несколько основных методов для работы с базой данных: CREATE, INSERT, DELETE, DROP, SELECT.

Метод CREATE — создает новый объект в базе данных. Это может быть новая таблица, представление, индекс и т.д.

Метод INSERT — добавляет новые строки в существующую таблицу.

Метод DELETE— удаляет строки из существующей таблицы.

Метод UPDATE — модифицирует запись в таблице.

Метод DROP — удаляет объект.

Метод SELECT — выводит информацию из базы данных, при этом не изменяя сами данные.

На самом деле, если вы хотя бы на самом примитивном уровне знаете английский язык, то без труда освоите SQL-запросы. Потому что, как вы уже могли заметить, перевод названия методов отражает их значения (например, CREATE с английского переводится как “создать”). И все команды SQL также будут интуитивно понятны по их переводу.

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

Как выгрузить информацию из базы данных при помощи SELECT

Начнем с того, что определим структуру запроса:

SELECT

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

FROM

указываем таблицу, из которой выводим информацию. Обязательный элемент

WHERE

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

GROUP BY

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

HAVING

условия фильтрации на уровне сгруппированных данных. Необязательный элемент.

ORDER BY

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

Опять хочу обратить внимание, как просто запомнить операторы SQL.

Дословно:

Выделить (SELECT)— что именно, какие столбцы?

Откуда (FROM) — из какой таблицы?

Где (WHERE) — где такой-то столбец имеет определенное значение.

И сгруппируем по (GROUP BY) — по каким столбцам?

Имеющие (HAVING)— имеющим определенные значения в нужных столбцах.

И упорядочим по (ORDER BY) — по определенным столбцам.

Видите, как просто!

Операторы SQL-запроса делятся на обязательные и необязательные. Обязательные — означает, что без этих операторов запрос не сработает и выдаст ошибку. Необязательные элементы потому так и называются, что без них запрос сработает и данные выгрузит. Однако, не всегда необязательные элементы такие уж необязательные — с этим мы разберемся по ходу статьи.

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

Чтобы стало еще понятнее, рассмотрим примеры.

SQL запросы на примерах

Предположим, у нас есть таблица Customers, в которой содержатся следующие столбцы:

CustomerID

CustomerName

ContactName

Address

City

PostalCode

Country

SumProd

1. Для первого примера воспользуемся только обязательными операторами запроса — SELECT и FROM.

Этот запрос выведет все столбцы (потому что в select указана *) и все строки из таблицы Customers.

2. Следующий пример выведет только те столбцы, которые мы выбрали:

-2

Этот запрос выведет только столбцы CustomerName и City из таблицы Customers, и все строки по ним (всех покупателей по всем городам).

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

3. Для следующего запроса добавляем необязательный элемент WHERE. Предыдущий пример вывел всех покупателей по всему миру,  а это несколько миллионов строк… Что делать с таким огромным массивом и зачем он нужен, если нам нужны только покупатели из Парижа?

Модифицируем наш запрос:

-3

Этот запрос выведет нам столбцы CustomerName и City, но только для тех строк, где City указан Paris.

Причем, столбец, по которому фильтруем (в данному случае, City), может и не содержаться в SELECT.

-4

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

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

-5

Этот запрос выведет нам сумму продаж по всем городам Франции.

-6

Теперь разберемся с новыми понятиями:

  • DISTINCT — оператор, который выводит только уникальные значения из списка. В данной таблицу город Paris встречается много раз (т.к. покупателей оттуда много), но в таблицу он вышел только один раз — здесь помог оператор DISTINCT.
  • SUM(SumProd) — это агрегирующая функция. Здесь она суммирует продажи по указанному столбцу (City).

(про агрегирующие функции будет отдельная статья)

  • оператор GROUP BY — показывает, по какому столбцу будут сгруппированы данные.

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

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

И отсюда еще одно основное правило SQL-запросов: набор столбцов в SELECT и GROUP BY должен быть одинаковым. Агрегирующие функции в GROUP BY никогда не указываются.

5. Добавим оператор HAVING в наш запрос:

-7

Оператор HAVING работает только со сгруппированными данными и указывается после GROUP BY. Чаще всего HAVING используют с числовыми значениями, как в данном случае. Мы выводим список городов Франции с сумму продаж по ним — но только тех городов, где суммы продаж превышает 100000.

Почему нельзя было указать это условие в операторе WHERE?

Дело в том, что WHERE работает с несгруппированными, “сырыми” данными из таблицы. Перебирает каждую строку. И если указать:

WHERE SumProd>100000,

то запрос будет искать это условие в каждой строке. А нам нужно отфильтровать уже сгруппированные по городам данные.

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

-8

В данном случае, таблица будет отсортирована по столбцу City в алфавитном порядке от A до Z.

Если нужно отсортировать в обратном порядке, то используем элемент DESC:

-9

Теперь таблица отсортирована по столбцу City в порядке от Z до A.

Также можно использовать несколько столбцов для сортировки.

И в конце разберем основные правила синтаксиса языка SQL.

Основные правила синтаксиса языка SQL

  • SQL не чувствителен к пробелам и переносам строк. Можно ставить сколько угодно пробелом и нажимать Enter для переноса строки, запрос эту информацию не учитывает
  • SQL не чувствителен также к регистру букв. Можно написать SELECT или select, или Select. И даже SeLeCt. Это правило касается не только операторов, но и всего запроса.
  • В запрос можно вставить комментарий. Иногда запросы бывают таким сложными и длинными, что даже сам автор не сразу понимает, где что написано, поэтому комментирование запросов SQL — очень нужный инструмент.

Чтобы вставить комментарий, в начале строки указываются два дефиса подряд, например:

— текст комментария

  • Текстовые значения в фильтрах всегда берутся в одинарные кавычки. Например: Where City = ‘Paris’
  • Элементы в блоках SELECT, FROM, GROUP BY и ORDER BY всегда разделяются запятой, а в блоках WHERE и HAVING — операторами AND или OR, в зависимости от от условий запроса.

Мы рассмотрели структуру и простые примеры SQL-запросов к базе данных.

Статья взята с моего сайта https://excel-analytics.ru