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
Ответ на #вопрос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
Трюк дня. MySQL LIKE IN(). Решение

Используем функцию REGEXP:

SELECT * FROM user t
WHERE t.id REGEXP '114|23|868';


#tips
Какие SQL-операции относятся к командам DDL?
Anonymous Quiz
52%
DROP, ALTER
16%
SELECT, CREATE
4%
ALERT, SELECT
12%
UPDATE, MERGE
17%
Посмотреть ответы