SQL и Базы Данных – Telegram
SQL и Базы Данных
4.19K subscribers
165 photos
5 videos
183 links
Задачи по базам данных и SQL

Основы языка SQL, задачи и решения к ним.

Админ: @anothertechrock
Download Telegram
Трюк дня. Объединить значения из нескольких строк таблицы в одну, группируя по определённому параметру.

Например, есть таблица:

id name value
1 A 4
1 B 8
2 C 9

В результате нужно получить следующее:

id column
1 A:4, B:8
2 C:9

В SQL Server 2017, Azure можно использовать функцию STRING_AGG:

SELECT
id,
STRING_AGG(
CONCAT(name,’:’,[value], ‘, ‘)
FROM table
GROUP BY id

#tips
🐍🐬 Python и MySQL: Как соединить их?

Большинство приложений в той или иной форме взаимодействует с данными. Поэтому языки программирования (Python не исключение), предоставляют инструменты хранения источников данных и доступа к ним. MySQL — одна из самых популярных систем управления базами данных (СУБД). В прошлом году она заняла второе место после СУБД Oracle в рейтинге баз данных.

Разбираться

#python #mysql
Что Такое MySQL: Объяснение MySQL Для Начинающих

1. Что такое MySQL?
2. Модель клиент-сервер
3. SQL
4. Как работает MySQL?
5. Почему MySQL так популярен?
6. ...

Разобраться вглубь

#mysql
Трюк дня. COALESCE() для перезаписи NULL

При помощи функции COALESCE() можно перезаписать NULL на другое значение:

SELECT
id,
null_var,
COALESCE(null_var, 'missing') AS recode_null_var
FROM
current_table
ORDER BY id

Запрос вернёт значение ‘missing‘ для всех строк таблицы, где null_var IS NULL

#tips
Вопрос с собеседования.

Опишите различные типы индексов.

P.S ответ вечером

#собес
Есть три типа индексов, а именно:

1) Уникальный индекс (Unique Index): этот индекс не позволяет полю иметь повторяющиеся значения, если столбец индексируется уникально. Если первичный ключ определен, уникальный индекс может быть применен автоматически.

2) Кластеризованный индекс (Clustered Index): этот индекс меняет физический порядок таблицы и выполняет поиск на основе значений ключа. Каждая таблица может иметь только один кластеризованный индекс.

3) Некластеризованный индекс (Non-Clustered Index): не изменяет физический порядок таблицы и поддерживает логический порядок данных. Каждая таблица может иметь много некластеризованных индексов.
SQL for Data Analysis

Автор: Cathy Tanimura
Год издания: 2021

#sql #english
Что такое Self JOIN?

#вопросы_с_собеседований

Ответ завтра.
Self JOIN - это выражение используется для того, чтобы таблица объединилась сама с собой, словно это две разные таблицы. Чтобы такое реализовать, одна из таких «таблиц» временно переименовывается.

Например, следующий SQL-запрос объединяет клиентов из одного города:

SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
Друзья, мы бы хотели провести кодинг-марафон по SQL по аналогии с этим марафоном.

Напишите ваше мнение и кто будет участвовать поставьте плюс в комментариях. Также приветствуются пожелания по темам задач.

Если кто-то готов помочь в администрировании марафона и канала в целом, напишите также в комментариях.
Трюк дня. Игнорирование одиночной кавычки в SQL Server.

Рассмотрим ситуацию, когда в таблицу требуется вставить текст, содержащий одиночную кавычку, например: It‘s Friday today.

Запрос
INSERT INTO table VALUES (‘It’s Friday today.’) выдаст ошибку.

Решение #1: продублировать одиночную кавычку в тексте:

INSERT INTO table VALUES (‘It’’s Friday today.’)

Решение #2: использовать char(39):

INSERT INTO table VALUES (‘It’ + char (39) + ’s Friday today.’)

А какие еще решения данной задачи вы знаете?

#tips
#вопрос1

В чем разница между Full Outer Join и Cross Join?

#вопросы_с_собеседований
#вопрос7

Почему данный код выведет ошибку?

SELECT id, name, CONCAT ('EU:', city) AS city_m
FROM customers
WHERE city_m = 'EU:Oslo';

#вопросы #собеседование
Ответ на #вопрос7

Код выдаст ошибку, так как в данном случае 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

Вы - разработчик и подумываете о специализации в сфере MS SQL серверов? Пройдите тест и проверьте, готовы ли вы вступить на этот путь!

Количество вопросов: 20.

После удачного прохождения теста с вами свяжется менеджер курсов от компании Otus.
Трюк дня. Найти максимальное значение из двух колонок таблицы

Например, есть таблица:

customer value_1 value_2
Alex 5 18
Sam 1 19
Sam 3 2

В результате нужно получить следующее:

customer max
Alex 18
Sam 19
Sam 3


В PostgreSQL, MySQL и Oracle можно воспользоваться функцией GREATEST:

SELECT customer, GREATEST (value_1, value_2) FROM table;


В SQL Server подобной функции нет, поэтому можно решить эту задачу так:

SELECT customer, MAX (x.combined_val) AS greatest
FROM table AS u
CROSS APPLY (SELECT u.value_1 UNION ALL SELECT u.value_2) AS x(combined_val)
GROUP BY customer;

#tips
1