Je suis curieux de savoir comment les gens utilisent des alias de table. Les autres développeurs où je travaille utilise toujours des alias de table et utilisez toujours l'alias d'A, B, C, etc.
Voici un exemple:
SELECT a.TripNum, b.SegmentNum, b.StopNum, b.ArrivalTime
FROM Trip a, Segment b
WHERE a.TripNum = b.TripNum
Je ne suis pas d'accord avec eux et je pense que les alias de table doivent être utilisés plus avec parcimonie.
Je pense qu'ils doivent être utilisés lorsque vous incluez la même table deux fois dans une requête ou lorsque le nom de la table est très long et que l'utilisation d'un nom plus court dans la requête facilitera la mise en lecture de la requête.
Je pense aussi que l'alias devrait être un nom descriptif plutôt qu'une simple lettre. Dans l'exemple ci-dessus, si je pensais que je devais utiliser une table d'alias de 1 lettre, j'utiliserais T pour la table de voyage et S pour la table de segment.
Il y a deux raisons d'utiliser des alias de table.
Le premier est cosmétique. Les déclarations sont plus faciles à écrire, et peut-être aussi plus faciles à lire lorsque des alias de table sont utilisés.
La seconde est plus substantielle. Si un tableau apparaît plus d'une fois dans la clause depuis la clause, vous avez besoin d'alias de table afin de les garder distincts. Les jointures auto sont courantes dans les cas où une table contient une clé étrangère qui fait référence à la clé principale de la même table.
Deux exemples: une table des employés contenant une colonne supervisible qui fait référence à l'employé de la superviseur.
La seconde est une explosion de pièces. Souvent, ceci est implémenté dans une table séparée avec trois colonnes: ComponentPartid, assemblage et quantité. Dans ce cas, il n'y aura pas de jointures auto-auto, mais il y aura souvent une solution à trois voies entre cette table et deux références différentes à la table des pièces.
C'est une bonne habitude d'entrer dans.
Je les utilise pour sauver la dactylographie. Cependant, j'utilise toujours des lettres similaires à la fonction. Donc, dans votre exemple, je voudrais taper:
SELECT t.TripNum, s.SegmentNum, s.StopNum, s.ArrivalTime
FROM Trip t, Segment s
WHERE t.TripNum = s.TripNum
Cela facilite la lecture plus facile pour moi.
En règle générale Je les utilise toujours, car il existe généralement plusieurs jointures dans mes procédures stockées. Il facilite également la tâche de l'utilisation des outils de génération de code tels que CodeMITH pour le faire générer automatiquement le nom d'alias pour vous.
J'essaie de rester à l'écart des lettres simples comme A & B, car je peux avoir plusieurs tables commençant par la lettre A ou B. Je vais avec une approche plus longue, la concaténation de la clé étrangère référencée avec la table d'alias, par exemple Customercontact ... Ce serait l'alias de la table client lorsqu'il s'agit d'une table de contact.
L'autre raison pour laquelle cela ne me dérange pas plus long Nom, est dû à la plupart de mes procédures stockées sont générées via Code CodeMith. Je ne me dérange pas de taper la main pe que je pourrais avoir à me construire moi-même.
En utilisant l'exemple actuel, je ferais quelque chose comme:
SELECT TripNum, TripSegment.SegmentNum, TripSegment.StopNum, TripSegment.ArrivalTime
FROM Trip, Segment TripSegment
WHERE TripNum = TripSegment.TripNum
Puis-je ajouter à un débat qui a déjà plusieurs ans?
Il y a une autre raison pour laquelle personne n'a mentionné. L'analyseur SQL dans certaines bases de données fonctionne mieux avec un alias. Je ne me souviens pas si Oracle a changé cela dans les versions ultérieures, mais lorsqu'il est arrivé à un alias, il a regardé les colonnes de la base de données et se souvenait d'eux. Lorsqu'il est venu à un nom de table, même s'il était déjà rencontré dans la déclaration, il a vérifié la base de données pour les colonnes. Ainsi, l'utilisation d'un alias permettait d'analyser plus rapidement, en particulier d'énoncés de Long SQL. Je suis sûr que quelqu'un sait que c'est toujours le cas, si d'autres bases de données le font à l'heure d'analyse, et si elle changeait, ( lorsque ça a changé.
Dans des requêtes simples, je n'utilise pas d'alias. Dans les requêtes Whit Multiple Tables, je les utilise toujours parce que:
donc, au lieu de par exemple:
SELECT SUM(a.VALUE)
FROM Domesticvalues a, Foreignvalues b
WHERE a.Value>b.Value
AND a.Something ...
J'écris:
select SUM(DVAL.Value)
from DomesticValues DVAL, ForeignValues FVAL
where DVAL.Value > FVAL.Value
and DVAL.Something ...
Je l'utilise toujours, des raisons:
Considérez cet exemple:
select col1, col2
from tab1
join tab2 on tab1.col3 = tab2.col3
Maintenant, imaginez quelques mois plus tard, vous décidez d'ajouter une colonne nommée 'col1' à TAB2. La base de données vous permettra de le faire en silence, mais des applications se briseraient lors de l'exécution de la requête ci-dessus en raison de l'ambiguïté entre TAB1.COL1 et TAB2.COL1.
Mais, je suis d'accord avec vous sur la nommée: a, b, c va bien, mais t et s serait bien meilleur dans votre exemple. Et quand j'ai la même table plus d'une fois, j'utiliserais T1, T2, ... ou S1, S2, S3 ...
Je pense que vous devriez les utiliser aussi souvent que possible, mais je suis d'accord que T & S représente les entités mieux que A & B.
Cela se résume à, comme tout le reste, des préférences. J'aime que vous puissiez dépendre de vos procédures stockées après les mêmes conventions lorsque chaque développeur utilise l'alias de la même manière.
Allez convaincre vos collègues d'obtenir sur la même page que vous ou ceci est tout simplement sans valeur. L'alternative est que vous pourriez avoir une table Zebra comme première table et alias en tant que. Ce serait juste mignon.
je les utilise que lorsqu'ils sont nécessaires pour distinguer quel tableau provient un champ de
select PartNumber, I.InventoryTypeId, InventoryTypeDescription
from dbo.Inventory I
inner join dbo.InventoryType IT on IT.InventoryTypeId = I.InventoryTypeId
Dans l'exemple ci-dessus, les deux tables ont un champ inventorytypeid, mais les autres noms de champ sont uniques.
Utilisez toujours une abréviation pour la table comme nom de référence afin que le code ait plus de sens - demandez à vos autres développeurs s'ils nomment leurs variables locales A, B, C, etc.!
La seule exception est dans les rares cas où la syntaxe SQL nécessite un alias de table, mais elle n'est pas référencée, par ex.
select *
from (
select field1, field2, sum(field3) as total
from someothertable
) X
Dans ce qui précède, SQL Syntaxe nécessite l'alias de table pour le sous-sélection, mais il n'est pas référencé nulle part donc je suis paresseux et utilisez X ou quelque chose comme ça.
Les alias de tableaux doivent être quatre choses:
Par exemple, si vous aviez des tables nommées Service_Request, Service_Provider, utilisateur et affiliation (parmi d'autres) une bonne pratique serait d'alias ces tables comme "SR", "SP", "U" et "A", et faites-le dans chaque requête possible. Cela est particulièrement pratique si, comme c'est souvent le cas, ces alias coïncident avec des acronymes utilisés par votre organisation. Ainsi, si "SR" et "SP" sont respectivement les termes acceptés pour la demande de service et le fournisseur de services, les alias ci-dessus portent une double charge utile de se tenir intuitivement debout pour la table et l'objet métier qu'il représente.
Les défauts évidents avec ce système sont d'abord qu'il peut être gênant pour les noms de table avec beaucoup de "mots" par exemple. A_LONG_MULTI_WORD_TABLE_NAME qui serait alias à Almwtn ou quelque chose et que cela devra probablement vous retrouver avec des tables nommées de manière à ce qu'ils abrévent de la même manière. Le premier défaut peut être traité comme vous le souhaitez, comme en prenant les 3 ou 4 dernières lettres, ou que vous vous sentez le plus représentatif, le plus unique ou le plus facile à taper. La seconde que j'ai trouvée dans la pratique n'est pas aussi gênante que possible, peut-être juste de la chance. Vous pouvez également faire des choses comme prenant la deuxième lettre d'un "mot" dans la table, telle que l'aliasing Compte_Transaction à "ATR" au lieu de "AT" pour éviter de conflictuler avec Compte_Type.
Bien sûr, que vous utilisiez l'approche ci-dessus ou non, des alias doivent être courts, car vous les tapisserez très très très fréquemment, et ils doivent toujours être utilisés car une fois que vous avez écrit une requête contre une seule table et omis l'alias, c'est inévitable que vous auriez besoin plus tard de modifier dans une deuxième table avec des noms de colonne en double.
Je ne trouve que rien de plus qu'une préférence. Comme mentionné ci-dessus, des alias épargnent de taper, en particulier avec des noms de table/de vue longs.
L'utilisation du nom complet facilite la lecture, en particulier pour des requêtes plus vastes ou la scénario de commande/produit/commandes/de commande.
J'utiliserais t et s. Ou o/p/op
Si vous utilisez Schéma, les colonnes doivent être qualifiées de toute façon
Si vous ajoutez une colonne à une table de base, la qualification réduit les risques d'un duplicata dans la requête (par exemple, une colonne "Commentaire")
En raison de cette qualification, il est logique de toujours utiliser des alias.
L'utilisation d'A et B est une obéissance aveugle à une norme bizarre.
Je les utilise toujours. Jusqu'à ce que je ne les ai utilisés que dans des requêtes impliquant une seule table, mais j'ai réalisé une) des requêtes impliquant une seule table sont rares, et b) des requêtes impliquant une seule table restent rarement de cette façon pour longtemps. Donc, je les mettais toujours dans le début de sorte que je (ou quelqu'un d'autre) n'aura pas à les réprimer plus tard. OH et BTW: je les appelle "noms de corrélation", conformément à la norme SQL-92 :)
Il y a beaucoup de bonnes idées dans les messages ci-dessus sur quand et pourquoi des noms de table Alias. Ce que personne d'autre n'a mentionné, c'est que cela est également bénéfique pour aider un responsable à comprendre la portée des tables. Chez notre société, nous ne sommes pas autorisés à créer des vues. (Merci, DBA.) Donc, certaines de nos questions deviennent grandes, même dépassant la limite de 50 000 caractères d'une commande SQL dans des rapports en cristal. Lorsqu'une requête aliaa ses tableaux en tant que, B, C et une sous-requête de cela fait la même chose, et plusieurs sous-requêtes de celui-là utilisent chacun les mêmes alias, il est facile d'être confondre quel niveau de la requête est lu. Cela peut même confondre le développeur original lorsque vous avez passé suffisamment de temps. L'utilisation d'alias uniques dans chaque niveau d'une requête facilite la lecture, car la portée reste claire.
Une chose que j'ai apprise est que particulièrement avec des requêtes complexes; Il est beaucoup plus simple de dépanner six mois plus tard si vous utilisez l'alias comme qualificatif pour chaque référence de champ. Ensuite, vous n'essayez pas de vous souvenir de la table de ce domaine.
Nous avons tendance à avoir des noms de table ridiculement longs, alors je trouve plus facile à lire si les tables sont aliasées. Et bien sûr, vous devez le faire si vous utilisez une table dérivée ou une jointure auto, alors être dans l'habitude est une bonne idée. Je trouve que la plupart de nos développeurs finissent par utiliser le même alias pour chaque table dans tous leurs SPS, alors la plupart du temps que quiconque lisait, il saura immédiatement ce que Pug est l'alias ou MMH.
Parce que je qualifie toujours pleinement mes tables, j'utilise des alias pour fournir un nom plus court des champs sélectionnés lorsqu'ils sont impliqués. Je pense que cela rend mon code plus facile à suivre.
Si la requête traite d'une seule source - pas de jointures - alors je n'utilise pas d'alias.
Juste une question de préférence personnelle.