Изучаем SQL с нуля По всем вопросам @valentin_mascarov Реклама на бирже - https://telega.in/c/SQl_and_DB_Learning № 4974313625
Хотите дорасти до уверенного Middle Data Engineer, но текущего стека не хватает?
На курсе «Инженер данных» от karpov.courses опытные специалисты из VK, Яндекс Go, Sbermarket и Ozon помогут дополнить ваш арсенал современными инструментами для хранения и обработки больших данных.
За 5 месяцев вы научитесь:
● Работать с реляционными и MPP базами данных
● Автоматизировать ETL-пайплайны
● Проектировать традиционные и облачные хранилища
● Применять ML-модели на больших данных
● Строить дашборды для мониторинга DWH платформы
Здесь вас ждут интересные проекты и настоящая инфраструктура: Greenplum, Hadoop, Kubernetes, Spark, Hive, Kafka, Airflow, Tableau.
По итогам обучения вы станете крепким Middle специалистом с широким набором прикладных навыков, а наш HR доведёт вас до оффера в хорошую компанию.
Курс стартует 11 мая, учитесь уже сейчас, так как с 15 мая цена вырастет!
#вопросы_с_собеседований
Что не так с запросом на фото? Исправьте его, если нужно.
В тексте обнаружено неверное выражение BillingYear в условии WHERE. Несмотря на то, что оно было определено как алиас в выборке SELECT перед WHERE, логический порядок обработки условий отличается. Как известно, в T-SQL операторы выполняются в другом порядке, что может привести к неожиданным результатам. Чтобы избежать подобных ошибок, программисты должны учитывать эту особенность при написании кода.
Правильный запрос будет выглядеть так:
SELECT Id, YEAR(BillingDate) AS BillingYear
FROM Invoices
WHERE YEAR(BillingDate) >= 2010;
Шпаргалка по всем базовым командам SQL с пояснением и примерами
Читать полностью…#Вопросы_с_собеседования
❓Почему данный код выведет ошибку?
Код выдаст ошибку, так как в данном случае alias нельзя использовать в операторе WHERE.
Порядок выполнения упомянутого SELECT запроса следующий:
1. FROM
2. WHERE
3. SELECT
Соответственно при выполнении команды WHERE, alias, задаваемый в SELECT еще неизвестен.
Для PostgreSQL или MySQL данную проблему можно решить, например, следующим образом:
WITH ct AS (
SELECT id, name, CONCAT ('EU:', city) AS city_m
FROM customers
)
SELECT ct.*
FROM ct
WHERE ct.city_m = 'EU:Oslo';
#Вопросы_с_собеседования
❓Какие ограничения на целостность данных существуют в SQL?PRIMARY KEY
- набор полей (1 или более), значения которых образуют уникальную комбинацию и используются для однозначной идентификации записи в таблице. Для таблицы может быть создано только одно такое ограничение. Данное ограничение используется для обеспечения целостности сущности, которая описана таблицей.CHECK
используется для ограничения множества значений, которые могут быть помещены в данный столбец. Это ограничение используется для обеспечения целостности предметной области, которую описывают таблицы в базе.UNIQUE
обеспечивает отсутствие дубликатов в столбце или наборе столбцов.FOREIGN KEY
защищает от действий, которые могут нарушить связи между таблицами. FOREIGN KEY
в одной таблице указывает на PRIMARY KEY
в другой. Поэтому данное ограничение нацелено на то, чтобы не было записей FOREIGN KEY
, которым не отвечают записи PRIMARY KEY
.
#Вопросы_с_собеседования
❓Выберите из таблицы workers все записи за вторник
Ответ на картинке.
Функция CONCAT_WS()
Функция CONCAT_WS() добавляет два или более выражений вместе с разделителем.
Синтаксис:
CONCAT_WS(separator, expression1, expression2, expression3,...).
В чем разница между функциями RANK() и DENSE_RANK()?
Единственная разница между функциями RANK() и DENSE_RANK() заключается в случаях, когда несколько значений в наборе имеют одинаковый ранг.
В таких случаях RANK() будет назначать непоследовательные «ранги» значениям в наборе.
Тогда как DENSE_RANK() будет назначать последовательные ранги значениям в наборе.
Например, рассмотрим набор
{25, 25, 50, 75, 75, 100}.
Для такого набора RANK() вернет
{1, 1, 3, 4, 4, 6} (обратите внимание, что значения 2 и 5 пропущены), тогда как DENSE_RANK() вернет
{1, 1, 2, 3, 3, 4}.
#Вопросы_с_собеседования
❓Выберите из таблицы workers все записи за следующие дни любого месяца: 1, 7, 11, 12, 15, 19, 21, 29
Ответ на картинке.
#Вопросы_с_собеседования
❓В чем разница между командами Delete, Truncate и Drop?
• Команда Delete — это команда DML , он используется для удаления строк из таблицы. Его можно откатить.
• Truncate — это команда DDL, она используется для удаления всех строк из таблицы и освобождения пространства, содержащего таблицу. Ее нельзя откатить.
• Drop — это команда DDL, она удаляет все данные вместе со структурой таблицы (в отличие от команды truncate, которая удаляет только строки). Все строки, индексы и привилегии таблиц также будут удалены.
#Вопросы_с_собеседования
❓Для каких числовых типов недопустимо использовать операции сложения/вычитания?
Ответ:
В качестве операндов операций сложения и вычитания нельзя использовать числовой тип BIT. BIT - целочисленный тип данных, который может принимать значения 1, 0 или NULL.
Полезные TreeMap визуализации для MSSQL, Postgres и MySQL
Смотреть статью
SQL-инъекции для самых маленьких. Часть 3
В статье вы узнаете, как можно собирать информацию о БД путем применения инъекций и затронем тему слепых SQL-инъекций.
Смотреть статью
Как оператор GROUP BY обрабатывает поля с NULL?
Учитывая, что NULL в SQL — просто отсутствие значения, то все значения NULL при группировке попадают в одну группу. Например, пусть есть таблица:
name score
Alex 5
Sam 1
Sam 11
NULL 4
NULL 3
Тогда запрос
SELECT name, SUM (score) AS sc
FROM table
GROUP BY name;
выдаст:
name sc
Alex 5
Sam 12
NULL 7
Что вы знаете о функции OVERLAY() в PostgreSQL?
Функция OVERLAY()
заменяет часть строки на другую подстроку, начиная с заданной позиции:
OVERLAY(main_string PLACING replacing_string FROM int [FOR int]);
строка, которую изменяем.
main_string - replacing_string - подстрока,
которую вставляем в main_string.
FROM int - позиция, с которой начнётся замена.
FOR int - количество заменяемых символов. Необязательно.
Например: SELECT OVERLAY('who
Pro' PLACING 'SQL' FROM 1);
Один день из жизни телеграмщика
Солнечный день на Бали. 8 утра. В России все идут на работу, он лежит в кровати. Встал в 10. Позавтракал. Берет телефон. Продаёт 2 рекламы, 140 тысяч пришло на карту. Идет кайфовать на сёрфинг.
Рабочий ли это день? Да. Загруженный? Совсем нет. Чтобы работать на таком же релаксе, начните читать «Бизнес в Telegram».
Роман протестировал все денежные тематики в телеграме. Теперь простым языком рассказывает, как создать свой канал и начать зарабатывать от 150.000 в месяц.
Здесь о самой денежной нише в интернете, читайте закреп: @RomanBlog
Как создать временную таблицу в sql запросе
Для создания временной таблицы используется ключевое слово TEMPORARY
в команде CREATE TABLE:
CREATE TEMPORARY TABLE название_таблицы
Удобно создавать временную таблицу на выборке из другой таблицы:CREATE TEMPORARY TABLE customer_temp SELECT * FROM customer;
🖥 Как в sql посчитать количество повторяющихся значений
Можно попробовать использовать функцию COUNT() в сочетании с оператором GROUP BY.
Предположим, у нас есть таблица "orders" с колонками "customer_name" и "order_date", и мы хотим посчитать, сколько заказов было сделано каждым клиентом. Мы можем написать следующий SQL-запрос:SELECT customer_name, COUNT(*) as order_count
FROM orders
GROUP BY customer_name
Этот запрос выберет все уникальные значения из колонки "customer_name" в таблице "orders" и подсчитает количество строк, связанных с каждым уникальным значением. Результатом запроса будет таблица со столбцами "customer_name" и "order_count", в которой каждая строка будет показывать клиента и количество его заказов.
#Вопросы_с_собеседования
❓Выберите все записи, где первая буква City начинается с любой буквы от "a" до "f"
Ответ на картинке.
Старый баг в MySQL. Детективная история
Смотреть статью
Что вы знаете о функции STUFF(Transact-SQL)?
Функция STUFF вставляет одну строку в другую, начиная с указанной позиции. При этом в исходной строке, начиная с указанной позиции, удаляются символы в количестве, определенном в параметре Length.
Другими словами STUFF вставляет одну строку в другую. Она удаляет указанное количество символов первой строки в начальной позиции и вставляет на их место вторую строку.
Синтаксис:
STUFF(String1, Position, Length, String2)Здесь String1
— это строка, которая будет перезаписана. Position определяет стартовую позицию для перезаписи строки. Length
— это длина подстроки, которая будет удалена из исходной строки. String2
— это строка, которая будет вставлена в String1.
Пример:SELECT STUFF(‘SQL Tutorial’,1,3,’Python’)
В результате работы функции «SQL Tutorial» превратится в «Python Tutorial».
Результат:Python Tutorial
Количество вхождений строки в поле в MySQL
Есть таблица items
со следующими данными:id desc
1 val test test val
2 val test
3 test test test
4 valvalvalvalval
Напишите MySQL запрос, который подсчитает количество вхождений значения ‘val
‘ для каждого desc
.
Ожидаемый результат:2
1
0
5
Решение:SELECT
ROUND (
(LENGTH (desc) - LENGTH (
REPLACE (desc, ‘val‘,‘‘)
)) / LENGTH(‘val‘)) AS c
FROM items;
LIMIT
При помощи LIMIT можно указать максимальное число строк, которые должны попасть в результат.
Это бывает полезно при работе с большими наборами данных. Если данных много, запрос может обрабатываться слишком долго. Но когда будет достигнут лимит результатов, обработка прекратится.
Какая ошибка в этом запросе?
UPDATE books SET sales_1999 >
(SELECT SUM(qty * price)
FROM sales
WHERE sales.book_id = bооks.id
AND salеs.date BETWEEN '01/01/1999' AND '12/31/1999')
Вы не можете использовать арифметические операторы для функции SUM() (например SUM(qty * price))
Ответ
Следует использовать знак (=) для подзапроса
#Вопросы_с_собеседования
❓Выберите из таблицы workers записи с id равным 1, 2, 3, 7, 9, и логином, равным 'user', 'admin', 'ivan' и зарплатой больше 300
Ответ на картинке.
Какая разница между TRUNCATE TABLE table_name и DELETE FROM table_name?
Фактически обе эти команды вызовут удаление всех строк из таблицы под названием table_name, но вот произойдет это совсем по-разному:
1. При вызове команды TRUNCATE таблица полностью сбрасывается и создается снова, в то время как команда DELETE удаляет каждую строку таблицы по отдельности. Из-за этого TRUNCATE отрабатывает значительно быстрее.
2. Как следствие первого пункта, команда TRUNCATE не вызывает срабатывание триггеров и правил внешних ключей, то есть, очищая таблицу таким способом, можно не бояться каскадного удаления или изменения данных в других таблицах.
3. В отличие от DELETE команда TRUNCATE не транзакционная. То есть, если в момент ее вызова, таблица table_name будет заблокирована какой-либо транзакцией — может возникнуть ошибка.
#Вопросы_с_собеседования
❓При выборке из таблицы workers получите первые 5 символов поля description
Ответ на картинке.
#Вопросы_с_собеседования
❓При выборке из таблицы workers прибавьте к дате 3 дня и отнимите 2 часа
Ответ на картинке.
История учебы Васи и конечный автомат на SQL
Смотреть статью
Создание отношений (связей) между таблицами
Смотреть видео