mysql排序

MySQL 常规排序、自定义排序和按中文拼音字母排序

泄露秘密 提交于 2019-11-29 17:57:19
在实际的SQL编写时,我们有时候需要对条件集合进行排序。 下面给出3中比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 DESC倒叙 -- 此处不用多讲 2.自定义排序 自定义排序是根据自己想要的特定字符串(数字)顺序进行排序。 主要是使用函数 FIELD(str,str1,str2,str3,...) MySQL的自定义排序,str与str1、str2、str3...进行比较,并按照str1,str2,str3...的顺序输出,如果遇到str为null或者不存在str1,str2,str3...中的情况的则序列为0, eg: SELECT * FROM TEST ORDER BY FIELD(value,'test1','test2','test3','test4') ASC/DESC eg2: SELECT * FROM TEST WHERE VALUE IN('test1','test2','test3','test4') ORDER BY FIELD(value,'test1','test2','test3','test4') ASC/DESC -- 保证只满足条件的进行排序 3.按中文拼音字母排序 如果表字段使用的GBK编码的话,我们可以直接order by value ,因为GBK本身就是按照拼音字母排序ABCDEFGHIGK...

MySQL 按首字母排序

拥有回忆 提交于 2019-11-29 17:57:08
通常我们在查询书籍时,会出现按照书籍的名称进行排序,由于一般数据库编码大都为utf-8 ,他的排序方式为按英文字母规则排序 "a,b,c..... " 数据库编码: 排序 utf-8mb4 按英文字母规则排序 "a,b,c..... " gbk 按汉字首字母排序 效果如上图 由上表看出,只要我们在排序时将需要排序的字段转化为GBK编码再进行排序,就可以实现按照书籍名称的首字母进行排序了, 怎样才能将编码转化为GBK呢?在MySQL中提供了函数CONVERT() ,该函数可用来获取一个类型的值 该函数的使用方式为 CONVERT(字段 USING GBK) 例如: SELECT * FROM table ORDER BY CONVERT(field USING GBK) ASC 来源: CSDN 作者: LiuSirzz 链接: https://blog.csdn.net/xiaojiejie_baby/article/details/90670304

mysql汉字按英文字母排序

ε祈祈猫儿з 提交于 2019-11-29 17:56:38
按照汉字的拼音排序,用的比较多是在人名的排序中,按照姓氏的拼音字母,从A到Z排序; 如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了,但考虑到人名等都是常用汉字,因此只是针对一级汉字能正确排序也够用了)。 直接在查询语句后面 添加 order by name asc; 查询结果按照姓氏的升序排序; 如果存储姓名的字段采用的是 utf8字符集,需要在排序的时候对字段进行转码;对于的代码是 order by convert(name using gbk) asc; 同样,查询的结果也是按照姓氏的升序排序; 来源: CSDN 作者: 前方太黑暗 链接: https://blog.csdn.net/xcc_2269861428/article/details/53834791

MySQL凝练 二

ⅰ亾dé卋堺 提交于 2019-11-29 11:24:54
数据查询语言 1、查询表中某些字段 SELECT 字段1,字段2.。。 FROM 表名; 例:查询姓名与年龄 select name,age from Student; * 在SQL 中也是通配符,代表所有字段 2、SQL中的数学运算 + - * / 例:查询每个教师的日薪,按每月30天计算 select name,salary/30 from teacher; 例:查询每个教师的年薪,按每年12月计算 select name,salary*12 from teacher; 3、字段别名 为查询结果新取一个字段名 例:查询每个教师的年薪,并为查询结果设置的字段名为yearsal select name,salary*12 yearsal from teacher; 4、字符串操作 concat(s1,s2.。。); 返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个为NULL则返回值为NULL 例:显示所有教师名和所教科目中间有下划线连接 select concat(name,'_',subject) from teacher;-----name_subject concat_ws(x,s1,s2..); 返回多个字符串拼接之后的字符串,每个字符串之间有一个x 例:连接字符串,并使用空格分隔 select concat_ws(' ',name,subject,'he')

Mysql高手系列 - 第8篇:详解排序和分页(order by & limit),及存在的坑

喜夏-厌秋 提交于 2019-11-29 10:06:28
这是Mysql系列第8篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 本章内容 详解排序查询 详解limit limit存在的坑 分页查询中的坑 排序查询(order by) 电商中:我们想查看今天所有成交的订单,按照交易额从高到低排序,此时我们可以使用数据库中的排序功能来完成。 排序语法: select 字段名 from 表名 order by 字段1 [asc|desc],字段2 [asc|desc]; 需要排序的字段跟在 order by 之后; asc|desc表示排序的规则,asc:升序,desc:降序,默认为asc; 支持多个字段进行排序,多字段排序之间用逗号隔开。 单字段排序 mysql> create table test2(a int,b varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> insert into test2 values (10,'jack'),(8,'tom'),(5,'ready'),(100,'javacode'); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from

Mysql 中根据条件排序获取排名

匆匆过客 提交于 2019-11-29 08:57:47
1 SELECT user_id,left_credit,(@rownum:=@rownum+1) AS rownum 2 FROM credit_user ,(SELECT @rownum:=0) r 3 ORDER BY left_credit DESC 上面示例根据left_credit字段条件进行倒序排序,然 后通过rownum获取到排名从1开始 SELECT user_id,left_credit,(@rownum:=@rownum+1) AS rownum FROM credit_user ORDER BY left_credit DESC 去掉 ( SELECT @rownum: = 0 ) r 后,rownum就不是每次控制从1开始,而是没执行一次就逐次自增 select * from (SELECT user_id,left_credit,(@rownum:=@rownum+1) AS rownum FROM credit_user ,(SELECT @rownum:=0) r ORDER BY left_credit DESC)T having rownum>n 排序后 选择某一行或者某几行,n是行数。 来源: https://www.cnblogs.com/apollo-shen/p/11207253.html

MySQL索引-下

ぃ、小莉子 提交于 2019-11-29 08:28:28
本文内容是整理极客时间的mysql课程。 执行select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 表的初始化操作: mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k)) engine=InnoDB; insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg'); InnoDB的索引组织结构-图 InnoDB的索引语句执行流程: 1.在k索引树上找到k=3的记录,取得ID=300; 2.再到 ID 索引树查到 ID=300 对应的 R3; 3.在 k 索引树取下一个值 k=5,取得 ID=500; 4.再回到 ID 索引树查到 ID=500 对应的 R4; 5.在k索引树取下一个值k=6,不满足条件,循环结束。 解析 回到主键索引树搜索的过程,我们称为回表。在这个例子中,查询过程读了k索引树的3条记录(步骤1、3、5),回表了两次(步骤2和4)。 覆盖索引,索引 k 已经“覆盖了”我们的查询需求

mysql 学习笔记

牧云@^-^@ 提交于 2019-11-29 08:25:16
1 在使用多列作为主键时, 上述条件必须应用到所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一) 。 2 多条SQL语句必须以分号(; ) 分隔。 3 在选择多个列时, 一定要在列名之间加上逗号 4 DISTINCT关键字作用于所有的列, 不仅仅是跟在其后的那一列 5 返回特定数量的行:各种数据库中的这一SQL实现并不相同,sqlserver是top 6 通常, ORDER BY子句中使用的列将是为显示而选择的列。 但是, 实际上并不一定要这样, 用非检索的列排序数据是完全合法的 7 如果想在多个列上进行降序排序, 必须对每一列指定DESC关键字。 8 select name from tbl where price between 5 and 10; 9 判断字段是否没值:SELECT "UID", "CID" FROM "BASEINFO"."MP_SYS" where NOT "GID" is NULL; 来源: https://www.cnblogs.com/testzcy/p/11493613.html

Mysql 排序优化与索引使用(转)

心不动则不痛 提交于 2019-11-29 08:20:48
为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索引是一个不错的方法。因为索引本身也是有序的,如果在需要排序的字段上面建立了合适的索引,那么就可以跳过排序的过程,提高SQL的查询速度。下面我通过一些典型的SQL来说明哪些SQL可以利用索引减少排序,哪些SQL不能。假设t1表存在索引key1(key_part1,key_part2),key2(key2) a.可以利用索引避免排序的SQL 1 2 3 4 SELECT * FROM t1 ORDER BY key_part1,key_part2; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2; SELECT * FROM t1 WHERE key_part1 > constant ORDER BY key_part1 ASC ; SELECT * FROM t1 WHERE key_part1 = constant1 AND key_part2 > constant2 ORDER BY key_part2; b.不能利用索引避免排序的SQL 1 2 3 4 5 6 7 8 9 10 11 //排序字段在多个索引中,无法使用索引排序 SELECT * FROM t1 ORDER BY key_part1,key_part2, key2; /

MySQL Order By索引优化

十年热恋 提交于 2019-11-29 08:20:27
在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了。 使用索引的MySQL Order By 下列的几个查询都会使用索引来解决 ORDER BY 或 GROUP BY 部分: SELECT * FROM t1 ORDER BY key_part1,key_part2,... ; SELECT * FROM t1 WHERE key_part1=constant ORDER BY key_part2; SELECT * FROM t1 WHERE key_part1=constant GROUP BY key_part2; SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC; 不使用索引的MySQL Order By 在另一些情况下,MySQL无法使用索引来满足 ORDER BY,尽管它会使用索引来找到记录来匹配 WHERE 子句。这些情况如下: *