SELECT cust_email FROM customer AS c WHERE c.cust_email="pankaj@yahoo.com"
SELECT cust_email FROM customer WHERE cust_email="pankaj@yahoo.com"
我有这两个执行相同操作的sql查询,我的问题是,给客户另一个名称来选择数据有什么用呢?
发布于 2015-06-09 00:59:44
这就是所谓的别名。在你的情况下,这不是必需的。
当当前名称不方便、矛盾或未知(用于组函数)时,可以使用它来简化查询。
用户
Id int (PK)
Name nvarchar(50)
图书
Id int (PK)
UserId int (FK)
Name nvarchar(30)
现在,如果您查询两个表,这将是矛盾的,因为名称是相似的。在这里,您可以使用别名:
SELECT u.Id as UserId, u.Name as UserName, b.Name AS BookName
FROM Users AS u
INNER JOIN Books AS b
ON u.Id = b.UserId
你会得到结果的:
| UserId | UserName | BookName |
--------------------------------
| 1 | John | Book123 |
| 2 | Mark | BookXYZ |
etc...
如果您对同名的列进行连接,必须使用别名。否则,这将是一个错误的语法。
INNER JOIN Books ON Id = Id ???
您可以使用列别名来设置名称,并在SQL读取器或其他地方访问它。
并获取
| UserId | Value |
------------------
| 1 | true |
| 2 | false |
而不是
| UserId | HasUserEverBeenOnAHelpPage |
---------------------------------------
| 1 | true |
| 2 | false |
这并不意味着它不能在其他情况下使用。有时,它甚至被用于代码可读性和程序员的方便性:
SELECT u.Id,
u.FirstName,
u.LastName,
ua.City,
ua.AddressLine,
ua.PostalCode,
us.Language,
us.IsCookieEnabled,
lh.LastEnterDate
FROM Users as u
INNER JOIN UserAddresses as ua
ON ua.UserId = u.Id
INNER JOIN UserSettings as us,
ON us.UserId = u.Id
INNER JOIN LoginHistory as lh
ON lh.UserId = u.Id
在这种情况下,名称不是矛盾的,这个查询可以很容易地完成没有别名。然而,与它们一起工作更方便:
SELECT Users.Id,
Users.FirstName,
Users.LastName,
UserAddresses.City,
UserAddresses.AddressLine,
UserAddresses.PostalCode,
UserSettings.Language,
UserSettings.IsCookieEnabled,
LoginHistory.LastEnterDate
FROM Users
INNER JOIN UserAddresses
ON UserAddresses.UserId = Users.Id
INNER JOIN UserSettings
ON UserSettings .UserId = Users.Id
INNER JOIN LoginHistory
ON LoginHistory .UserId = Users.Id
点击此处阅读更多信息:
发布于 2015-06-09 00:59:35
在这种情况下,无论发生什么,它都没有任何区别。
但是,当您有一个使用多个带有联接的表的查询时,使用表名的别名可以使查询更具可读性。但是,我使用了一个命名约定,它将使表名的别名完全无用(除了多次加入同一个表时)。You can read about it here.
从性能的角度来看,它不会改变任何事情。
发布于 2015-06-09 01:00:12
当从单个表进行查询时,使用别名是不必要的(但习惯使用别名是很好的做法)。
当查询多个表、连接等时(特别是当同一个表被多次引用时),就需要它。
select * from Customer c join Email e on e.cust_id = c.id
此外,在嵌套选择中使用是明智的,特别是当多个表共享相同的列名时。这是为了确保引用的是要引用的表中的列,而不是另一列。
https://stackoverflow.com/questions/30727413
复制