SQL中的ORDER BY语句——南大通用GBase 8s单表排序技巧


原文链接:

https://www.gbase.cn/community/post/3862

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

在数据库查询中,排序是一个常见的需求。SQL提供了强大的排序功能,通过ORDER BY语句,我们可以轻松地对查询结果进行排序。本文将详细介绍南大通用GBase 8s如何使用ORDER BY语句对单表数据进行排序,并提供一些实用的技巧。

排序是数据分析和报告中不可或缺的部分。SQL`ORDER BY语句允许我们根据一个或多个列对查询结果进行排序,以满足不同的数据展示需求。ORDER BY是SQL查询语句的一个子句,它位于WHERE 子句之后,用于指定查询结果的排序顺序。基本语法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

这里,ASC代表升序,DESC代表降序。如果不指定排序顺序,默认为升序。

  • 单列排序:最简单的排序是按照单一列进行。例如,如果我们想要按照年龄对用户信息进行排序,可以使用如下SQL语句:
SELECT * FROM t_user ORDER BY c_age;

这将返回所有用户信息,按年龄升序排列。

  •  多列排序:在某些情况下,我们可能需要根据多个列进行排序。例如,首先按年龄降序,然后按姓名升序:
SELECT * FROM t_user ORDER BY c_age DESC, c_name ASC;

这样,查询结果首先会根据年龄降序排列,年龄相同的记录则按照姓名升序排列。

  • 使用函数进行排序

ORDER BY不仅可以直接使用列名,还可以使用SQL函数。例如,如果我们想要根据字符串长度进行排序:

SELECT * FROM t_user ORDER BY LENGTH(c_name);

这将根据姓名的长度对用户信息进行排序。

接下来我们在南大通用GBase 8s中进行应用测试。

第一步、创建测试表

create table t_user(
c_id serial primary key,  --ID
c_name  varchar(20),  --姓名
c_age int,c_sex char(3),  --性别
c_cardno char(20),  --身份证
c_birthday char(10),  --出生日期
c_phone char(11),  --手机号
c_address1 varchar(255),  --联系地址1
c_address2 lvarchar(255)  --联系地址2
);

第二步、生成测试数据

sh gendata.sh 100000>t_user.unl
#!/bin/sh
#gendata.sh
for i in `seq $1`
do
xing="赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐"
num=$((RANDOM % ${#xing}))
ming="靖铭琛川承司斯宗骁聪在钩锦铎楚铮钦则女宝宝宜用字真心新悦西兮楚初千锐素锦静镜斯舒瑜童楠景茗聿启尧言嘉桉桐筒竹林乔栋家翊松楠景茗聿启尧言嘉桉桐筒竹林乔栋家翊松清澈泫浚润泽向凡文浦洲珩玄洋淮雨子云妍澜淇沐潆盈雨文冰雯溪子云汐潞淇妙涵卓昱南晨知宁年易晗炎焕哲煦旭明阳朗典灿夏珞煊晴彤诺宁恬钧灵昭琉晨曦南毓冉辰宸野安为亦围岚也以延允容恩衡宇硕已意也坤辰伊米安恩以容宛岚又衣亚悠允画"
num1=$((RANDOM % ${#ming}))
num2=$((RANDOM % ${#ming}))
age=$(( $RANDOM % (99)))
xingbies="男女"
xingbie=$((RANDOM % ${#xingbies}))
random_day=$((RANDOM % (36500)))
target_timestamp=$((random_day * 86400))
random_date=$(date -d @$target_timestamp "+%Y-%m-%d")
addr=`openssl rand -base64 100`
echo "0|"${xing:$num:1}${ming:$num1:1}${ming:$num2:1}"|"$age"|"${xingbies:$xingbie:1}"|"$(openssl rand -base64 10 |cksum |cut -c1-8)$(openssl rand -base64 10 |cksum |cut -c1-9)"|"$random_date"|139"$(openssl rand -base64 10 |cksum |cut -c1-8)"|"$addr"|"$addr"|"
done

第三步、导入数据

echo "load from t_user.unl insert into t_user;" |dbaccess testdb

第四步、查看测试SQL及结果

序号

SQL

表行数

排序字段

索引字段

执行耗时

1

select first 1 * from t_user order by c_name asc;

100000

c_name asc0.415 sec

2

set pdqpriority 100;

100000

c_name asc0.181 sec
select first 1 * from t_user order by c_name asc;

3

select first 1 * from t_user order by c_name asc;

100000

c_name ascc_name asc0.002 sec

4

select first 1 * from t_user order by c_name desc;

100000

c_name descc_name asc0.002 sec

注意事项

以下场景无法避免排序:
1、sort字段中有不在索引里的字段
2、sort字段顺序与索引字段顺序不一致
3、多个表的字段排序

通过本文的介绍,您应该对SQL中的ORDER BY语句有了更深入的理解。排序是SQL查询中一个非常实用的功能,能够让我们以更直观的方式查看和分析数据。希望本文能够帮助您更有效地使用ORDER BY进行数据排序。

 
原文链接:

https://www.gbase.cn/community/post/3862

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值