我有一个表,其中包含“ employeename”和“ id”列,如何按照名字的字母首字母顺序对“ employeename”列进行排序?
说桌子现在是这样的:
employeename rid eid
Dave 1 1
Ben 4 2
Chloe 6 6
我尝试了命令ORDER BY
,它显示了我想要的内容,但是当我再次通过SELECT
查询数据时,显示的表数据与原始数据相同,指示ORDER BY
并没有修改数据,对吗?
SELECT *
FROM employee
ORDER BY employeename ASC;
我希望可以像这样修改表数据(按名称字母顺序排列):
employeename rid eid
Ben 4 2
Chloe 6 6
Dave 1 1
答案 0 :(得分:1)
显示的表数据与原始数据相同,指示ORDER BY不修改数据,对吗?
是的,这是正确的。 SELECT
语句不会更改表中的数据。只有UPDATE
,DELETE
,INSERT
或TRUNCATE
语句会更改数据。
但是,您的问题显示出对关系数据库如何工作的误解。
(关系数据库的)表中的行不以任何方式排序。您可以将它们想象成篮子里的球。
如果要按特定的排序顺序显示数据,则 only (确实是 )的方法是使用ORDER BY
在您的SELECT语句中。除此之外,别无选择。
Postgres允许定义一个包含ORDER BY
的VIEW,这可能是您可以接受的解决方法:
CREATE VIEW sorted_employee;
AS
SELECT *
FROM employee
ORDER BY employeename ASC;
然后您可以简单地使用
select *
from sorted_employees;
但是要注意缺点。如果运行select * from sorted_employees order by id
,则数据将被排序两次。 Postgres不够聪明,无法从视图的定义中删除(无用的)order by
。
一些相关问题: