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?
Réponses
Trop de publicités?Notions de base
-
SELECT
ing colonnes d'une table - Granulats Partie 1:
COUNT
,SUM
,MAX
/MIN
- Les Agrégats De La Partie 2:
DISTINCT
,GROUP BY
,HAVING
Intermédiaire
-
JOIN
s, ANSI-89 et ANSI-92 syntaxe -
UNION
vsUNION ALL
-
NULL
manipulation:COALESCE
& Natif de la gestion des valeurs NULL - Les sous-requêtes:
IN
,EXISTS
, et dans la ligne des vues - Les Sous-Requêtes: Corrélation
-
WITH
syntaxe: une sous-Requête d'Affacturage/CCE - 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
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)
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
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).
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.) ...
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