SQL: от А до Я

Alias
При объединении таблиц нам необходимо указать, какой столбец и из какой таблицы мы хотим сопоставить, и какие столбцы мы хотим вернуть в результатах.
Если мы этого не сделаем, будет выдана ошибка, поскольку база данных не знает, что мы имеем в виду.
select orders.order_item, inventory.inventory_item from orders inner join inventory on orders.order_item = inventory.inventory_item
Чтобы быстрее набирать текст, мы можем псевдоним двух таблиц с более коротким.
select o.order_item, i.inventory_item from orders o inner join inventory i on o.order_item = i.inventory_item
Вместо того, чтобы вводить полное имя таблицы каждый раз, когда мы хотим добавить новый столбец, мы можем присвоить им псевдоним «o» для заказов и «i» для инвентаря.
Begin Transaction
Транзакции SQL используются для отлова ошибок при внесении изменений в таблицы. Во время выполнения оператора UPDATE или DELETE изменение автоматически фиксируется.
Оборачивая оператор в транзакцию, мы имеем возможность «откатить» или «зафиксировать», когда мы уверены, что оно должно быть выполнено, или если условие выполнено.
Следующая транзакция будет выполняться в блоке и в случае успешной фиксации.
begin transaction update orders set status = 'sent' where order_id = '12345' update orders set status = 'sent' where order_id = '54321' commit transaction
CTEs v Subqueries
CTE (Common Table Expressions) используются для фильтрации наборов данных и присвоения им имен, к которым можно вернуться в запросе позже.
Я использую их при работе с большими таблицами, например, чтобы получить все нужные мне столбцы из таблицы 'orders', а затем получить все нужные мне столбцы из таблицы 'инвентаризации'. Затем на последнем этапе объедините их.
with orderset as (select order_id, order_item from orders where order_id between '12345' and '54321' ), with inventoryset as (select inventory_item inventory_balance from inventory ) select orderset.order_id, inventoryset.inventory_balance from inventoryset join orderset on orderset.order_item = inventoryset.inventory_item
Это хороший способ упростить запросы, вместо того, чтобы выполнять сложные СОЕДИНЕНИЯ или создавать таблицы, для которых у вас могут не быть разрешения на создание.
Design
Таблицы Datamarts организованы в одной из двух форм. Схема «Звезда» и «Снежинка» состоят из двух типов таблиц.
- Факты - это подсчет, сколько раз что-то случалось.
- Размеры - (или Dims), которые описывают атрибут.
В модели Star мы можем иметь таблицу продаж в качестве нашего факта в центре с таблицами Dim для магазина, продукта и местоположения вокруг факта.
Снежинка похожа, но уносит Димс на один шаг вперед. Вместо таблицы местоположений у нас может быть город, страна и даже таблица почтовых индексов. Все Тусклые становятся точками на снежинке.
ETL
ETL расшифровывается как Extract, Transform, Load и описывает процесс получения данных из одной базы данных в другую или из ее необработанной формы в таблицы, которые можно запрашивать.
Эта задача решается инженерами данных или разработчиками баз данных в команде.
Function
В PostgreSQL мы можем выполнять блоки кода, называемые функциями, по расписанию. Они могут быть написаны как операторы, которые мы запускаем ad hoc для базы данных, или могут быть проанализированы переменные, чтобы сделать их динамичными.
Group By
Агрегатные функции позволяют нам выполнять вычисления на полях.Наиболее распространенными являются SUM, COUNT, MIN, MAX, AVERAGE.
Например, чтобы увидеть общую сумму, подлежащую оплате для каждого элемента в таблице заказов, мы можем использовать сумму суммы столбца amount_due и GROUP BY
select order_item, sum(amount_due) from orders group by order_item;
Heaped Storage
Heaped Storage - это термин для таблиц, которые живут в базе данных без индексов. Данные расположены в произвольном порядке, и новые данные просто добавляются по мере поступления.
Запросы, выполняемые в этих таблицах, особенно если они большие, могут быть оптимизированы путем добавления индексов.
Индексы - это способ указать базе данных упорядочить данные или где искать данные, которые вы часто запрашиваете.
- Кластерные индексы похожи на страницу содержания книги. Применение этого вида индекса говорит данным о том, как они должны быть упорядочены, как страницы в книге.
- Некластеризованные индексы похожи на индекс книги, страницы не были упорядочены физически, но теперь у вас есть возможность быстрее найти то, что вам нужно.
Integrity
Это относится к качеству данных и правилам, обеспечивающим возможность отслеживания, поиска и восстановления данных.
- Целостность объекта - каждая таблица должна иметь уникальный первичный ключ
- Ссылочная целостность - внешние ключи в каждой таблице относятся к первичному ключу в другой или имеют значение NULL.
- Целостность домена - каждый столбец имеет определенный тип данных и длину
Join
Вы не найдете в одной таблице все, что вам нужно, поэтому вам нужно научиться объединять их, чтобы получить то, что вам нужно.
Существуют различные типы соединений в зависимости от ваших потребностей.
Key
Первичный ключ - это столбец, который лучше всего идентифицирует одну уникальную строку и идентифицирует каждую запись как уникальную, например, идентификатор
- Это гарантирует, что нет дубликатов
- Это не может быть неизвестно (NULL)
- В таблице может быть только один первичный ключ
- Внешний ключ - это столбец, который соответствует первичному ключу в другой таблице, поэтому мы можем объединить данные в каждой из них.
Lock
Когда два пользователя пытаются запросить или обновить одну и ту же таблицу одновременно, это может привести к блокировке. Точно так же, как два человека с карточками банкомата на один и тот же банковский счет пытаются снять те же 100 долларов с одного и того же банковского счета, один из них будет заблокирован до завершения первой транзакции.
Massive Parallel Processing
В базах данных Massively Parallel Processing, таких как Redshift, данные распределяются по нескольким вычислительным узлам, причем каждый узел имеет память для локальной обработки данных.
Redshift распределяет строки таблицы по узлам, чтобы данные могли обрабатываться параллельно. Выбрав подходящий ключ распределения для каждой таблицы, можно сбалансировать рабочую нагрузку.
Normalisation
Нормализация базы данных повышает целостность данных и позволяет добавлять новые данные без изменения базовой структуры.
Процесс нормализации базы данных состоит из нескольких этапов:
- 1-я нормальная форма - устраняет дубликаты столбцов во всех таблицах и добавляет первичный ключ.
- 2nd Normal Form - создайте отношения через Foreign Keys.
- 3-я нормальная форма - поля не должны быть получены из других полей. то есть. удаление столбца Total, который умножает столбец количества и цены. Вместо этого его следует рассчитывать, выполняя запрос, а не сохраняя его в таблице.
OLTP v OLAP
OLTP и OLAP относятся к разным типам баз данных и инструментам, которые выполняют разные функции.
- OLTP - Online Transaction Processing - используется для быстрой обработки данных и мгновенно реагирует на запросы.
- OLAP - Online Analytics Processing - используется для хранения исторических данных и интеллектуального анализа данных.
Privileges
Если вы хотите поделиться таблицей со своими коллегами, которые имеют доступ к вашей схеме, вам необходимо явно предоставить им доступ. Это позволяет заблокировать данные только тем, кому это нужно.
GRANT ALL ON <schemaname.tablename> TO <username> -- if you would like them to SELECT, UPDATE and DELETE GRANT SELECT ON <schemaname.tablename> TO <username> -- if you would like them to be able to only SELECT
Query Plan
Когда мы запускаем запрос, есть много вещей, которые учитывает движок SQL - объединения, индексы, будет ли он сканировать всю таблицу или столкнется с блокировкой таблицы.
В PostgreSQL мы можем проверить план запроса, используя:
- EXPLAIN - показать план выполнения выписки
- EXPLAIN ANALYZE - также вызывает выполнение запроса
explain select orders.order_item, inventory.inventory_item from orders inner join inventory on orders.order_item = inventory.inventory_item
Recovery
Аварийное восстановление в мире баз данных относится к резервным копиям, журналам и экземплярам репликации, которые поддерживаются, пока все работает нормально. Затем их можно включить, переключить и проанализировать, если что-то пойдет не так, как аппаратный сбой, стихийное бедствие или даже человеческая ошибка.
В зависимости от организации эти решения могут распространяться на:
- Аварийное переключение - несколько кластеров настроены так, что если один отказывает, другой может вступить во владение.
- Зеркальное отображение - ведение двух копий одной и той же базы данных в разных местах. Один в автономном режиме, поэтому мы знаем, где что находится, когда нам нужно его использовать.
- Репликация - вторичная база данных находится в сети и может быть запрошена.
System Tables
Системные таблицы содержат информацию обо всех объектах в базе данных. Иногда это называется информационной схемой или системным каталогом.
Отсюда мы можем писать запросы, которые показывают список всех таблиц, столбцов и их типов данных, искать в базе данных нужное нам имя столбца или возвращать размер каждой таблицы.
Truncate v Drop
При обновлении таблицы новыми данными используйте команду TRUNCATE. Он удаляет все строки из таблицы, не удаляя формат и заголовки.
Union
В то время как JOIN объединяет строки столбцов по горизонтали, UNION объединяет результаты по вертикали. Использование UNION объединяет результаты двух запросов в один столбец и удаляет дубликаты. Если в вашем запросе несколько столбцов, они должны быть в том же порядке, чтобы завершить UNION.
- UNION - объединяет две таблицы или наборы данных по горизонтали и удаляет дубликаты
- UNION ALL - делает то же самое, но не удаляет дубликаты
View
Представления не являются таблицами, это запросы, которые выполняются на лету и используются как способ создания уровня абстракции из базовой таблицы.
Window Function
Оконная функция получает свое имя, потому что, в отличие от агрегатной функции, она сохраняет каждую строку без изменений и добавляет номер строки или промежуточный итог.
На данный момент, вот пример с использованием таблицы заказов, которая возвращает ранг, используя order_value.
select order_id, order_name order_date, rank() over(order amount_due desc) [rank] from dbo.orders
XML
Мы можем импортировать файлы в таблицы с помощью мастера импорта / экспорта. Но они не должны быть просто CSV или TXT файлами. Используя несколько строк кода, мы также можем импортировать xml и json.
Year
Вот несколько советов по работе с датами:
- Труднее работать с датами, которые хранятся в виде строк, поэтому убедитесь, что они никогда не представляют даты.
- Не разбивайте год, месяц и день на отдельные столбцы. Это значительно усложняет написание и фильтрацию запросов.
- Всегда используйте UTC для своего часового пояса. Если у вас есть сочетание не-UTC и UTC, это делает понимание данных намного сложнее.
- Функции DATEDIFF и DATEADD из SQL Server не существуют в PostgreSQL, узнайте больше о различиях между двумя системами:
Zero
NULL означает, что значение неизвестно, не ноль и не пусто. Это затрудняет сравнение значений, если вы сравниваете NULL с NULL.
В зависимости от того, что вы просите, чтобы ваш код сделал, влияет на стратегию, которую вы должны принять.

Заметил ошибку или есть вопросы?Рассказывай нам о них,связаться с нами ты сможешь с помощью нашего чата или же с помощью бота обратной связь
Не забывайте ставить 👍 если вам понравилась и подписаться на канал,а так же посетить наш чат.