如何使用别名的mysql查询?

时间:2017-09-02 05:29:15

标签: php mysql sql

我是这个社区的新手,我需要处理从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文档,但我无法理解它的工作原理。

4 个答案:

答案 0 :(得分: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'

这里的Addresses表存储了我们用户的工作和家庭地址,并带有一个类型列来区分它们。我们想要一个结果,其中工作和家庭地址在同一行,所以我们必须连接两次地址表,我们给它们合理的别名,这样我们可以告诉哪个是哪个,我们使用where子句来确保我们的workAddress表别名仅指那些类型为“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就是这样,已经多年了。你习惯了它

答案 1 :(得分:0)

在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

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

答案 2 :(得分:0)

SQL Alias就是这个名字所说的alias。它只是您的表名的另一个名称(较短的名称)。

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

别名通常设置为"AS",如下所示:

SELECT * FROM Users AS u

但可以像这样缩短:

SELECT * FROM Users u

答案 3 :(得分:0)

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

假设您有一个表名' employee_records'。然后尝试获取表的字段将看起来是employee_records.id,依此类推。如果您使用表名的别名说“'”,那么选择字段将变为e.id。

希望这一点能说清楚。 有关更多信息,请阅读简单的单词 - https://www.w3schools.com/sql/sql_alias.asp