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

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

Админ: @anothertechrock
Download Telegram
Друзья, мы бы хотели провести кодинг-марафон по 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
#вопрос8

Как оператор GROUP BY обрабатывает поля с NULL?

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

Учитывая, что 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

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

Отработает ли данный запрос или выдаст ошибку:

SELECT field1 FROM table GROUP BY field1, field2;

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

Да, отработает. В SQL допускается перечисление не всех полей в разделе SELECT, если мы группируем по нескольким полям.

В данном примере группировка выполняется по двум полям, а выводится на экран одно поле. А вот наоборот сделать уже нельзя.

#вопросы #собеседование
Статья дня. Как работать с json в Postgresql?

json — самый популярный, на данный момент, формат сериализации данных, состоящий из пар ключ-значение. Является нативным для Javanoscript и поддерживается абсолютно всеми языками программирования.

PostgreSQL нативно поддерживает json с версии 9.2. И до этого у постгри был тип данных для пар ключ-значение, но не настолько гибкий и с куда менее полным функционалом. Сейчас это мощнейший и удобнейший инструмент.

#sql

Читать статью
Практический курс по SQL для начинающих

В этом видеокурсе автор разбирает основы SQL: вы узнаете что такое SQL, научитесь писать SQL-запросы различной сложности. Все эти знания будут легко применимы не только к PostgreSQL, но и к другим СУБД: MySQL, Microsoft SQL Server, Oracle.

0:00:00 Основные концепции: БД, СУБД
0:17:22 Реляционная модель и SQL
0:30:54 Почему стоит выбрать PostgreSQL?
0:36:04 Установка PostgreSQL
0:42:38 Обзор типов данных в PostgreSQL
0:56:48 Как создать базу данных
1:04:22 Как создать таблицу
1:16:03 Отношение "один ко многим"
1:35:18 Отношение "один к одному"
1:44:45 Отношение "многие ко многим"
1:59:12 Создаём БД Northwind

Смотреть это видео на youtube: youtu.be/HVQNxdI6fqY
Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем

В столбце fullname таблицы customers содержится имя, отчество и фамилия в следующем формате: 'name middlename surname'.

Напишите MySQL-запрос, который извлечет name, middlename и surname в отдельные столбцы. Если middlename не существует, то в результате в middlename должен быть NULL.

Например, из 'Alena Igorevna Petrova' должны получиться 3 столбца:
• name = 'Alena',
• middlename = 'Igorevna',
• surname = 'Petrova'.

А из строки 'Jack Powers' получится следующее:
• name = 'Jack',
• middlename = NULL,
• surname = 'Powers'.

Решение будет вечером.

#tips
Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем. Решение.

SELECT
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 1), ' ', -1) AS name,
IF (LENGTH (fullname) - LENGTH (REPLACE (fullname, ' ', '')) > 1,
SUBSTRING_INDEX(SUBSTRING_INDEX (fullname, ' ', 2), ' ', -1), NULL)
AS middlename,
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 3), ' ', -1) AS surname
FROM customers;

#tips
Задача на логику.

Решение будет вечером.

#логика
Решение сегодняшней задачи на логику.

Ответ: 208

муравей = 12
шапка = 8
труба = 4
Итого: (12 + 8 + 4) * 8 + (12 + 4) = 208

#логика
Какой результат вернёт данный запрос(PostgreSQL)?
SELECT (20/25)*25.0;
Anonymous Quiz
9%
25.0
3%
25
5%
125
23%
0
30%
Запрос не выполнится
30%
Узнать ответ