web-dev-qa-db-fra.com

Quand utiliser l'alias de table SQL

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.

30
Rossini

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.

21
Walter Mitty

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.

20
BoltBait

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
6
mattruma

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é.

3
MJB

Dans des requêtes simples, je n'utilise pas d'alias. Dans les requêtes Whit Multiple Tables, je les utilise toujours parce que:

  • ils font des requêtes plus lisibles (mes alias sont 2 ou plus de lettres majuscules qui sont un raccourci pour le nom de la table et si possible une relation avec d'autres tables)
  • ils permettent de développer et de réécrire plus rapidement (mes noms de table sont longs et ont des préfixes en fonction du rôle qu'ils posent)

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 ...
1
Erv

Je l'utilise toujours, des raisons:

  • laissant des noms de tableaux complets dans les déclarations les rend difficiles à lire, plus vous ne pouvez pas avoir une même table deux fois
  • ne pas utiliser quelque chose est une très mauvaise idée, car plus tard, vous pouvez ajouter du champ à l'une des tables déjà présentes dans une autre table

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 ...

1
Milan Babuškov

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.

0
Adam Caviness

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.

0
Steven A. Lowe

Les alias de tableaux doivent être quatre choses:

  1. Court
  2. Significative
  3. Toujours utilisé
  4. Utilisé de manière cohérente

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.

0
Noah Yetter

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.

0
Jeff Schumacher

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.

0
gbn

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 :)

0
onedaywhen

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.

0
Benjamin Ford

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.

0
HLGEM

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.

0
AdamQuark