Что такое "расширенный" SQL?

Рассмотрение описаний должностных обязанностей, где требуется "расширенный SQL". Я могу писать базовые запросы, как и любой, и работал с базами данных MySQL в профессиональной среде, но что бы я мог получить с этими заданиями, если бы меня наняли? Каковы примеры расширенного SQL и где я по шкале SQL noob для SQL master?

Ответ 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


  1. JOIN s, синтаксис ANSI-89 и ANSI-92
  2. UNION vs UNION ALL
  3. NULL обработка: COALESCE и обработка Native Native
  4. Подзапросы: IN, EXISTS и встроенные представления
  5. Подзапросы: коррелированные
  6. WITH Синтаксис: Подзапрос Факторинг /CTE
  7. представления

Дополнительные темы


  • Функции, хранимые процедуры, пакеты
  • Сводные данные: синтаксис 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" - это противоречие с терминами.