O que é SQL" avançado"?

olhando para uma descrição de funções onde "SQL avançado" é um requisito. Eu posso escrever consultas básicas, bem como qualquer um, e ter trabalhado com bases de dados MySQL em um ambiente profissional, mas o que eu estaria me metendo com esses trabalhos, se eu fosse contratado? Quais são os exemplos de SQL avançado e onde estou ao longo da escala de SQL noob para SQL master?

Author: DarenW, 2010-01-13

12 answers

Acho que é melhor destacar com um exemplo. Se você acha que pode escrever a seguinte declaração SQL rapidamente com pouco / nenhum material de referência, então eu acho que você provavelmente atende o requisito avançado de 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

(origem da Pesquisa)

E para ser honesto, essa é uma consulta relativamente simples - apenas algumas ligações internas e uma sub-pesquisa, juntamente com algumas palavras-chave comuns (max, min, case).
 10
Author: Beep beep, 2010-01-13 05:07:08

Noções básicas


  1. SELECTcolunas de um quadro
  2. Parte Dos Agregados 1: COUNT, SUM, MAX/MIN
  3. Parte Dos Agregados 2: DISTINCT, GROUP BY, HAVING

Intermédio


  1. JOIN s, ANSI-89 e sintaxe ANSI-92
  2. UNION vs UNION ALL
  3. NULL manipulação: COALESCE manipulação nula nativa
  4. subcontas: IN, EXISTS, e vistas incorporadas
  5. Subcontingentes: Correlacionados
  6. WITH sintaxe: Subquery Factoring / CTE
  7. vistas

Tópicos Avançados


  • Funções, Procedimentos Armazenados, Pacotes
  • dados pivotantes: sintaxe CASE & PIVOT
  • Consultas Hierárquicas
  • Cursores: implícitos e explícitos
  • gatilhos
  • dinâmica SQL
  • Visões Materializadas
  • Optimização Da Pesquisa: Índices
  • Optimização Da Pesquisa: Explicar Os Planos
  • Optimização Da Pesquisa: Análise De Perfis
  • Modelização De Dados: Formas normais, 1 a 3
  • Modelização De Dados: Chaves Primárias E Estrangeiras
  • Modelização De Dados: Restrições De Tabela
  • Modelização De Dados: Tabelas De Ligação / Corroll
  • Pesquisa De Texto Completo
  • XML
  • Níveis De Isolamento
  • diagramas de relação de entidade (ERDs), lógicos e físicos
  • Transacções: COMMIT, ROLLBACK, Tratamento De Erros
 93
Author: OMG Ponies, 2010-01-13 05:28:13
{[[2]} o resto da lista de abertura de postos de trabalho poderia fornecer um contexto para fornecer uma melhor estimativa do que "Advanced SQL" pode abranger. ([[2]] discordo de comentários e respostas que indicam que a compreensão de consultas de adesão e agregadas são habilidades "avançadas"; muitos empregadores considerariam isso um pouco básico, receio. Aqui está um palpite do que "Avançado" pode significar. Tem havido um monte de coisas novas no domínio RDBMS, nos últimos anos!

O "SQL avançado" o requisito indica provavelmente conhecimentos e, eventualmente, proficiência em vários dos novos conceitos , tais como:

  • Eti (Expressões Comuns Das Tabelas)
  • UDFs (Funções Definidas Pelo Utilizador)
  • extensões de pesquisa de texto completo / integração
  • ajuste de desempenho com novos esquemas de separação, índices filtrados, colunas esparsas...)
  • novos tipos de dados (ex: Sig/espacial ou hierárquico)
  • suporte / integração XML
  • LINQ
  • e alguns mais... (BTW a lista acima é um tanto MSSQL-centric, mas evolução semelhante é observada na maioria das outras plataformas DBMS).
{[[2]} embora mantendo-se a par dos pro (e cons) das novas características é uma tarefa importante para qualquer praticante avançado SQL, {[[9]} Os velhos "fundamentos avançados" são provavelmente também considerados parte do "avançado"":
  • accionadores e procedimentos armazenados em grande quantidade
  • Cursores (quando usar, como evitar ...)
  • competência em matéria de concepção: definições de tabelas, o que indexar, tipo de índices
  • experiência de afinação de desempenho em geral
  • optimização de consultas (ler planos de consultas, saber o que é intrinsecamente lento, etc.)
  • procedimento SQL
  • ...

Nota: O acima referido centra-se nas competências associadas à programação/papel principal. "Advanced SQL" também pode se referir à experiência com funções administrativas (replicação, cópias de segurança, layout de hardware, gerenciamento de usuário...). Agora que penso nisso, um programador sério deve estar um pouco familiarizado com tais práticas também.

Edit : LuckyLindy postou um comentário que eu achei bastante perspicaz. Sugere que" Avançado " pode efectivamente ter um objectivo diferente do que implicar um nível justo para os peritos na maioria das categorias acima enumeradas...
Repito aqui este comentário para lhe dar mais visibilidade.

eu acho que um monte de empresas post SQL avançado porque eles estão cansados de obter alguém que diz " Eu sou um SQL expert " e tem dificuldade em montar uma junção externa de 3 tabelas. Eu postar coisas semelhantes em postos de trabalho e minha expectativa é simplesmente que um candidato não vai precisar constantemente vir até mim para ajudar a escrever SQL. (comentário por LuckyLindy)

 24
Author: mjv, 2010-01-13 06:46:20

Eu esperaria:

  • criação e utilização dos procedimentos armazenados
  • juntas (interiores e exteriores) e como utilizar correctamente o grupo por
  • avaliação/afinação do desempenho
  • conhecimento de formas eficientes (e ineficientes) de fazer as coisas em consultas (compreender como certas coisas podem afectar o desempenho, por exemplo, usando funções em que as cláusulas)
  • SQL dinâmico e conhecimento dos cursores (e IMO as poucas vezes que devem ser utilizados)
  • compreensão do esquema concepção, indexação e integridade referencial
 10
Author: Joe, 2010-01-13 03:24:20

Confira SQL para Smarties . Também achei que era muito bom com o SQL, até ler aquele livro... Vai em toneladas de profundidade, fala sobre coisas que eu não vi em outros lugares (I. E. diferença entre 3'rd e 4'th forma normal, Boyce Codd forma Normal, etc)...

 9
Author: dicroce, 2010-01-13 03:46:40

Algumas características "avançadas"

  • consultas recursivas
  • funções de windowing/ranking
  • pivot e unpivot
  • afinação de desempenho
 2
Author: Scott Weinstein, 2010-01-13 05:03:58

SELECT ... HAVING ... é um bom começo. Poucos desenvolvedores parecem entender como usá-lo.

 1
Author: Ignacio Vazquez-Abrams, 2010-01-13 03:15:05
Suponho que subqueries e pivô se qualificariam, assim como múltiplas uniões, sindicatos e afins.
 1
Author: Robert Harvey, 2010-01-13 03:16:59

Ajuste de desempenho, criação de índices, procedimentos armazenados, etc.

"Avançado" significa algo diferente para todos. Imagino que este tipo de coisa signifique algo diferente para cada poster de emprego.
 1
Author: matt b, 2010-01-13 03:17:38

Quando os vês soletrados em requisitos tendem a incluir:

  • vistas
  • Procedimentos Armazenados
  • Funções Definidas Pelo Utilizador
  • Gatilhos
  • às vezes Cursores

As juntas internas e externas são uma obrigação, mas raramente a vejo mencionada nos requisitos. E é surpreendente quantos supostos profissionais do db não conseguem colocar a cabeça em torno de uma simples junção exterior.

 1
Author: Paul Sasik, 2010-01-13 03:18:11
No meu trabalho anterior, tivemos um teste técnico que todos os candidatos foram convidados a sentar-se. 10 perguntas, demorou cerca de uma hora. Com toda a honestidade, porém, 90% dos fracassos poderiam ser rastreados porque eles não poderiam escrever uma declaração de adesão interior. Nem mesmo um exterior. Eu consideraria isso um pré-requisito para qualquer descrição de trabalho envolvendo SQL e deixaria bem em paz até que isso fosse dominado. De lá, porém, fale com eles-qualquer informação adicional sobre o que eles estão realmente procurando will, na pior das hipóteses, ser uma lista útil de coisas a aprender como parte do seu desenvolvimento profissional.
 1
Author: eftpotrm, 2010-01-14 18:12:40

"SQL avançado" é uma contradição de termos.

 -1
Author: Erwin Smout, 2010-01-14 18:20:02