Друзья, сегодня поговорим о видах соединений таблиц в SQL.
📎 Соединение таблиц (JOIN) — это операция объединения двух таблиц в одну таблицу согласно определенному правилу. Таблица, получаемая в результате соединения, включает все поля соединяемых таблиц, что значительно упрощает работу с исходными данными, поскольку вся необходимая информация автоматически собирается вместе и предоставляется в виде одной таблицы.
📎 Существуют следующие виды соединений:
✔️ Внутреннее соединение — отбираются все пары записей двух таблиц, для которых выполняется условие соединения. Если записи невозможно поставить в пару запись из другой таблицы так, чтобы условие соединения выполнялось, запись будет отброшена.
Внутреннее соединение выполняется с помощью оператора
✔️ Внешнее соединение бывает двух видов:
🟢 Левое внешнее соединение — отбираются все пары записей двух таблиц, для которых выполняется условие соединения, а также все оставшиеся записи из левой таблицы, для которых пара не нашлась.
Левое внешнее соединение выполняется с помощью оператора
🟢 Правое внешнее соединение — отбираются все пары записей двух таблиц, для которых выполняется условие соединения, а также все оставшиеся записи из правой таблицы, для которых пара не нашлась.
Правое внешнее соединение выполняется с помощью оператора
При внешнем соединении записям без пары в соответствие ставятся значения
✔️ Перекрестное соединение — каждая запись из одной таблицы сопоставляется с каждой записью из другой таблицы. При этом условие соединения не требуется, поскольку сопоставление записей выполняется не по какому-либо правилу, а перебором всех возможных комбинаций.
Перекрестное соединение выполняется с помощью оператора
☝️ ☝️ ☝️ ☝️ Подробно о соединении таблиц рассказываем в курсе "Базы данных и SQL". Купить курс можно на нашем официальном сайте по ссылке.
Ставьте реакцию:
🔥 — если знали о видах соединений таблиц
👀 — если слышите о них впервые
#поколениеpython #базыданных #sql
Внутреннее соединение выполняется с помощью оператора
INNER JOIN. Общий синтаксис имеет следующий вид:<первая таблица> INNER JOIN <вторая таблица> ON <условие соединения>Левое внешнее соединение выполняется с помощью оператора
LEFT JOIN. Общий синтаксис имеет следующий вид:<первая таблица> LEFT JOIN <вторая таблица> ON <условие соединения>Правое внешнее соединение выполняется с помощью оператора
RIGHT JOIN. Общий синтаксис имеет следующий вид:<первая таблица> RIGHT JOIN <вторая таблица> ON <условие соединения>При внешнем соединении записям без пары в соответствие ставятся значения
NULL.Перекрестное соединение выполняется с помощью оператора
CROSS JOIN. Общий синтаксис имеет следующий вид:<первая таблица> CROSS JOIN <вторая таблица>Ставьте реакцию:
🔥 — если знали о видах соединений таблиц
👀 — если слышите о них впервые
#поколениеpython #базыданных #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥75👀34 8❤5 2 2 1
Друзья, сегодня поговорим о представлениях в языке SQL. 😌
📌 Представление — это виртуальная таблица. В отличие от обычных таблиц, содержащих фактические данные, представление содержит запрос, который динамически извлекает данные тогда, когда это необходимо.
📌 Представления можно использовать точно так же, как и обычные таблицы: извлекать из них данные, фильтровать и сортировать, объединять с другими таблицами или представлениями.
📌 Так как представления не содержат фактических данных, а извлекают их из других таблиц, при изменении этих таблиц изменится и содержимое связанных с ними представлений.
😉 Представления удобно использовать, например, в случаях, когда из базы данных постоянно нужно извлекать одни и те же данные или при частой необходимости извлекать данные в определенном формате.
📌 Для создания представлений используется оператор
📌 Запрос, который используется в представлении, может быть изменен. Для этого используется оператор
📌 Представление может быть удалено. Для этого используется оператор
☝️ ☝️ ☝️ ☝️ Подробно о представлениях рассказываем в курсе "Базы данных и SQL". Купить курс можно на нашем официальном сайте по ссылке.
Ставьте реакцию:
🔥 — если знали о представлениях в SQL
👀 — если слышите о них впервые
#поколениеpython #базыданных #sql
CREATE VIEW, синтаксис которого имеет следующий вид:CREATE VIEW <имя представления> AS<извлекающий запрос>ALTER VIEW, синтаксис которого имеет следующий вид:ALTER VIEW <имя представления> AS<новый извлекающий запрос>DROP VIEW, синтаксис которого имеет следующий вид:DROP VIEW <имя представления>Ставьте реакцию:
🔥 — если знали о представлениях в SQL
👀 — если слышите о них впервые
#поколениеpython #базыданных #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
4👀69🔥45❤15 3 3 2👍1👏1😁1🆒1
Друзья, сегодня поговорим о подзапросах в SQL. 😎
При выполнении запроса обращение к таблице происходит лишь единожды, однако в рамках одного запроса данные из таблицы могут извлекаться несколько раз. Для выполнения таких вспомогательных операций извлечения используются подзапросы.
📌 Подзапрос — это запрос, вложенный в другой запрос. Он заключен в круглые скобки и обычно выполняется перед основным запросом. Подзапросы являются обычными запросами, и для них не предусмотрен какой-либо отдельный синтаксис, поэтому для составления подзапросов достаточно уметь составлять обычные запросы.
📎 Предположим, что наша база данных содержит таблицу
поскольку его результатом является ошибка:
Для решения данной задачи мы можем воспользоваться подзапросом, чтобы сперва вычислить среднюю стоимость книг, а затем выполнить сравнение с полученным значением:
Здесь в условии фильтрации значение поля
☝️ ☝️ ☝️ ☝️ Сравнение значения поля
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ Подробнее рассказываем о подзапросах в нашем курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru.
Ставьте реакцию:
🔥 — если знаете о подзапросах
👀 — если узнали о них впервые
#sql #подзапросы #поколениеpython
При выполнении запроса обращение к таблице происходит лишь единожды, однако в рамках одного запроса данные из таблицы могут извлекаться несколько раз. Для выполнения таких вспомогательных операций извлечения используются подзапросы.
Books, включающую информацию о названиях книг, их авторах и ценах. Агрегатные функции нельзя использовать для фильтрации записей, поэтому если мы захотим извлечь данные о книгах, чья стоимость превышает среднюю стоимость всех книг, то сделать это с помощью следующего запроса не сможем: SELECT *
FROM Books
WHERE price > AVG(price);
поскольку его результатом является ошибка:
ERROR 1111: Invalid use of group function
Для решения данной задачи мы можем воспользоваться подзапросом, чтобы сперва вычислить среднюю стоимость книг, а затем выполнить сравнение с полученным значением:
SELECT *
FROM Books
WHERE price > (SELECT AVG(price)
FROM Books);
Здесь в условии фильтрации значение поля
price сравнивается с результатом подзапроса. Подзапрос обращается к таблице Books и вычисляет среднее арифметическое всех значений ее поля price. Таблица, получаемая в результате подзапроса, состоит из одной записи и одного поля, то есть содержит единственное значение, с которым и происходит последующее сравнение значения поля price.price с таблицей возможно именно по той причине, что эта таблица содержит лишь одно значение, и СУБД использует это значение для выполнения операции сравнения. Если бы таблица содержала более одного значения, такая операция была бы невозможна.Ставьте реакцию:
🔥 — если знаете о подзапросах
👀 — если узнали о них впервые
#sql #подзапросы #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥60👀38❤15🙊4 3 2👍1🎄1 1
Друзья, сегодня поговорим про обобщенные табличные выражения. 😉
📌 Обобщенное табличное выражение (или CTE, Common Table Expressions) — это временная таблица, к которой можно обращаться в рамках одного запроса. Для простоты CTE можно считать именованным подзапросом, который определен отдельно от основного запроса. Использование CTE позволяет писать сложные запросы в более читаемой форме, разбивая их на небольшие логические шаги.
Для написания запросов с использованием CTE предназначен оператор WITH со следующим синтаксисом:
Как видно из шаблона выше, чтобы воспользоваться CTE, ему необходимо дать имя, по которому к нему можно будет обращаться, а затем определить его содержимое. Обратите внимание: определение CTE не отделяется от основного запроса точкой с запятой, поскольку вся конструкция (определение CTE и основной запрос) воспринимается как одно целое.
😎 CTE часто используют для создания подзапросов, которые используются в рамках основного запроса несколько раз, чтобы избежать повторного написания одних и тех же подзапросов.
⚠️ После оператора WITH допустимо определить несколько CTE. Для этого достаточно перечислить их определения через запятую. Если блок WITH включает определение нескольких CTE, то их создание выполняется последовательно: сначала первое, затем второе, и так далее. Таким образом, во время определения очередного CTE все определенные ранее CTE уже являются созданными, поэтому каждое следующее определенное CTE может ссылаться на любое предыдущее.
☝️ ☝️ ☝️ ☝️ CTE является обычной таблицей, поэтому с ней допустимо выполнять любые необходимые операции: извлекать данные, фильтровать и сортировать, объединять с другими таблицами, представлениями или CTE.
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ Подробнее рассказываем о CTE в курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru.
Ставьте реакцию:
🔥 — если умеете использовать CTE
👀 — если еще не применяли CTE на практике
#CTE #sql #поколениеpython
Для написания запросов с использованием CTE предназначен оператор WITH со следующим синтаксисом:
WITH <имя CTE> AS (
<извлекающий запрос, определяющий содержимое CTE>
)
<основной запрос, который может обращаться к CTE>
Как видно из шаблона выше, чтобы воспользоваться CTE, ему необходимо дать имя, по которому к нему можно будет обращаться, а затем определить его содержимое. Обратите внимание: определение CTE не отделяется от основного запроса точкой с запятой, поскольку вся конструкция (определение CTE и основной запрос) воспринимается как одно целое.
Ставьте реакцию:
🔥 — если умеете использовать CTE
👀 — если еще не применяли CTE на практике
#CTE #sql #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
1👀82🔥54 10❤5👍2 2 1
Друзья, сегодня поговорим о текстовых функция в SQL. 🖥
Как и большинство языков программирования, SQL имеет множество встроенных функций, которые позволяют выполнять различные манипуляции с данными.
✅ Одними из самых важных являются текстовые функции, так как таблицы баз данных зачастую содержат немало текстовой информации.
К текстовым функциям относятся:
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
🩵 Функции могут применяться как в блоке оператора
🩵 Все текстовые функции при вызове с аргументом
🩵 Почитать подробнее о текстовых функциях можно по ссылке.
Ставьте реакцию:
🔥 — если знали все перечисленные текстовые функции
👀 — если некоторые увидели впервые
#SQL #полезныйматериал #поколениеpython
Как и большинство языков программирования, SQL имеет множество встроенных функций, которые позволяют выполнять различные манипуляции с данными.
К текстовым функциям относятся:
CHAR_LENGTH() — для вычисления длины строкиLOWER() — для перевода строки в нижний регистрUPPER() — для перевода строки в верхний регистрLTRIM() — для отсечения ведущих пробеловRTRIM() — для отсечения пробелов справаREVERSE() — для переворота строкиREPEAT() — для повторения строкиLPAD() — для увеличения длины строки до определенного значения путем добавления в ее начало другой строкиRPAD() — для увеличения длины строки до определенного значения путем добавления в ее конец другой строкиLEFT() — для извлечения определенного количества символов из начала строкиRIGHT() — для извлечения определенного количества символов из конца строкиLOCATE() — для определения местоположения подстроки в строкеREPLACE() — для замены подстроки в строкеSUBSTRING() — для извлечения подстроки из строкиSUBSTRING_INDEX() — для извлечения подстроки из строки с помощью разделителяTRIM() — для удаления всех вхождений подстроки из начала и/или конца строкиSELECT, так и в блоках операторов WHERE и ORDER BY.NULL возвращают значение NULL.Ставьте реакцию:
🔥 — если знали все перечисленные текстовые функции
👀 — если некоторые увидели впервые
#SQL #полезныйматериал #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
25👀97🔥36❤14👍11✍2 2 2🆒1💘1 1
Друзья, в одном из предыдущих постов мы рассмотрели текстовые функции SQL, которые позволяют обрабатывать текстовые данные. 📖
🔢 В этом посте расскажем про числовые функции, которые позволяют выполнять различные операции с числами.
К числовым функциям относятся:
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
⏺
💡 Кроме того, в SQL существуют операторы
🩵 Почитать подробнее о текстовых функциях можно по ссылке.
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ О текстовых и числовых функциях рассказываем в курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru. Промокод
Ставьте реакцию:
🔥 — если знали все перечисленные числовые функции
👀 — если некоторые увидели впервые
#SQL #полезныйматериал #поколениеpython
🔢 В этом посте расскажем про числовые функции, которые позволяют выполнять различные операции с числами.
К числовым функциям относятся:
ABS() — для вычисления модуля числаROUND() — для округления числаPOW() — для возведения числа в определенную степеньSQRT() — для вычисления квадратного корняRAND() — для генерации случайных чисел.DEGREES() — для перевода значения из радиан в градусыRADIANS() — для перевода значения из градусов в радианыPI() — для получения числа пиSIN(), COS() и TAN() — для вычисления синуса, косинуса и тангенса соответственноLEAST() — для поиска минимального значенияGREATEST() — для поиска максимального значенияCONV() — для перевода числа из одной системы счисления в другуюFORMAT() — для округления и форматирования числаDIV и MOD, которые позволяют выполнять операции целочисленного деления и деления с остатком над числами. Операцию деления с остатком можно также выполнять с помощью оператора % и одноименной функции MOD().HAPPYBD33 дает скидку 33%.Ставьте реакцию:
🔥 — если знали все перечисленные числовые функции
👀 — если некоторые увидели впервые
#SQL #полезныйматериал #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44👀34⚡10❤7👍5 5❤🔥1🆒1 1 1
Друзья, сегодня поговорим о функциях даты и времени в SQL. 🖥
🗓 С помощью функций даты и времени можно получить текущую дату или время, выполнять арифметические операции с датой и временем, извлекать интересующую информацию и многое другое.
Функций для работы с датой и временем гораздо больше, чем текстовых и числовых, поэтому рассмотрим лишь небольшую часть из них.
👀 К функциям даты и времени относятся:
1️⃣
2️⃣
3️⃣
4️⃣
5️⃣
6️⃣
7️⃣
8️⃣
9️⃣
1️⃣ 0️⃣
1️⃣ 1️⃣
1️⃣ 2️⃣
1️⃣ 3️⃣
1️⃣ 4️⃣
1️⃣ 5️⃣
Почитать подробнее о функциях для работы с датой и временем можно по ссылке.
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ О функциях для работы с датой временем мы рассказываем в курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru.
Ставьте реакцию:
🔥 — если знали все перечисленные функции
👀 — если некоторые увидели впервые
#функциидатыивремени #sql #поколениеpython
Функций для работы с датой и временем гораздо больше, чем текстовых и числовых, поэтому рассмотрим лишь небольшую часть из них.
NOW(), CURDATE() и CURTIME() используются для получения текущей даты и времени в локальном часовом поясеUTC_TIMESTAMP(), UTC_DATE() и UTC_TIME() используются для получения текущей даты и времени в UTC, то есть нулевом часовом поясе. MAKEDATE() и MAKETIME() используются для создания даты и времени. DATE() и TIME() используются для получения даты и времени из даты и времениHOUR(), MINUTE(), SECOND() и MICROSECOND() используются для определения количества часов, минут, секунд и микросекунд во времениYEAR(), MONTH() и DAY() используются для извлечения значения года, месяца и дня из датыDAYOFYEAR(), WEEK() и WEEKDAY() используются для вычисления номера дня в году, номера недели в году и номера дня неделиDAYNAME() и MONTHNAME() используются для вычисления названия дня недели и названия месяца на основе датыADDDATE() и SUBDATE() используются для прибавления и вычитания временного интервала из даты и времениADDTIME() и SUBTIME() используются для прибавления и вычитания временного значения из даты и времениDATEDIFF() используется для вычисления разницы в днях между двумя значениями даты и времениTIMEDIFF() используется для вычисления разницы во времени между двумя значениями даты и времениTIMESTAMPDIFF() используется для вычисления разницы между двумя значениями даты и времени в определенных единицах измеренияTIMESTAMP() используется для объединения даты и временного значенияDATEFORMAT() и TIMEFORMAT() используются для форматирования даты и времениПочитать подробнее о функциях для работы с датой и временем можно по ссылке.
Ставьте реакцию:
🔥 — если знали все перечисленные функции
👀 — если некоторые увидели впервые
#функциидатыивремени #sql #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👀74🔥28❤9💔4 2 2 2
Друзья, сегодня расскажем про триггеры в SQL. 😉
✏️ Триггер — это запрос, который автоматически выполняется во время применения операций
💡 Общий шаблон для создания триггера имеет следующий вид:
⚠️ Операция, вызывающая триггер, всегда связана с какой-либо записью таблицы, и триггер имеет доступ к значениям этой записи.
Уровень доступа определяется типом триггера:
🟡
🟣
🟡
🟣
🟡
🟣
Триггеры применяются для самых разных задач, например:
📌 автоматическое преобразование добавляемых в таблицу данных в нужный формат, чтобы обеспечить непротиворечивость данных
📌 выполнение действий по отношению к одной таблице на основе изменений, которые были сделаны в другой таблице, что может быть полезно для ведения журнала событий
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ Подробнее о триггерах мы рассказываем в курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru.
Ставьте реакцию:
🔥 — если знали все о триггерах в SQL
👀 — если знаете только триггеры в реальной жизни
#триггеры #sql #поколениеpython
INSERT, DELETE или UPDATE по отношению к определенной таблице. Например, триггер, ассоциированный с оператором DELETE по отношению к условной таблице Table, будет выполняться всякий раз, когда из этой таблицы будут удаляться записи.DELIMITER //
CREATE TRIGGER <имя триггера>
<время срабатывания триггера> <операция, которая вызывает триггер>
ON <имя таблицы>
FOR EACH ROW
BEGIN
<тело триггера>;
END //
DELIMITER ;
Уровень доступа определяется типом триггера:
BEFORE INSERTAFTER INSERTBEFORE UPDATEAFTER UPDATEBEFORE DELETEAFTER DELETEТриггеры применяются для самых разных задач, например:
Ставьте реакцию:
🔥 — если знали все о триггерах в SQL
👀 — если знаете только триггеры в реальной жизни
#триггеры #sql #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👀66🔥32❤5 4👍3 3 3
Друзья, не так давно мы рассказывали про подзапросы в SQL. Сегодня поговорим об их разновидностях, а именно о коррелированных и некоррелированных подзапросах. 😎
🚨 Некоррелированные подзапросы могут выполняться автономно от основного запроса. Перед тем как их результат будет использоваться в основном запросе, можно посмотреть, что они возвращают.
👀 Предположим, что наша база данных содержит таблицу Books, включающую информацию о названиях книг, их авторах и оценках критиков. В качестве примера использования некоррелированного подзапроса напишем запрос, извлекающий данные о книгах с минимальной оценкой критиков:
Здесь подзапрос используется для вычисления наименьшего значения поля
Таким образом, обработка запроса, содержащего некоррелированный подзапрос, происходит в два этапа:
1️⃣ выполняется подзапрос, определяется его результат
2️⃣ полностью выполняется основной запрос с использованием результата подзапроса
🚨 Коррелированные подзапросы используются в том случае, когда для каждой записи таблицы, анализируемой основным запросом, подзапрос должен вернуть результат, зависящий от значений в этой записи.
👀 В качестве примера использования коррелированного подзапроса напишем запрос, извлекающий данные о книгах, оценка критиков которых больше, чем у предыдущей книги в таблице, то есть у книги с идентификатором на один меньше:
Здесь подзапрос используется для вычисления оценки критика, у которого идентификатор на единицу меньше, чем у критика в текущей записи таблицы. СУБД выполняет такой подзапрос для каждой записи таблицы отдельно и возвращает результат, полученный на основе ее значений.
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ Подробнее рассказываем о подзапросах в нашем курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru.
Ставьте реакцию:
🔥 — если знали о разновидностях подзапросов
👀 — если узнали о них впервые
#sql #подзапросы #поколениеpython
SELECT title, critic_score
FROM Books
WHERE critic_score = (SELECT MIN(critic_score)
FROM Books);
Здесь подзапрос используется для вычисления наименьшего значения поля
critic_score, то есть для определения минимальной оценки критиков. СУБД запоминает это значение и в дальнейшем просто использует его.Таким образом, обработка запроса, содержащего некоррелированный подзапрос, происходит в два этапа:
SELECT title, user_score
FROM Books
WHERE critic_score > (SELECT critic_score
FROM Books AS InnerBooks
WHERE id = Books.id - 1);
Здесь подзапрос используется для вычисления оценки критика, у которого идентификатор на единицу меньше, чем у критика в текущей записи таблицы. СУБД выполняет такой подзапрос для каждой записи таблицы отдельно и возвращает результат, полученный на основе ее значений.
Ставьте реакцию:
🔥 — если знали о разновидностях подзапросов
👀 — если узнали о них впервые
#sql #подзапросы #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👀52🔥24❤7👍2🗿2 2 1 1
Друзья, ранее мы рассказывали про обобщенные табличные выражения (CTE). Сегодня расскажем про одну из их разновидностей. 🖥
📌 Рекурсивное CTE — это CTE, содержимое которого последовательно формируется на основе самого себя. Тело рекурсивного CTE, в отличие от обычного CTE, включает два извлекающих запроса:
🟣 первый (нерекурсивный) — для однозначного определения содержимого первой записи CTE
🟣 второй (рекурсивный) — для определения правила формирования всех остальных записей
📎 Содержимое каждой записи рекурсивного CTE, кроме первой, зависит только от содержимого предыдущей записи. Так, содержимое второй записи определяется на основе первой записи, содержимое третьей — на основе второй и так далее.
👀 Например, если первая запись CTE включает число
Синтаксис создания рекурсивного CTE практически повторяет синтаксис создания обычного CTE и имеет следующий вид:
Как видно из шаблона, для создания рекурсивного CTE перед его именем необходимо указать ключевое слово
🟣
🟣
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ Подробнее рассказываем про обобщенные табличные выражения в нашем курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru.
Ставьте реакцию:
🔥 — если знали о существовании рекурсивных СТЕ
👀 — если узнали о них впервые
#sql #СТЕ #поколениеpython
1, а правило, определяющее оставшиеся записи CTE, имеет вид <значение предыдущей записи> + 1, то вторая запись будет включать число 2, третья — 3 и так далее.Синтаксис создания рекурсивного CTE практически повторяет синтаксис создания обычного CTE и имеет следующий вид:
WITH RECURSIVE <имя CTE> AS (
<извлекающий запрос, определяющий первую запись CTE>
<пара ключевых слов UNION ALL или UNION DISTINCT>
<извлекающий запрос, определяющий правило формирования очередной записи CTE (второй, третьей и так далее)>
)
<основной запрос, который может обращаться к рекурсивному CTE>
Как видно из шаблона, для создания рекурсивного CTE перед его именем необходимо указать ключевое слово
RECURSIVE, а затем предоставить два извлекающих запроса, связав их парой ключевых слов: UNION ALL — при этом CTE будет включать повторяющиеся записи, если они возникнут при формированииUNION DISTINCT — при этом все повторяющиеся записи будут удаленыСтавьте реакцию:
🔥 — если знали о существовании рекурсивных СТЕ
👀 — если узнали о них впервые
#sql #СТЕ #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👀69🔥32❤9 2 1 1
Друзья, сегодня рассказываем про оконные функции в SQL. 😎
🪟 Оконная функция — это функция, которая выполняет вычисления на основе определенного набора записей и возвращает одиночное значение. Набор записей, с которым работает оконная функция, называют окном.
✏️ Определение окна выполняется с помощью оператора
Спецификация окна, заключаемая в круглые скобки, может включать три базовых элемента:
⏩ секционирование (разбиение на секции)
⏩ упорядочивание
⏩ определение границ окна
Предположим, что у нас есть таблица с именем
❤️
❤️
❤️
❤️
Нам необходимо пронумеровать сотрудников по порядку в пределах каждого отдела в зависимости от уровня их заработной платы (чем выше зарплата, тем выше порядковый номер). Для этого можно использовать оконную функцию
Таким образом, запрос, решающий эту задачу, может выглядеть так:
Оператор
💡 Определить окно можно без использования оператора
☝️ ☝️ ☝️ ☝️ Более подробно про оконные функции мы рассказываем в курсе по SQL, который доступен к покупке на нашем официальном сайте.
Ставьте реакцию:
🔥 — если знакомы с оконными функциями в SQL
👀 — если знаете только об окнах в домах и в Windows
#sql #поколениеpython #оконныефункции
WINDOW, синтаксис использования которого имеет следующий вид:WINDOW <название окна> AS (<спецификация окна>)Спецификация окна, заключаемая в круглые скобки, может включать три базовых элемента:
Предположим, что у нас есть таблица с именем
Employees, которая содержит информацию о сотрудниках некоторой компании и имеет следующие поля:
id (идентификатор сотрудника)fullname (имя и фамилия сотрудника)department (отдел, в котором работает сотрудник)salary (заработная плата). Нам необходимо пронумеровать сотрудников по порядку в пределах каждого отдела в зависимости от уровня их заработной платы (чем выше зарплата, тем выше порядковый номер). Для этого можно использовать оконную функцию
ROW_NUMBER() и следующую спецификацию окна:WINDOW all_rows AS (PARTITION BY department ORDER BY salary)Таким образом, запрос, решающий эту задачу, может выглядеть так:
SELECT full_name,
ROW_NUMBER() OVER all_rows AS row_num
FROM Employees
WINDOW all_rows AS (PARTITION BY department ORDER BY salary);
Оператор
PARTITION BY разбивает окно на секции подобно тому, как это делает оператор GROUP BY. Оператор ORDER BY сортирует данные в рамках каждой секции, а затем функция ROW_NUMBER() в каждой секции устанавливает номера по порядку, начиная с 1.WINDOW. Для этого достаточно предоставить спецификацию окна, заключенную в круглые скобки, сразу после ключевого слова OVER:SELECT full_name,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary) AS row_num
FROM Employees;
Ставьте реакцию:
🔥 — если знакомы с оконными функциями в SQL
👀 — если знаете только об окнах в домах и в Windows
#sql #поколениеpython #оконныефункции
Please open Telegram to view this post
VIEW IN TELEGRAM
👀78🔥58❤8 6 4 4❤🔥1🤩1💘1
Друзья, ранее мы говорили об оконных функциях в SQL. Сегодня хотим рассказать о наиболее часто используемых оконных функциях. 😉
1️⃣
2️⃣
3️⃣
4️⃣
5️⃣
6️⃣
7️⃣
8️⃣
9️⃣
🚨 Также в качестве оконных функций могут использоваться агрегатные функции
⏰ ⏰ ⏰ ⏰ ⏰ ⏰ ⏰ Подробнее рассказываем об оконных функциях в курсе "Базы данных и SQL". Его можно купить на нашем сайте pygen.ru.
Ставьте реакцию:
🔥 — если знали все перечисленные функции
👀 — если о некоторых узнали впервые
#sql #оконныефункции #поколениеpython
ROW_NUMBER() вычисляет порядковый номер записи в рамках указанного окна (начиная с 1)DENSE_RANK() вычисляет ранг записи в рамках указанного окна без пропусковRANK() вычисляет ранг записи в рамках указанного окна с пропускамиNTILE() используется для разбиения окна на заданное количество группFIRST_VALUE() используется для получения значения, которое содержится в определенном поле первой записи окнаLAST_VALUE() используется для получения значения, которое содержится в определенном поле последней записи окнаNTH_VALUE() используется для получения значения, которое содержится в определенном поле n-й записи окна (начиная с 1)LAG() используется для получения значения, которое содержится в определенном поле записи окна, отстающей от текущей на nLEAD() используется для получения значения, которое содержится в определенном поле записи окна, опережающей текущую на n``AVG(), COUNT(), MIN(), MAX() и SUM().Ставьте реакцию:
🔥 — если знали все перечисленные функции
👀 — если о некоторых узнали впервые
#sql #оконныефункции #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👀65🔥34❤11 7 5😁2❤🔥1🙉1
Друзья, помните наши посты про оконные функции в SQL: первый и второй? Они уже успели стать прошлогодними, так что мы принесли новый!
📌 Сегодня поговорим про важную часть оконных функций — границы окна. Именно они определяют, с какими строками будет работать функция.
❗️ Окно всегда ограничивается двумя точками: начальной и конечной. Функция работает только с записями между ними, включая сами границы.
Определить границы окна можно двумя способами.
1️⃣ Оператор ROWS — когда важен порядок строк. Считает строки по позициям. Синтаксис:
Примеры:
🔵
🔵
🔵
2️⃣ Оператор RANGE — когда важны значения. Ориентируется не на номер строки, а на значения поля сортировки. Синтаксис:
Примеры:
🟢
🟢
⚠️ Некоторые функции, например,
Ставьте реакцию:
🔥 — если уверенно работаете с оконными функциями
❤️ — если знали, но не использовали их на практике
👀 — если узнали о них из наших постов
#sql
Определить границы окна можно двумя способами.
ROWS BETWEEN <начальная граничная точка> AND <конечная граничная точка>
Примеры:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING — предыдущая, текущая и следующая строкиROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW — от первой записи окна до текущей строки включительноROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING — следующая и следующая после нее записиRANGE BETWEEN <начало> AND <конец>
Примеры:
RANGE BETWEEN 2000 PRECEDING AND 2000 FOLLOWING — все записи, у которых значение отличается от текущего не более чем на 2000 в большую или меньшую сторонуRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW — начальной границей являются все записи с минимальным или максимальным значением в окне (в зависимости от направления сортировки), а конечной — все записи, значения которых равны значению текущей записиLAG() и LEAD(), игнорируют границы и работают со всем окном.Ставьте реакцию:
🔥 — если уверенно работаете с оконными функциями
❤️ — если знали, но не использовали их на практике
👀 — если узнали о них из наших постов
#sql
Please open Telegram to view this post
VIEW IN TELEGRAM
👀68❤37🔥25 8 8❤🔥2⚡1👍1🍾1
Друзья, давненько не было постов про SQL. Исправляемся! 😁
⭐️ В этом посте мы рассказали про текстовые функции. К ним относится функция
Результатом приведенного ниже запроса:
является:
👀 Разница в способе вычисления длины строки:
🔘 функция
🔘 функция
⚠️ Если строка кроме ASCII-символов будет включать и другие символы (например, смайлики, которые состоят из нескольких байтов), то функции вернут разный результат.
Результатом приведенного ниже запроса:
является:
Ставьте реакцию:
🔥 — если знали обе функции
👀 — если разобрались с ними только сейчас
#sql
CHAR_LENGTH(), которая вычисляет длину строки. В MySQL есть похожая функция — LENGTH(), которая делает то же самое.Результатом приведенного ниже запроса:
SELECT CHAR_LENGTH('Beegeek') AS result1,
LENGTH('Beegeek') AS result2;является:
+---------+---------+
| result1 | result2 |
+---------+---------+
| 7 | 7 |
+---------+---------+
CHAR_LENGTH() считает количество символов строкиLENGTH() считает количество байтов строкиРезультатом приведенного ниже запроса:
SELECT CHAR_LENGTH('Beegeek 🐝') AS result1,
LENGTH('Beegeek 🐝') AS result2;является:
+---------+---------+
| result1 | result2 |
+---------+---------+
| 9 | 12 |
+---------+---------+
Ставьте реакцию:
🔥 — если знали обе функции
👀 — если разобрались с ними только сейчас
#sql
Please open Telegram to view this post
VIEW IN TELEGRAM
👀193🔥27 20❤5👾4🆒3⚡2👍2💋2🎄1
Друзья, сегодня хотим рассказать про оператор 👌
📌 В SQL есть оператор
👀 Возьмем таблицу
Для решения этой задачи можно использовать агрегатную функцию
💡 Здесь и пригодится оператор
В примере выше в поле
😒 Оператор
Ставьте реакцию:
🔥 — если сталкивались с оператором
👀 — если узнали о нем впервые
#sql
FILTER, который используется в SQL-запросах. WHERE, который используется для фильтрации записей. Оператор FILTER также используется для фильтрации записей, но не в рамках всего запроса, а для отдельных извлекаемых значений.Orders, хранящую информацию о заказах. Нам нужно узнать, сколько всего есть заказов, в которых количество товара меньше либо равно 10, а также количество заказов, в которых количество товара больше 10. Для решения этой задачи можно использовать агрегатную функцию
COUNT(). Но у нас есть два противоречивых условия, которые мы не можем указать в условии фильтрации оператора WHERE одновременно и получить однозначный ответ.FILTER — он указывается сразу после агрегатной функции, а за ним в скобках указывается оператор WHERE и условие фильтрации:SELECT COUNT(*) FILTER (WHERE amount <= 10) AS count_le_10,
COUNT(*) FILTER (WHERE amount > 10) AS count_gt_10
FROM Orders;
В примере выше в поле
count_le_10 будут отфильтрованы и посчитаны только те заказы, в которых количество товара меньше либо равно 10, а в поле count_gt_10 — количество заказов, в которых количество товара больше 10. FILTER поддерживается не всеми СУБД, например, в MySQL он отсутствует.Ставьте реакцию:
🔥 — если сталкивались с оператором
FILTER👀 — если узнали о нем впервые
#sql
Please open Telegram to view this post
VIEW IN TELEGRAM
👀139🔥44❤7 2⚡1👨💻1👾1 1
Друзья, привет! 👩❤️👨
😎 Мы — команда «Поколения Python», авторы курсов по программированию на платформе Stepik. В нашей линейке не только Python, но и курсы по алгоритмам и SQL.
В этом канале мы собираем сообщество людей, которые учатся программировать: мотивируем друг друга, делимся полезными материалами и объясняем сложные темы простым языком. Мы считаем, что учиться вместе продуктивнее и интереснее!
Рубрики канала:
🖥 #python #полезныйматериал — все про Python: особенности, фишки, библиотеки
🗓 #словонедели — объясняем термины простым языком
❓#ответнавопрос — автор курсов Тимур Гуев отвечает на вопросы наших студентов
🧠 #задача и #разборзадачи — тренируем логическое мышление
✅ #тесты — короткие вопросы на знание программирования с вариантами ответа
📈 #курспоалгоритмам — все об алгоритмах и структурах данных
🖥 #sql — все об SQL и базах данных
🌎 #япознаюмир — познавательные посты о технологиях и обучении
🎤#интервью — большие видео, где мы общаемся с начинающими и опытными разработчиками
🤯 #сложнонепонятно — рубрика, в которой разбираем самые сложные задачи из наших курсов
😎 Мы — команда «Поколения Python», авторы курсов по программированию на платформе Stepik. В нашей линейке не только Python, но и курсы по алгоритмам и SQL.
В этом канале мы собираем сообщество людей, которые учатся программировать: мотивируем друг друга, делимся полезными материалами и объясняем сложные темы простым языком. Мы считаем, что учиться вместе продуктивнее и интереснее!
Рубрики канала:
🖥 #python #полезныйматериал — все про Python: особенности, фишки, библиотеки
🗓 #словонедели — объясняем термины простым языком
❓#ответнавопрос — автор курсов Тимур Гуев отвечает на вопросы наших студентов
🧠 #задача и #разборзадачи — тренируем логическое мышление
✅ #тесты — короткие вопросы на знание программирования с вариантами ответа
🖥 #sql — все об SQL и базах данных
🌎 #япознаюмир — познавательные посты о технологиях и обучении
🎤#интервью — большие видео, где мы общаемся с начинающими и опытными разработчиками
🤯 #сложнонепонятно — рубрика, в которой разбираем самые сложные задачи из наших курсов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤41👍11❤🔥10 5 3✍2🔥2👀2🥰1🤩1🙉1
Друзья, хорошие новости! В курсе «Поколение Python: базы данных и SQL» появился новый модуль, посвященный транзакциям в SQL. 😍
Темы модуля «Транзакции»:
💚 проблемы конкурентного доступа и целостности данных
💚 транзакционные требования ACID
💚 уровни изоляции баз данных
💚 способы создания и настройки транзакций
💚 точки сохранения транзакций
💚 примеры параллельного выполнения транзакций
💚 транзакции в хранимых процедурах
💚 использование обработчика исключений в транзакциях
✔️ В модуле 42 тестовые задачи и 5 задач на написание SQL-запросов. После того, как решите их все, у вас точно не останется вопросов о транзакциях!
Ставьте реакцию:
🔥 — если уже знакомы с транзакциями
👀 — если впервые слышите этот термин
#sql
Темы модуля «Транзакции»:
Ставьте реакцию:
🔥 — если уже знакомы с транзакциями
👀 — если впервые слышите этот термин
#sql
Please open Telegram to view this post
VIEW IN TELEGRAM
17👀105🔥86❤🔥17❤6🤩5🎉4✍3👍1
Друзья, разбираем новое слово недели! 😍
📌 Денормализация — это намеренное дублирование данных в базе данных ради повышения скорости работы системы.
👀 В обычной нормализованной базе данные стараются хранить без повторений. Например, информация о пользователях лежит в одной таблице, а заказы — в другой. Это уменьшает дублирование и делает структуру аккуратной.
⚠️ Минус такого подхода — для получения данных часто приходится делать сложные JOIN-запросы, которые могут работать медленно на больших объемах. Тогда используют денормализацию, то есть часть данных хранят в нескольких местах. Например:
🔘 имя пользователя — в таблице заказов
🔘 количество комментариев — в таблице постов
🔘 информацию о товаре — внутри записи заказа
Такой подход позволяет значительно быстрее выполнять многие запросы.
🧠 Денормализация — это компромисс между красивой структурой базы и производительностью системы.
Ставьте реакцию:
🔥 — если уже сталкивались с понятием денормализации
👀 — если узнали о нем впервые
#словонедели #sql
Такой подход позволяет значительно быстрее выполнять многие запросы.
🧠 Денормализация — это компромисс между красивой структурой базы и производительностью системы.
Ставьте реакцию:
🔥 — если уже сталкивались с понятием денормализации
👀 — если узнали о нем впервые
#словонедели #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
👀145🔥48❤7 4⚡2✍2❤🔥1👨💻1 1
Друзья, сегодня расскажем про Redis. 😤
📌 Redis (Remote Dictionary Server) — это нереляционная система управления базами данных (СУБД), работающая со структурами типа ключ — значение.
⚡️ Главная особенность Redis в том, что он хранит данные в оперативной памяти, благодаря чему обеспечивает очень быстрый доступ к ним.
Для чего обычно используют Redis:
⏺ кэширование часто запрашиваемых данных
⏺ хранение сессий пользователей
⏺ обработка очередей задач
⏺ временное хранение данных с быстрым доступом
⏺ хранение счетчиков и статистики в реальном времени
⏺ другие задачи, требующие высокой скорости работы с данными
⭐️ Redis позволяет разгрузить основную базу данных и ускорить работу приложения за счет хранения часто используемой информации в оперативной памяти.
Ставьте реакцию:
🔥 — если уже слышали про Redis
👀 — если узнали о нем впервые
#полезныйматериал #sql
Для чего обычно используют Redis:
Ставьте реакцию:
🔥 — если уже слышали про Redis
👀 — если узнали о нем впервые
#полезныйматериал #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥118👀102❤7🤝3💋2✍1🆒1
Друзья, что-то давненько не вспоминали с вами об SQL и базах данных. 😉
📌 В одном из прошлых постов мы рассказывали про обобщенные табличные выражения. Сегодня хотим поговорить об оптимизации запросов с CTE.
При выполнении SQL-запросов, включающих CTE, СУБД может использовать одну из двух стратегий:
1⃣
2⃣
👀 Мы можем сами задать необходимую стратегию, указав один из двух комментариев после оператора
🟡
🟡
В приведенном ниже запросе используется стратегия
В приведенном ниже запросе используется стратегия
⚠️ Если комментарий будет указан не после оператора
Ставьте реакцию:
🔥 — если знали о существовании этих стратегий
👀 — если узнали о них впервые
#sql #базыданных
При выполнении SQL-запросов, включающих CTE, СУБД может использовать одну из двух стратегий:
MERGE — СУБД объединяет CTE с основным запросом и выполняет это CTE каждый раз при выполнении основного запроса. MATERIALIZE — СУБД выполняет CTE один раз и временно сохраняет полученный результат в оперативной памяти. Такая оптимизация позволяет СУБД сразу обращаться к данным, полученным с помощью CTE, не выполняя соответствующий запрос многократно.SELECT основного запроса перед перечислением извлекаемых полей:/*+ MERGE(<имя CTE>) */ — выбор стратегии MERGE /*+ NO_MERGE(<имя CTE>) */ — выбор стратегии MATERIALIZEВ приведенном ниже запросе используется стратегия
MERGE:WITH CTE AS (…)
SELECT /*+ MERGE(<имя CTE>) */ *
FROM CTE;
В приведенном ниже запросе используется стратегия
MATERIALIZE:WITH CTE AS (…)
SELECT /*+ NO_MERGE(<имя CTE>) */ *
FROM CTE;
SELECT основного запроса, а где-либо в другом месте (в том числе после перечисления полей или между ними), соответствующая стратегия автоматически применяться не будет. В этом случае СУБД будет сама определять необходимую стратегию так же, как и в ситуации, если бы комментарий не был указан.Ставьте реакцию:
🔥 — если знали о существовании этих стратегий
👀 — если узнали о них впервые
#sql #базыданных
Please open Telegram to view this post
VIEW IN TELEGRAM
👀76🔥16 8❤6👌1💘1