Рассмотрение описаний должностных обязанностей, где требуется "расширенный SQL". Я могу писать базовые запросы, как и любой, и работал с базами данных MySQL в профессиональной среде, но что бы я мог получить с этими заданиями, если бы меня наняли? Каковы примеры расширенного SQL и где я по шкале SQL noob для SQL master?
Что такое "расширенный" SQL?
Ответ 1
Я думаю, что это лучше всего показано на примере. Если вы чувствуете, что можете быстро написать следующий оператор SQL с небольшим/отсутствующим эталонным материалом, я бы предположил, что вы, вероятно, отвечаете их требованиям Advanced SQL:
DECLARE @date DATETIME
SELECT @date = '10/31/09'
SELECT
t1.EmpName,
t1.Region,
t1.TourStartDate,
t1.TourEndDate,
t1.FOrdDate,
FOrdType = MAX(CASE WHEN o.OrderDate = t1.FOrdDate THEN o.OrderType ELSE NULL END),
FOrdTotal = MAX(CASE WHEN o.OrderDate = t1.FOrdDate THEN o.OrderTotal ELSE NULL END),
t1.LOrdDate,
LOrdType = MAX(CASE WHEN o.OrderDate = t1.LOrdDate THEN o.OrderType ELSE NULL END),
LOrdTotal = MAX(CASE WHEN o.OrderDate = t1.LOrdDate THEN o.OrderTotal ELSE NULL END)
FROM
(--Derived table t1 returns the tourdates, and the order dates
SELECT
e.EmpId,
e.EmpName,
et.Region,
et.TourStartDate,
et.TourEndDate,
FOrdDate = MIN(o.OrderDate),
LOrdDate = MAX(o.OrderDate)
FROM #Employees e INNER JOIN #EmpTours et
ON e.EmpId = et.EmpId INNER JOIN #Orders o
ON e.EmpId = o.EmpId
WHERE et.TourStartDate <= @date
AND (et.TourEndDate > = @date OR et.TourEndDate IS NULL)
AND o.OrderDate BETWEEN et.TourStartDate AND @date
GROUP BY e.EmpId,e.EmpName,et.Region,et.TourStartDate,et.TourEndDate
) t1 INNER JOIN #Orders o
ON t1.EmpId = o.EmpId
AND (t1.FOrdDate = o.OrderDate OR t1.LOrdDate = o.OrderDate)
GROUP BY t1.EmpName,t1.Region,t1.TourStartDate,t1.TourEndDate,t1.FOrdDate,t1.LOrdDate
И, честно говоря, это относительно простой запрос - только некоторые внутренние соединения и подзапрос, а также несколько общих ключевых слов (max, min, case).
Ответ 2
Основы
-
SELECT
столбцы из таблицы - Агрегаты Часть 1:
COUNT
,SUM
,MAX
/MIN
- Агрегаты Часть 2:
DISTINCT
,GROUP BY
,HAVING
Intermediate
-
JOIN
s, синтаксис ANSI-89 и ANSI-92 -
UNION
vsUNION ALL
-
NULL
обработка:COALESCE
и обработка Native Native - Подзапросы:
IN
,EXISTS
и встроенные представления - Подзапросы: коррелированные
-
WITH
Синтаксис: Подзапрос Факторинг /CTE - представления
Дополнительные темы
- Функции, хранимые процедуры, пакеты
- Сводные данные: синтаксис CASE и PIVOT
- Иерархические запросы
- Курсоры: неявные и явные
- Триггеры
- Динамический SQL
- Материализованные представления
- Оптимизация запросов: индексы
- Оптимизация запросов: объяснение планов
- Оптимизация запросов: профилирование
- Моделирование данных: нормальные формы, от 1 до 3
- Моделирование данных: первичный и внешний ключи
- Моделирование данных: ограничения таблиц
- Моделирование данных: Link/Corrollary Tables
- Поиск полного текста
- XML
- Уровни изоляции
- Диаграммы связей сущностей (ERD), логические и физические
- Сделки:
COMMIT
,ROLLBACK
, Обработка ошибок
Ответ 3
Остальная часть списка открытия задания может предоставить контекст, чтобы лучше понять, что может включать "Advanced SQL"
.
Я не согласен с комментариями и ответами, указывающими, что понимание JOIN и агрегированных запросов - это "продвинутые" навыки; Боюсь, многие работодатели считают это довольно простым. Здесь грубое предположение, что может означать "Продвинутый".
За последние несколько лет в домене RDBMS появилось "ужасное" много нового!
Требование "Advanced SQL", вероятно, намекает на знание и, возможно, знание нескольких новых концепций, таких как:
- CTE (общие выражения таблицы)
- UDF (пользовательские функции)
- Полнотекстовые расширения поиска/интеграции
- настройка производительности с использованием новых схем разбиения, отфильтрованные индексы, разреженные столбцы...)
- новые типы данных (например: ГИС/пространственные или иерархические)
- Поддержка/интеграция XML
- LINQ
- и еще несколько... (Кстати, приведенный выше список несколько ориентирован на MSSQL, но аналогичная эволюция наблюдается на большинстве других платформ СУБД).
Несмотря на то, что поддержка (и минусы) новых функций - важная задача для любого "продвинутого SQL" практикующего, старые "продвинутые основы", вероятно, также считается частью "продвинутого" :
- триггеры и хранимые процедуры на больших
- Курсоры (когда использовать, как избежать...)
- опыт проектирования: определение таблиц, индексация, тип индексов
- опыт настройки производительности в целом
- оптимизация запросов (чтение планов запросов, знание того, что по сути медленное и т.д.).
- Процедурный SQL
- ...
Примечание: вышеупомянутое основное внимание уделяется навыкам, связанным с программированием/ведущей ролью. "Advanced SQL" также может ссылаться на опыт с административными ролями (репликация, резервное копирование, макет оборудования, управление пользователями...). Подумайте об этом, серьезный программист должен быть хорошо знаком с такими практиками.
Изменить: LuckyLindy опубликовал комментарий, который я нашел довольно проницательным. Это предполагает, что "Продвинутый" может эффективно иметь другую цель, чем подразумевать справедливый экспертный уровень в большинстве категорий, перечисленных выше...
Я повторяю этот комментарий здесь, чтобы сделать его более заметным.
Я думаю, что многие компании публикуют Advanced SQL, потому что они устали от того, чтобы кто-то сказал: "Я эксперт SQL", и мне сложно собрать 3 внешних внешних соединения. Я публикую подобные материалы в проводках работы, и мое ожидание просто заключается в том, что кандидату не нужно постоянно обращаться ко мне за помощью в написании SQL. (комментарий LuckyLindy)
Ответ 4
Я бы ожидал:
- создание и использование хранимых процедур
- объединяется (внутреннее и внешнее) и как правильно использовать GROUP BY
- оценка/настройка производительности
- знание эффективных (и неэффективных) способов выполнения действий в запросах (понимание того, как определенные вещи могут влиять на производительность, например, использование функций в предложениях WHERE)
- динамический SQL и знание курсоров (и IMO в несколько раз они должны использоваться)
- понимание дизайна схемы, индексации и ссылочной целостности
Ответ 5
Откажитесь от SQL для Smarties. Я думал, что я тоже хорошо разбираюсь в SQL, пока не прочитаю эту книгу... Входит в тонны глубины, рассказывает о вещах, которые я не видел в другом месте (разница в IE между 3'-й и 4-й нормальной формой, Boyce Codd Normal Форма и т.д.)...
Ответ 6
Некоторые "расширенные" функции
- рекурсивные запросы
- функции окна/ранжирования
- pivot и univot
- настройка производительности
Ответ 7
SELECT ... HAVING ...
- хорошее начало. Не многие разработчики, похоже, понимают, как их использовать.
Ответ 8
Я предполагаю, что подзапросы и PIVOT будут квалифицироваться, а также несколько объединений, союзов и т.п.
Ответ 9
Настройка производительности, создание индексов, хранимых процедур и т.д.
"Продвинутый" означает что-то другое для всех. Я бы предположил, что этот тип вещей означает что-то другое для каждого плаката.
Ответ 10
Когда вы видите, что они указаны в требованиях, они, как правило, включают:
- представления
- Сохраненные процедуры
- Пользовательские функции
- Триггеры
- иногда Курсоры
Внутренние и внешние соединения являются обязательными, но я редко когда-либо видел это в требованиях. И это удивительно, как многие так называемые профессионалы db не могут получить голову вокруг простого внешнего соединения.
Ответ 11
На моей предыдущей работе у нас был технический тест, на который всех кандидатов просили сидеть. 10 вопросов, заняло около часа. Тем не менее, несмотря на всю честность, 90% неудач можно было бы отстранить, потому что они не могли написать инструкцию INNER JOIN. Даже внешний.
Я бы счел необходимым предварительное условие для любого описания задания с использованием SQL и оставил бы себя в покое до тех пор, пока это не будет освоено. Оттуда, поговори с ними - любая дополнительная информация о том, что они на самом деле ищут, в худшем случае, будет полезным списком вещей, чтобы учиться как часть вашего профессионального развития.
Ответ 12
"Расширенный SQL" - это противоречие с терминами.