85 votes

Qu'est-ce que le SQL "avancé"?

En regardant une description de poste où "SQL avancé" est une exigence. Je peux écrire des requêtes de base aussi bien que n'importe qui, et j'ai travaillé avec des bases de données MySQL dans un cadre professionnel, mais que devrais-je faire avec ces emplois, si je devais être embauché? Quels sont les exemples de SQL avancé et où en suis-je sur l'échelle du noob SQL au maître SQL?

157voto

OMG Ponies Points 144785

Notions de base

  1. SELECTing colonnes d'une table
  2. Granulats Partie 1: COUNT, SUM, MAX/MIN
  3. Les Agrégats De La Partie 2: DISTINCT, GROUP BY, HAVING

Intermédiaire


  1. JOINs, ANSI-89 et ANSI-92 syntaxe
  2. UNION vs UNION ALL
  3. NULL manipulation: COALESCE & Natif de la gestion des valeurs NULL
  4. Les sous-requêtes: IN, EXISTS, et dans la ligne des vues
  5. Les Sous-Requêtes: Corrélation
  6. WITH syntaxe: une sous-Requête d'Affacturage/CCE
  7. Vues

Sujets Avancés


  • Des Fonctions, Des Procédures Stockées, Des Paquets
  • Pivotement de données: CAS & PIVOT de la syntaxe
  • Des Requêtes Hiérarchiques
  • Curseurs: Implicite et Explicite
  • Les déclencheurs
  • SQL dynamique
  • Les Vues Matérialisées
  • L'Optimisation De La Requête: Index
  • L'Optimisation De La Requête: Expliquer Les Plans De
  • L'Optimisation De La Requête: Profilage
  • Données de la Modélisation: les Formes Normales, de 1 à 3
  • Données De La Modélisation: Primaires Et Les Clés Étrangères
  • Données De La Modélisation: Les Contraintes De Table
  • Données De La Modélisation: Lien/Corrollary Tables
  • La Recherche Plein Texte
  • XML
  • Les Niveaux D'Isolation
  • Les Diagrammes entité-Relation (ERDs), Logique et Physique
  • Transactions: COMMIT, ROLLBACK, Erreur De Manipulation

29voto

mjv Points 38081

Le reste de l'offre d'emploi liste pourrait fournir un contexte pour fournir une meilleure deviner ce qu' "Advanced SQL" peut englober.

Je suis en désaccord avec les commentaires et les réponses indiquant que la compréhension de REJOINDRE et les requêtes d'agrégation sont "avancées" des compétences; de nombreux employeurs ne considère pas cela assez basique, j'en ai peur. Voici grosso modo comme quoi "Avancé" peut signifier.

Il y a eu un "affreux" beaucoup de choses nouvelles dans le SGBDR de domaine, dans les dernières années!

Le "SQL Avancé" exigence probablement allusion à la connaissance et, éventuellement, la maîtrise de plusieurs de la de nouveaux concepts tels que:

  • D'Expressions De Table Communes (Common Table Expressions)
  • Udf (User Defined Functions)
  • Recherche Fulltext extensions/intégration
  • optimisation des performances avec de nouveaux schémas de partitionnement, index filtrés, les colonnes fragmentées...)
  • de nouveaux types de données (ex: SIG/ou spatiale hiérarchique)
  • Le support de XML / intégration
  • LINQ
  • et un peu plus... (d'ailleurs la liste ci-dessus est un peu MSSQL-centrique, mais une évolution similaire est observée dans la plupart des autres SGBD plates-formes).

Tandis que se tenir au courant de la pro (et les inconvénients) de ces nouvelles fonctionnalités est une tâche importante pour n'importe quel "SQL avancé" praticien, l'ancien avancée "fondamentaux" sont sans doute également considéré comme faisant partie de la "avancé":

  • les déclencheurs et les procédures stockées au grand
  • Les curseurs (quand les utiliser, comment les éviter ...)
  • l'expertise de conception: définition des tables, ce qui à l'index, le type d'index
  • optimisation des performances de l'expertise en général
  • l'optimisation de la requête (lecture de plans de requête, savoir ce qui est intrinsèquement lent etc.)
  • Procédure SQL
  • ...

Remarque: ci-dessus met l'accent sur les compétences liées à la programmation/rôle de chef de file. "SQL avancé" pourrait également se référer à l'expérience avec des rôles administratifs (Réplication, les sauvegardes, le matériel de mise en page, gestion des utilisateurs...). Venez pour penser à elle, une grave programmeur doit être un peu familier avec de telles pratiques.

Edit: LuckyLindy posté un commentaire que j'ai trouvé très perspicace. Il suggère que "Avancé" peut effectivement avoir un but différent de ce qui implique un juste-à-niveau expert dans la plupart des catégories énumérées ci-dessus...
Je répète ce commentaire ici pour lui donner plus de visibilité.

Je pense que beaucoup de sociétés post SQL Avancé parce qu'ils sont fatigués de faire faire à quelqu'un qui dit "je suis un SQL expert" et a du mal à mettre ensemble un 3 table de jointure externe. Je poste des trucs similaires dans les offres d'emploi et mon attente est tout simplement qu'un candidat n'aura pas besoin d'être constamment à venir à moi pour les aider à écrire de SQL. (commentaire par LuckyLindy)

22voto

Jess Points 8425

Je pense que c'est mieux mis en évidence avec un exemple. Si vous sentez que vous pourriez écrire l'instruction SQL suivante rapidement avec peu ou pas de matériel de référence, alors je suppose que vous avez probablement répondre à leurs SQL Avancé exigence:

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

(source de la requête)

Et pour être honnête, c'est relativement simple requête que quelques - unes des jointures internes et une sous-requête, avec quelques mots-clés (max, min, cas).

12voto

dicroce Points 11988

Découvrez SQL For Smarties . Je pensais que j'étais assez bon avec SQL aussi, jusqu'à ce que je lise ce livre ... Va dans des tonnes de profondeur, parle de choses que je n'ai pas vues ailleurs (différence IE entre la 3ème et la 4ème forme normale, Boyce Codd Normal Formulaire, etc.) ...

10voto

Joe Points 17829

Je m'attends à:

  • procédure stockée la création et l'utilisation
  • les jointures (intérieure et extérieure) et comment les utiliser correctement PAR GROUPE
  • l'évaluation de la performance/tuning
  • la connaissance de l'efficacité (et inefficace) façons de faire les choses dans les requêtes (comprendre comment certaines choses peuvent affecter les performances, par exemple à l'aide de fonctions dans les clauses where)
  • SQL dynamique et de la connaissance de curseurs (et de l'OMI, les rares fois où ils devraient être utilisés)
  • la compréhension de la conception d'un schéma, d'indexation, et de l'intégrité référentielle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X