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?
12 answers
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
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).
Noções básicas
-
SELECT
colunas de um quadro - Parte Dos Agregados 1:
COUNT
,SUM
,MAX
/MIN
- Parte Dos Agregados 2:
DISTINCT
,GROUP BY
,HAVING
Intermédio
-
JOIN
s, ANSI-89 e sintaxe ANSI-92 -
UNION
vsUNION ALL
-
NULL
manipulação:COALESCE
manipulação nula nativa - subcontas:
IN
,EXISTS
, e vistas incorporadas - Subcontingentes: Correlacionados
-
WITH
sintaxe: Subquery Factoring / CTE - 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
"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).
- 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)
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
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)...
Algumas características "avançadas"
- consultas recursivas
- funções de windowing/ranking
- pivot e unpivot
- afinação de desempenho
SELECT ... HAVING ...
é um bom começo. Poucos desenvolvedores parecem entender como usá-lo.
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.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.
"SQL avançado" é uma contradição de termos.