SQL Pro
5.07K subscribers
142 photos
2 videos
10 files
127 links
SQL Pro - всё об SQL
Реклама: @anothertechrock

Контент канала:
1. Разбор вопросов с собеседований
2. Трюки SQL
3. Видео
4. Тесты
5. Задачи на логику
6. Юмор
Download Telegram
Какой из перечисленных ниже PostgreSQL запросов вернет результат как на картинке выше?
Anonymous Quiz
18%
VALUES ('Blue'), ('Red'), ('Green');
26%
SELECT 'Blue', 'Red', 'Green';
22%
SELECT ['Blue', 'Red', 'Green'];
21%
Ничего из перечисленного
13%
Посмотреть ответы
#вопрос11

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

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

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

#вопросы #собеседование
👍1
Сколько записей вернет следующий PostgreSQL запрос:
VALUES (11), (22), (33) INTERSECT VALUES (55), (33), (33);
Anonymous Quiz
34%
1
23%
2
21%
3
6%
Ничего из перечисленного
17%
Посмотреть ответы
#вопрос12

Таблица employee имеет две колонки: emp_name и emp_id. Какой результат возвратит следующий SQL запрос:

SELECT emp_name FROM employee ORDER BY 2 DESC;

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

ORDER BY 2 сработает только в том случае, когда в SELECT указаны по крайней мере две колонки.

В запросе выше, даже с учетом того, что таблица employee содержит 2 колонки, выбирается только 1 колонка. Поэтому такой запрос будет выдавать ошибку.

#вопросы #собеседование
Задача на логику.

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

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

Ответ: 208

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

#логика
Как получить значение текущего года в PostgreSQL?
Anonymous Quiz
6%
SELECT NOW();
42%
SELECT YEAR (NOW());
31%
SELECT DATE_PART ('year', NOW());
13%
SELECT YEAR FROM DATE;
9%
Посмотреть ответы
#вопрос13

Есть две таблицы как на картинке выше: envelope и docs. Расскажите, какой результат возвратит следующий MySQL запрос и обоснуйте свой ответ:

UPDATE docs INNER JOIN envelope ON envelope.id = docs.idnum
SET docs.doctext = docs.pageseq
WHERE EXISTS (
SELECT 1 FROM envelope
WHERE id = envelope.id
);
SELECT * FROM docs;

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

Результат будет выглядеть так:

idnum pageseq doctext
1 5 5
2 6 6
NULL 0 NULL

Оператор EXISTS – это отвлекающий маневр. Тут всегда будет true, т. к. id не является членом таблицы envelope. Таким образом, id будет сравнивать себя с самим собой.

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

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

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

#sql

Читать статью
Трюк дня. Как сделать Case Sensitive сравнение в MySQL

Есть таблица enterprise, созданная следующим MySQL запросом:
CREATE TABLE enterprise (company TEXT);

И в столбце company содержатся следующие значения:
• sPg
• SPG
• spg

Напишите MySQL-запрос, который выберет только значения = ‘SPG‘.

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

#tips
Трюк дня. Как сделать Case Sensitive сравнение в MySQL. Решение

Небинарные строки (CHAR, VARCHAR, TEXT) в MySQL по умолчанию не чувствительны к регистру. Поэтому запрос SELECT * FROM enterprise WHERE company = ‘SPG‘ выведет все три строки.

Для вывода только одной записи с ‘SPG’ существуют следующие решения:

1. Приведение столбца к типу BINARY (т.к. тип BINARY чувствителен к регистру):

SELECT * FROM enterprise WHERE BINARY company = ‘SPG‘;

2. Выбор чувствительного к регистру набора символов с помощью COLLATE:

SELECT * FROM enterprise WHERE company COLLATE utf8mb4_0900_as_cs = ‘SPG‘;

Детальную документацию смотрите здесь.

#tips
Есть таблица EMPLOYEES (code, first_name, last_name, department_id);

Какой из следующих запросов отобразит всех работников, у которых вторая буква в имени - ‘i‘?
Anonymous Quiz
71%
SELECT first_name FROM employees WHERE first_name LIKE ‘_i%‘;
7%
SELECT first_name FROM employees WHERE first_name LIKE ‘%i_‘;
13%
SELECT first_name FROM employees WHERE first_name LIKE ‘%i%‘;
6%
SELECT first_name FROM employees WHERE first_name LIKE ‘_i_‘;
3%
Посмотреть ответы
#вопрос14

Что выведет приведенный запрос, если в таблице employee 10 записей?

BEGIN;
TRUNCATE TABLE employee;
ROLLBACK;
SELECT * FROM employee;

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

Этот запрос вернет 10 записей, т. к. TRUNCATE выполняется в транзакции.

#вопросы #собеседование
Трюк дня. MySQL LIKE IN()

Напишите запрос, который выберет из таблицы user все значения id, содержащие в себе 114, 23 и 868.

Запрос должен быть короче, чем следующий запрос:

SELECT * FROM user t
WHERE t.id LIKE '%1
14%'
OR t.id LIKE '%2
3%'
OR t.id LIKE '%868%';

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

#tips