--Вопросы для собеседования:

-- Как найти полные дубли строк? Или как удалить полные дубликаты строк?
-- Для чего нужны представления? А функции? Чем отличаются?
-- В чём плюс процедур? В какие минусы?
-- Чем цикл отличается от курсора?
-- Всегда ли нужны ключи (Праймари кей)? Когла не нужны?
-- Чем отличается кластерный индекс от некластерного?
-- Что такое покрывающий и фильтрованный индекс?
-- Плохо или хорошо большое количество индексов и почему?
-- Колумнстор, что это и как с ним работать? Для чего нужен? Бывают ли там сики (точечные поиски)?
-- Что такое оконные функции, их применение?
-- Что такое рекурсия?
-- Чем APPLY отличается от джойна?
-- EXISTS и NOT EXISTS, применение? Какой план?
-- EXCEPT, INTERSECT, UNION (ALL)
-- Физические виды джойнов?
-- Блокировки это хорошо или плохо?
-- Что такое дедлок? Почему и как возникает?
-- Партиционирование, что это и зачем? Какие плюсы и какие минусы?
-- Статистика, что это, зачем и как с ней работать?
-- Как отследить выполнение запроса? Зачем нужен Профайлер и чем можно заменить?
-- PIVOT и UNPIVOT для чего нужны и можно ли заменить?



--Доп. вопросы:

--1. что вернёт запрос?
--вопрос на внимательность, понимание важности алиасов и какие область вилимости подзапроса (какие столбцы он может использовать)
USE tempdb;

CREATE TABLE #TMP1 
	(a int);
INSERT INTO #TMP1 
	(a)
SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3;

CREATE TABLE #TMP2 
	(b int);
INSERT INTO #TMP2
	(b)
SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6;

SELECT * FROM #TMP1 WHERE a in (select a from #TMP2);

--вернёт все значения из таблицы #TMP1, так как в подзапросе используется её колонка. Ошибки нет (отсутсвие такой колонки в таблице #TMP2), потому что в область видимости подзапроса попадают столбцы основного запроса.


--2. что вернёт запрос?
--вопрос на понимание NULL значения и его использование в равенстве/неравенстве

;WITH CTE AS 
(
SELECT NULL AS b
)
SELECT 1
FROM CTE
WHERE b = COALESCE(NULL, b);

--не вернёт никакого значения, потому что NULL не равен NULL

