pricing create crear sql database

create - sql database azure



¿Qué es el SQL “avanzado”? (12)

Lo esencial

  1. SELECT columnas de una tabla
  2. Agregados Parte 1: COUNT , SUM , MAX / MIN
  3. Agregados Parte 2: DISTINCT , GROUP BY , HAVING

Intermedio

  1. Sintaxis de JOIN s, ANSI-89 y ANSI-92
  2. UNION vs UNION ALL
  3. Manejo NULL : COALESCE y manejo Native NULL
  4. Subconsultas: IN , EXISTS , y vistas en línea
  5. Subconsultas: Correlacionadas
  6. WITH sintaxis: Subconsultas Factoring / CTE
  7. Puntos de vista

Temas avanzados

  • Funciones, Procedimientos Almacenados, Paquetes
  • Datos pivotantes: sintaxis CASE & PIVOT
  • Consultas jerárquicas
  • Cursores: implícitos y explícitos
  • Gatillos
  • SQL dinámico
  • Vistas materializadas
  • Optimización de consultas: Índices
  • Optimización de consultas: explicar los planes
  • Optimización de consultas: perfilado
  • Modelado de datos: formas normales, de 1 a 3
  • Modelado de datos: Claves primarias y externas
  • Modelado de datos: restricciones de tablas
  • Modelado de datos: Link / Corrollary Tables
  • Búsqueda de texto completo
  • XML
  • Niveles de aislamiento
  • Diagramas de relaciones entre entidades (ERD), lógicos y físicos
  • Transacciones: COMMIT , ROLLBACK , Manejo de errores

Mirando las descripciones de un trabajo donde "SQL avanzado" es un requisito. Puedo escribir consultas básicas tan bien como cualquiera, y he trabajado con bases de datos MySQL en un entorno profesional, pero ¿en qué me involucraría con estos trabajos si me contrataran? ¿Cuáles son ejemplos de SQL avanzado y dónde estoy a lo largo de la escala de SQL noob a SQL master?


"SQL avanzado" es una contradicción de términos.


Ajuste del rendimiento, creación de índices, procedimientos almacenados, etc.

"Avanzado" significa algo diferente para todos. Me imagino que este tipo de cosas significa algo diferente para cada cartel de trabajo.


Algunas características "avanzadas"

  • consultas recursivas
  • funciones de ventana / clasificación
  • pivote y unpivot
  • la optimización del rendimiento

Creo que es mejor resaltarlo con un ejemplo. Si cree que podría escribir la siguiente declaración SQL rápidamente con poco o ningún material de referencia, entonces supongo que probablemente cumpla con su requisito de SQL avanzado:

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

(fuente de consulta)

Y para ser honesto, es una consulta relativamente simple: solo algunas combinaciones internas y una subconsulta, junto con algunas palabras clave comunes (max, min, mayúsculas y minúsculas).


Cuando los ves detallados en los requisitos, tienden a incluir:

  • Puntos de vista
  • Procedimientos almacenados
  • Funciones definidas por el usuario
  • Gatillos
  • a veces cursores

Las uniones internas y externas son obligatorias, pero rara vez lo veo mencionado en los requisitos. Y es sorprendente que muchos de los llamados profesionales de db no puedan orientarse en torno a una simple combinación externa.


Echa un vistazo a SQL para Smarties . Pensé que también era bastante bueno con SQL, hasta que leí ese libro ... Entra en toneladas de profundidad, habla de cosas que no he visto en otros lugares (diferencia de IE entre la 3ª y la 4ª forma normal, Boyce Codd Normal Formulario, etc) ...


El resto de la lista de ofertas de trabajo podría proporcionar un contexto para proporcionar una mejor estimación de lo que puede abarcar el "Advanced SQL" .

No estoy de acuerdo con los comentarios y respuestas que indiquen que comprender las consultas de UNIR y agregar son habilidades "avanzadas"; Muchos empleadores considerarían esto bastante básico, me temo. Aquí hay una conjetura aproximada de lo que puede significar "Avanzado".

¡En los últimos años ha habido un montón de cosas nuevas "horribles" en el dominio RDBMS!

El requisito de "SQL avanzado" probablemente apunta al conocimiento y posiblemente a la competencia en varios de los nuevos conceptos, tales como:

  • CTEs (expresiones comunes de tablas)
  • UDF (funciones definidas por el usuario)
  • Extensiones de búsqueda de texto completo / integración
  • ajuste de rendimiento con nuevos esquemas de partición, índices filtrados, columnas dispersas ...)
  • nuevos tipos de datos (ej: GIS / espacial o jerárquico)
  • Soporte XML / integración
  • LINQ
  • y algunos más ... (Por cierto, la lista anterior está centrada en MSSQL, pero se observa una evolución similar en la mayoría de las otras plataformas DBMS).

Si bien mantenerse al tanto del pro (y los contras) de las nuevas características es una tarea importante para cualquier practicante de "SQL avanzado", los antiguos "fundamentos avanzados" probablemente también se consideran parte de los "avanzados" :

  • Desencadenantes y procedimientos almacenados en general.
  • Cursores (cuándo usar, cómo evitar ...)
  • Experiencia en diseño: definir tablas, qué indexar, tipo de índices.
  • experiencia de ajuste de rendimiento en general
  • optimización de consultas (leer planes de consulta, saber qué es intrínsecamente lento, etc.)
  • Procedimiento SQL
  • ...

Nota: lo anterior se enfoca en las habilidades asociadas con la programación / rol principal. "SQL avanzado" también podría referirse a la experiencia con roles administrativos (replicación, copias de seguridad, diseño de hardware, administración de usuarios ...). Ahora que lo pienso, un programador serio también debería estar familiarizado con tales prácticas.

Edit : LuckyLindy publicó un comentario que me pareció bastante perspicaz. Sugiere que "Avanzado" puede tener efectivamente un propósito diferente al de un nivel justo para expertos en la mayoría de las categorías enumeradas anteriormente ...
Repito este comentario aquí para darle más visibilidad.

Creo que muchas empresas publican Advanced SQL porque están cansadas de conseguir a alguien que dice "Soy un experto en SQL" y tiene problemas para armar una combinación externa de 3 mesas. Publico cosas similares en las ofertas de trabajo y mi expectativa es simplemente que un candidato no tendrá que acudir constantemente a mí en busca de ayuda para escribir SQL. (Comentario de LuckyLindy)


En mi trabajo anterior, tuvimos una prueba técnica en la que se pidió a todos los candidatos que se presentaran. 10 preguntas más, tomó alrededor de una hora. Sin embargo, con toda honestidad, el 90% de los fallos se pudieron eliminar porque no pudieron escribir una declaración INNER JOIN. Ni siquiera un exterior.

Considero que es un requisito previo para cualquier descripción de trabajo que involucre a SQL y que dejaría bien solo hasta que se domine. Sin embargo, a partir de ahí, hable con ellos: cualquier información adicional sobre lo que realmente están buscando será, en el peor de los casos, una lista útil de cosas que aprender como parte de su desarrollo profesional.


Supongo que las subconsultas y PIVOT calificarían, así como las uniones múltiples, uniones y similares.


Yo esperaría:

  • Creación y uso de procedimientos almacenados.
  • Uniones (internas y externas) y cómo utilizar correctamente GROUP BY
  • evaluación de rendimiento / ajuste
  • conocimiento de formas eficientes (e ineficientes) de hacer las cosas en las consultas (entender cómo ciertas cosas pueden afectar el rendimiento, por ejemplo, usar funciones en las cláusulas WHERE)
  • SQL dinámico y conocimiento de cursores (e IMO las pocas veces que se deben utilizar)
  • Comprensión del diseño de esquemas, indexación e integridad referencial.

SELECT ... HAVING ... es un buen comienzo. No muchos desarrolladores parecen entender cómo usarlo.