Если у вас есть опыт программирования и вы чувствуете, что при использовании SQL у вас связаны руки, эта статья развяжет вам руки. Статья очень концептуальна, если предположить, что вы уже знакомы с программированием и основами SQL. Таким образом, цель состоит в том, чтобы помочь вам лучше понять ошибки и упростить отладку. Поэтому я не буду вдаваться в синтаксические детали, кроме нескольких фотоиллюстраций.

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

Исходя из C++, Ruby и Python, я просто хотел написать цикл для каждой проблемы, которую я вижу в SQL. Я видел столбцы как массивы, а таблицы как двумерные массивы. Поэтому, естественно, я хотел запустить цикл, чтобы вернуть желаемые результаты. Такой способ мышления не является неправильным. Это искусство само по себе и большая часть SQL, изменение таблиц, создание таблиц и удаление таблиц. Но еще одна важная часть SQL, о которой новички не знают, — это запросы. Это означает, что цель состоит не в том, чтобы каким-либо образом изменить таблицу, а в том, чтобы извлечь информацию с высокой гибкостью и ловкостью.

Если это звучит так, будто SQL очень похож на jQuery, значит, так оно и есть. Исходя из типичного мира программирования, ваша цель может состоять в том, чтобы получить информацию во что бы то ни стало. Это потому, что средства, как правило, не дорогие. Однако, когда мы имеем дело с большими базами данных, например, пользовательской таблицей Pinterest, операция становится очень ресурсоемкой. И хуже всего то, что может быть более простой подход для получения того же результата.

Теперь вы можете быть убеждены, что правильные навыки запросов имеют решающее значение, но где-то все еще есть внутренний голос, говорящий вам, что установка переменных и запуск циклов важнее. Это верно для дата-инженеров. Как аналитик данных или ученый, вы сосредоточены на поиске тенденций и воспроизведении из них функции. Конечно, я не говорю, что вы должны полностью игнорировать разработку данных. Напротив, хороший специалист по данным должен хорошо разбираться в обработке данных, а если нет, то кое-что знать. Но как специалист по данным, преимущество быстрого извлечения данных перевешивает способность проектировать базу данных, особенно если вы работаете в крупной компании с четким разделением труда. Итак, давайте наденем наши очки SQL и посмотрим, в чем дело.

Заказ имеет значение

Самое главное в подходе к SQL — понять порядок выполнения.

Если бы мне пришлось перепроектировать SQL, я бы разработал порядок кодирования таким же, как и порядок выполнения. SQL пока не изменится, так что нам придется с этим смириться. Запомните таблицу выше, она пригодится позже. Давайте рассмотрим это один за другим.

От

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

Первый шаг — пропустить оператор «SELECT» и прочитать коды SQL, начинающиеся с «FROM». Это должно быть очень интуитивно понятно. Представьте, что вы ищете небольшой город на карте мира с точки зрения сверху вниз. Вы начинаете с категории доски, например, с континента, и постепенно сужаете свой фокус, чтобы найти то, что ищете. И весь этот процесс начинается с того, с какими таблицами мы работаем.

2 типа JOIN

Я знаю, что на диаграмме порядка выполнения не было строки для «JOIN», но если вы посмотрите на столбец «функция» в строке «от», вы увидите «JOIN». Давайте проигнорируем несовершенный график и посмотрим на оператор «JOIN».

Следующее, на что нужно обратить внимание, это выяснить, есть ли какие-либо другие таблицы, с которыми мы работаем. Наличие оператора «JOIN» говорит нам «да», и количество таблиц зависит от того, сколько операторов «JOIN» присутствует. Теоретически вы можете присоединяться к любому количеству столов. Я знаю, что есть много видов «JOIN», но все, что вам нужно запомнить, это 2: внутреннее соединение, а все остальное — внешнее соединение.

Если вы математик, здесь вы можете поэкспериментировать с союзами и множествами. Это та же идея.

Внутреннее соединение

Когда вы видите «ON table_1.column_X = table_2.column_Y», этот оператор сообщает вам, что возвращаются строки из обеих таблиц, где значения в столбце_X равны значениям в столбце_Y, и игнорируются строки, в которых 2 значения не совпадают. равны друг другу.

В математике объединенные данные — это подмножество, полученное в результате пересечения «∩» между двумя таблицами.

Обратите внимание, что идентификатор поставщика «B» появился 2 раза в выходной таблице «Dynaset (комбинированный)». Помните, что вопреки выбору слов во многих руководствах по SQL, с которыми вы можете столкнуться, вторая строка «B» не является повторяющимся значением с точки зрения выходной таблицы. Это совершенно другая транзакция с другой датой и другой суммой денег одним и тем же лицом. Это настолько сложно, насколько может быть «INNER JOIN», давайте перейдем к внешним соединениям.

Внешние соединения

Внешние соединения объединяют столбцы с совпадающими значениями столбцов и несовпадающими значениями в зависимости от типа внешнего соединения: левое соединение, правое соединение, полное внешнее соединение.

В математике это похоже на символ союза «∪».

Левое/Правое/Полное соединение

«LEFT JOIN» объединяет все строки с одинаковыми значениями в выбранных столбцах и все строки, следующие за оператором «FROM». «ПРАВОЕ СОЕДИНЕНИЕ» — полная противоположность, поэтому я не буду вдаваться в подробности.

Обратите внимание, что хотя «CountryID» 4 не существует в правой таблице, он все еще находится в выходной таблице (нижняя таблица). И, конечно, значение «ID» 2 в правой таблице даже не является совпадающим значением, поэтому его не будет в выходной таблице. Вы можете запомнить это как возвращаемые строки с совпадающим значением столбца + все строки из левой/правой таблицы в зависимости от того, какое «СОЕДИНЕНИЕ» мы используем.

Оператор «FULL JOIN» возвращает все совпадающие и несовпадающие значения столбцов.

На данный момент практическое применение «FULL JOIN» довольно ограничено. Он ограничен несколькими, такими как подсчет перекрытий между двумя таблицами.

Красота реляционной базы данных и SQL не была бы реализована без оператора JOIN. Он превращает огромную базу данных во множество небольших модульных таблиц.

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

ГДЕ

Следующее утверждение, на которое стоит обратить внимание, это «ГДЕ». «WHERE» — это оператор фильтра, который следует за «JOIN». Он возвращает строки, в которых условие истинно. И, как и все условия, оно допускает такие операторы, как =, !=, И, ИЛИ и «НРАВИТСЯ». «LIKE» — это, по сути, SQL-версия регулярного выражения. Я объясню другие более сложные понятия, которые следуют за WHERE, такие как CASE и подзапросы, позже.

Имейте в виду порядок выполнения, здесь люди путаются. Вы не фильтруете заявление и присоединяетесь, вы присоединяетесь и затем фильтруете.

ГРУППА И НАЛИЧИЕ

Вы должны искать «GROUP BY» после «WHERE». Думайте об этом как о чем-то, что разбивает гигантскую таблицу на множество меньших таблиц. Оператор, следующий за «GROUP BY», сообщает нам, какой столбец мы классифицируем.

Для нашего примера мы классифицировали столбец «жанр».

Такой способ мышления упрощает понимание агрегатных функций SUM(), COUNT() или MAX(). Они работают с отдельными меньшими таблицами независимо. Это означает, что для нашего примера выше SUM() возвращает 7 для красного, 3 для желтого и 8 для синего. По правде говоря, они до сих пор существуют в одной таблице, просто все упорядочено вместе. Но разбиение таблицы на множество меньших таблиц — это абстрактная идея, которая помогает нам понять агрегатную функцию. Это не то, что произошло с SQL под капотом.

Помните, что порядок имеет значение, если вы хотите отфильтровать таблицу после «GROUP BY», вы должны использовать «HAVING». Оператор «WHERE» после «GROUP BY» приведет к ошибке.

ВЫБЕРИТЕ/ЗАКАЗАТЬ ПО/ОГРАНИЧЕНИЕМ

Уф, наконец-то мы можем вернуться к «SELECT». Как видите, в этот момент таблица уже очень четко у нас в голове. Другими словами, мы сузили фокус.

После этого просто полировать порядком и лимитом. Это последний шаг в списке заказов.

Несмотря на то, что «ORDER BY» и «LIMIT» могут показаться очень незначительными, их творческое использование может дать полезные результаты, особенно в подзапросах.

КЕЙС И ПОДЗАПРОСЫ

Я поставил «CASE» и подзапросы последними, потому что они могут следовать почти за любым оператором. Вы можете поставить их после «SELECT», «FROM», «WHERE», даже в другом «CASE», если это необходимо.

ПОДЗАПРОСЫ

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

Вы можете вставлять свои подзапросы в оператор «SELECT», а также «FROM». Не слишком усложняйте эту тему, потому что она может быстро стать очень неприятной. Подзапросы подчиняются тем же правилам, что и любые запросы, только внутри круглых скобок. Когда вы находитесь внутри подзапроса, повторите порядок выполнения с первого шага.

КЕЙС

Думайте об операторе «CASE» как о функции, которая возвращает весь столбец. Это очень важно, гибкое использование «CASE» требует от вас понимания этой концепции. «CASE» оценивает условия, следующие за «WHEN», и выводит значения, следующие за «THEN». Итак, WHEN column_X › 5 THEN ‘yes’ ELSE ‘no’ END AS more_than5 создает новый двоичный столбец с псевдонимом «more_than5». «CASE» решает, какие значения входят в «more_than5», исходя из условия «column_X > 5». Если верно, выводит «да», иначе «нет». Конечным результатом является новое имя столбца «more_than5».

Значение «ДЕЛА» огромно. С помощью дополнительной базы столбцов условий и значений, которые мы устанавливаем, мы можем группировать, добавлять или подсчитывать. Возможности безграничны.

ЗАКЛЮЧЕНИЕ

Это самые важные команды SQL. Конечно, у меня нет времени, чтобы охватить все это. И каждый год вы будете слышать какие-то новые навороты, которые возвращают точные результаты, но, тем не менее, они больше подходят для опытных пользователей SQL, которые уже поняли основы.

SQL не сложен, если вы соблюдаете его правила: порядок выполнения. Игнорируйте это, вы столкнетесь с ошибками или в лучшем случае вернете сумасшедшие вещи.

Когда свобода разрушает порядок, жажда порядка разрушит свободу.

-Уилл Дюран