如何使用别名进行 mysql 查询?

问题描述 投票:0回答:4

我是这个社区的新人,我需要使用一个从 mysql 数据库获取数据的查询,我有这个查询,但我需要添加一个新表,我不明白为什么查询有一个别名,我不知道它是如何工作的,有人可以帮助我吗? 这是我的查询:

SELECT ins.matricula, pe.nombres, pe.appaterno, pe.apmaterno, co.calleynum, co.colonia, co.municipio, co.telfijo, co.telcelular, pe.fechanac, pe.sexo, co.email, pe.institucion, tu.tnombres, tu.tappaterno, tu.tapmaterno, tu.direccion, tu.telefono, ins.fechains, ins.niveledu, ins.fechaini, ins.horario 
FROM Inscripciones ins 
LEFT JOIN Perfiles pe 
       ON pe.idperfil=ins.idperfil 
LEFT JOIN Contactos co 
       ON co.idperfil = pe.idperfil 
LEFT JOIN Tutores tu 
       ON tu.matricula = ins.matricula 
WHERE pe.idperfil='$var'

我已经阅读了 mysql 文档,但我不明白它是如何工作的。

sql mysql
4个回答
2
投票

在MySQL中,可以声明一个“别名”来简化以后的查询。 通常,这用“AS”运算符表示,但也可以在不使用“AS”的情况下声明 - 正如您的示例中所示。

在你的例子中:

SELECT ins.matricula, {...}
FROM Inscripciones ins {...}

ins
设置为“Inscripciones”表的别名。 这允许您在整个查询中使用
ins
,而不是键入“Inscripciones”。这可以从
SELECT
声明中看出。 需要记住的一点 - SQL 中的别名可以在首次使用后声明。在您的示例中就是这种情况,在您实际将
SELECT
声明为
ins.matricula
的别名之前,
ins
获得
Inscripciones
。 有时这似乎违反直觉,但我保证如果你尝试一下它就会有意义。

我发现包含“AS”不太含糊——这可能有助于您在阅读/编写 SQL 查询时更有意义。 例如:

... FROM Inscripciones AS ins

需要明确的是,使用别名不会改变查询的结果,但可以帮助您编写更清晰的查询,因为您不必每次使用表名时都重新编写表名。


0
投票

A SQL Alias 顾名思义,一个 alias。它只是表名的另一个名称(较短的名称)。

因此,在您的示例中,表名称为

Inscripciones
,在这一行
FROM Inscripciones ins
中,您说
"ins"
Inscripciones
的别名。它只是使查询更小/更简单的一种方法。别名就像昵称(即迈克尔的别名是“Mike”)

别名通常用

"AS"
设置,如下所示:

SELECT * FROM Users AS u

但可以这样缩短:

SELECT * FROM Users u

0
投票

表不必有别名,除非您想多次使用同一个表,但如果表具有相同名称的列,则可以缩短键入时间。

不用写

SELECT myfulltable1name.id, myfulltable2name.id

你可以写

SELECT t1.id, t2.id

(如果您已将表别名为 t1 和 t2)

这是一个示例查询,我们多次使用同一个表,并且需要一个别名来分隔它们:

SELECT
  workAddresses.City as WorkCity,
  homeAddresses.City as HomeCity
FROM
  Addresses workAddresses
  INNER JOIN
  Addresses homeAddresses
  ON 
    workAddresses.UserID = homeAddresses.UserID
WHERE
  workAddresses.type = 'work' AND
  homeAddresses.type = 'home'

此处的地址表存储用户的工作地址和家庭地址,并通过类型列来区分它们。我们想要一个结果,其中工作地址和家庭地址位于同一行,因此我们必须两次连接地址表,我们给它们提供合理的别名,以便我们可以区分哪个是哪个,并且我们使用 where 子句来确保我们的工作地址表别名仅指那些类型为“work”的记录

您会注意到我还在所选的列名称上添加了别名,这样您就可以知道哪个是工作城市,哪个是家庭城市

有时您必须使用别名,例如如果您进行子查询,则结果必须具有别名才能使用:

SELECT
  workAddresses.City as WorkCity,
  homeAddresses.City as HomeCity
FROM
  (SELECT * FROM Addresses WHERE type ='work') workAddresses
  INNER JOIN
  (SELECT * FROM Addresses WHERE type ='home') homeAddresses
  ON 
    workAddresses.UserID = homeAddresses.UserID

这里我们通过子查询从地址表中获取信息,括号中的sql语句必须有别名

别名始终在将别名对象带入查询的第一点进行声明。对于表,它位于 FROM 部分,对于列,它位于 SELECT 部分

它可能会帮助您将其视为数据库实际上首先执行 from 部分,将所有表连接在一起,然后执行 where 来过滤行,最后执行 select 来仅提取您想要的列。 C# 有一种名为 LINQ 的内置查询语言,它以这种更合乎逻辑的方式呈现事物,

FROM table WHERE something = something SELECT somecolumns
- 更容易说“事物在首次引入时是别名的,就像变量命名一样”。 SQL 就是这样,已经很多年了。习惯就好了


0
投票

MySQL 查询中的别名就像表的临时短名称。它们不一定要使用,但当您需要创建复杂查询时可以节省您的时间。它们主要用在当您尝试使用 JOINS 在单个查询中获取超过 1 个表的数据时的查询中。

假设您有一个表名称“employee_records”。然后尝试获取表的字段将查找employee_records.id 等。如果您使用表名别名“e”,那么选择字段将变为 e.id。

希望这能让你的观点清楚。 有关简单文字的更多信息,请阅读此处有关 SQL 别名的信息 - https://www.w3schools.com/sql/sql_alias.asp

© www.soinside.com 2019 - 2024. All rights reserved.