Je passais à travers Questions que chaque bon développeur .Net devrait pouvoir répondre et j'ai été très impressionné par le contenu et l'approche de cette question. C'est pourquoi, dans le même esprit, je pose cette question pour Database/SQL. Développeur.
À quelles questions pensez-vous qu'un bon programmeur de bases de données/SQL puisse répondre?
Les différents types de jointures:
Voir Jeff Atwood's Explication visuelle des JOINs
Qu'est-ce qu'un index et comment aide-t-il votre base de données?
Quels sont les types de données disponibles et quand utiliser lesquels?
Une réimpression de ma réponse ici , en tant que directives générales pour les sujets.
SELECT
ing colonnes d'une tableCOUNT
, SUM
, MAX
/MIN
DISTINCT
, GROUP BY
, HAVING
JOIN
s, syntaxe ANSI-89 et ANSI-92UNION
vs UNION ALL
NULL
traitement: COALESCE
et traitement NULL natifIN
, EXISTS
et vues en ligneWITH
syntaxe: factorisation des sous-requêtes/CTECOMMIT
, ROLLBACK
, traitement des erreursVoici quelques-uns:
Qu'est-ce que l'injection SQL et comment l'évitez-vous?
Qu'est-ce qu'un curseur et quand l'utiliseriez-vous (ou pas) et pourquoi?
J'ai placé cette réponse parce qu'Erwin Smout a posté un réponse qui était si faux que cela a mis en évidence le besoin probable de se prémunir contre cela.
Erwin a suggéré:
"Pourquoi chaque SELECT devrait-il toujours inclure DISTINCT?"
Une question plus appropriée serait: Si quelqu'un prétend que: "chaque SELECT inclut toujours DISTINCT"; comment commenteriez-vous la demande?
Si un candidat est incapable de tirer la réclamation en flammes, il doit soit:
Pour l'enregistrement
Dans notre entreprise, au lieu de poser beaucoup de questions SQL auxquelles toute personne disposant d'une bonne mémoire peut répondre, nous avons créé un test SQL Developers. Le test est conçu pour que le candidat élabore un schéma solide avec des considérations de normalisation et de RI, vérifie les contraintes, etc. Ils créent tout cela contre une brève spécification de conception que nous leur donnons. Ils sont autorisés à le faire chez eux et prennent tout le temps dont ils ont besoin (dans des limites raisonnables).
Quelle est la différence entre un index clusterisé et un index non clusterisé?
Une autre question que je poserais qui ne concerne pas un serveur spécifique serait:
Qu'est-ce qu'une impasse?
Je voudrais donner une requête mal écrite et leur demander comment ils allaient sur la performance en le réglant.
Je voudrais poser des questions sur la théorie des ensembles. Si vous ne comprenez pas le fonctionnement dans des ensembles, vous ne pouvez pas interroger efficacement une base de données relationnelle.
Je leur donnerais quelques exemples de curseur et leur demanderrais comment les réécrire pour les rendre basés sur des ensembles.
Si le travail impliquait des importations et des exportations, je poserais des questions sur SSIS (ou d'autres outils impliqués dans cette tâche utilisés par d'autres bases de données). Si cela implique la rédaction de rapports, je voudrais savoir qu'ils comprennent les agrégats et les groupes (ainsi que Crystal Reports ou SSRS ou tout autre outil de rapport utilisé).
Je voudrais demander la différence de résultats entre ces trois requêtes:
select a.field1
, a.field2
, b.field3
from table1 a
join table2 b
on a.id = b.id
where a.field5 = 'test'
and b.field3 = 1
select a.field1
, a.field2
, b.field3
from table1 a
left join table2 b
on a.id = b.id
where a.field5 = 'test'
and b.field3 = 1
select a.field1
, a.field2
, b.field3
from table1 a
left join table2 b
on a.id = b.id and b.field3 = 1
where a.field5 = 'test'
Savoir ne pas utiliser et POURQUOI ne pas utiliser:
SELECT *
Une question intéressante impliquerait division relationnelle , ou comment exprimer une relation "pour tous", ce qui nécessiterait un imbriqué not exists
_ clauses.
La question vient directement de ce lien .
Étant donné les tableaux suivants, représentant les pilotes pouvant piloter des avions et des avions dans un hangar:
create table PilotSkills (
pilot_name char(15) not null,
plane_name char(15) not null
)
create table Hangar (
plane_name char(15) not null
)
Sélectionnez les noms des pilotes qui peuvent piloter tous les avions du hangar.
La réponse:
select distinct pilot_name
from PilotSkills as ps1
where not exists (
select * from hangar
where not exists (
select * from PilotSkills as ps2 where
ps1.pilot_name = ps2.pilot_name and
ps2.plane_name = hangar.plane_name
)
)
Ou ...
Sélectionnez tous les utilisateurs en dépassement de capacité de la pile qui ont accepté les réponses aux questions balisées avec le 10 langages de programmation les plus populaires .
La réponse (possible) (en supposant un Accepted_Answers
vue et un Target_Language_Tags
table avec les balises désirées):
select distinct u.user_name
from Users as u
join Accepted_Answers as a1 on u.user_id = a1.user_id
where not exists (
select * from Target_Language_Tags t
where not exists (
select *
from Accepted_Answers as a2
join Questions as q on a2.question_id = q.question_id
join Question_Tags as qt on qt.question_id = q.question_id
where
qt.tag_name = t.tag_name and
a1.user_id = a2.user_id
)
)
Comparez et contrastez les différences entre une solution sql/rdbms et une solution nosql. Vous ne pouvez pas prétendre être un expert dans une technologie sans connaître ses forces et ses faiblesses par rapport à ses concurrents.
Pourquoi devrions-nous vous engager alors que nous avons une application sophistiquée utilisant un ORM correctement optimisé et implémentant des systèmes de mise en cache tels que memcached ?
C'est une question sérieuse, ils devraient pouvoir justifier leur existence. Comme Jeff Atwood aime à dire " le matériel est bon marché, les programmeurs sont chers "
Quels types de base de données vous ont causé, en tant que développeur, plus de difficultés à comprendre et à déboguer? Réponse attendue, IMHO, expérience des problèmes liés à différents types de date/d'horodatage et de BLOB.
Quand est-il opportun d'utiliser des index bitmap?
Presque tout est mentionné ici. Je voudrais partager une question qui m'a été posée par un cadre supérieur sur la base de données. J'ai trouvé la question très intéressante et si vous y réfléchissez en profondeur, cela a beaucoup de sens.
La question était - Comment décririez-vous la base de données à votre enfant de 5 ans?
Quoi explain plan
fait et comment interprète les résultats que vous obtenez.
L'application est utilisée 24 heures par jour. Votre fenêtre de maintenance/mise à jour est de 2 heures par mois. Comment comptez-vous minimiser les perturbations?
Donnez un exemple où la dénomralisation est préférable.
(J'aime celui-ci parce que les gens se déchaînent et cherchent à tout mettre en 3ème forme normale)
Également les questions suivantes spécifiques à la plate-forme (SQL Server):
Cette zone peut avoir un impact énorme sur les performances et la sécurité de la base de données. Ne vous y trompez pas et vous pourriez vous retrouver dans un monde de douleur.
Parce qu'il y a toujours une exception à la règle :)