mysql排序

mysql-查询(DQL)

落爺英雄遲暮 提交于 2019-12-18 16:02:05
+ 注释:mysql中的+号只有一个作用,就是运算符,没有连接字符串的作用,连接字符串用concat。 select 1+3;两个操作数都是数值型,则做加法运算。 select 'wj'+28; select '3'+94;只要其中有一个时字符型,则会试图将字符转换为数值型。如果转换成功,则做加法运算;如果转换失败,则将字符转换为0继续做加法运算。 select null+100;如果其中一方为null,则结果肯定为null。 concat(str1,str2,…) 注释:连接多个字符串 select concat('a','b','c'); select concat(first_name,last_name) from employees; 条件运算符:> < = != <> >= <= 注释:mysql支持两个形式的不等运算符,!=和<>都支持,但是建议<>。 作用:用于在where关键词后,用于条件筛选。 select * from employees where salary<>100; 逻辑运算符:and or not 注释:逻辑运算符用于连接条件表达式,可以用括号把条件包起来进行逻辑运算。    and(&&)两个条件都是true,则结果为true。    or(||)两个条件有一个为true,则结果为true。    not(!)条件如果为true

mysql,索引命中,查询级别

落爺英雄遲暮 提交于 2019-12-18 15:04:02
mysql索引无法命中情况 1,查询占表数据30%以上 2,小表查询 3,规定不用索引查询 4,查询条件给字符串加引号用索引,否则不用 5,条件中用到or,除非涉及到的列都有索引否则不命中 6,like 的 %在前不命中,在后命中 示例 explain select * from adminlog 执行结果: id select_type table partitjons type possible_keys key key_len ref row filtered Extra 1 SIMPLE adminlog ALL 2 100 select_type :查询类型 simple简单查询 primary 主查询 UNION 第二个或者后面的查询语句。SUBQUERY : 子查询中的第一个select] table :输出结果的表 type:查询级别 type=ALL 全表扫描, type=index 索引全扫描,遍历整个索引来查询匹配的行 type=range 索引范围扫描,常见于 <,<=,>,>=,between,in等操作符。   例     explain select * from adminlog where id>0 ,     explain select * from adminlog where id>0 and id<=100     explain

MySQL基础

◇◆丶佛笑我妖孽 提交于 2019-12-17 04:25:23
一、MySQL概述 1、什么是数据库 ?  答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?  答:他们均是一个软件,都有两个主要的功能: a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 3、什么是SQL ?   答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。 二、MySQL安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 想要使用MySQL来存储并操作数据,则需要做几件事情:   a. 安装MySQL服务端   b. 安装MySQL客户端   b. 【客户端】连接【服务端】   c. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操作(增删改查等) 下载 http://dev.mysql.com/downloads/mysql/ 安装 windows:

索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!

落爺英雄遲暮 提交于 2019-12-14 09:32:08
前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结。自上上篇写了 手动搭建Redis集群和MySQL主从同步(非Docker) 和上篇写了 动手实现MySQL读写分离and故障转移 之后,索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家。 这篇博客我会谈谈对于索引结构我自己的看法,以及分享如何从零开始一层一层向上最终理解索引结构。 从一个简单的表开始 create table user( id int primary key, age int, height int, weight int, name varchar(32) )engine = innoDb; 相信只要入门数据库的同学都可以理解这个语句,我们也将从这个最简单的表开始,一步步地理解MySQL的索引结构。 首先,我们往这个表中插入一些数据。 INSERT INTO user(id,age,height,weight,name)VALUES(2,1,2,7,'小吉'); INSERT INTO user(id,age,height,weight,name)VALUES(5,2,1,8,'小尼'); INSERT INTO user(id,age,height,weight,name)VALUES(1,4,3,1,'小泰'); INSERT INTO user(id

mySQL高级知识(八)——ORDER BY优化

丶灬走出姿态 提交于 2019-12-13 14:57:20
MySQL高级知识(八)——ORDER BY优化 前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。 0.准备 #1.创建test表。 drop table if exists test; create table test( id int primary key auto_increment, c1 varchar(10), c2 varchar(10), c3 varchar(10), c4 varchar(10), c5 varchar(10) ) ENGINE=INNODB default CHARSET=utf8; insert into test(c1,c2,c3,c4,c5) values('a1','a2','a3','a4','a5'); insert into test(c1,c2,c3,c4,c5) values('b1','b2','b3','b4','b5'); insert into test(c1,c2,c3,c4,c5) values('c1','c2','c3','c4','c5'); insert into test(c1,c2,c3,c4,c5) values('d1','d2','d3','d4','d5'); insert into test(c1

sql 字符串排序

南楼画角 提交于 2019-12-12 17:59:24
在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的。 网上提供了很多方法: 比如字段后" + 0" 或者 " *1", 但是如果是按照首字母排序实际上并没有效果, 顺序依旧让人摸不着头脑, 今天试了下做了个总结 一 按照数字排序 手动转换类型: 用下面的方法就可以了,使server_id+0之后再排序,问题解决了。 select 字段名 from 表名 order by 字段名+0 desc ; select 字段名 from 表名 order by 字段名*1 desc ; 使用MySQL函数CAST/CONVERT: mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过? CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。 这个类型 可以是以下值其中的 一个: BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL SIGNED [INTEGER] TIME UNSIGNED [INTEGER] 所以我们也可以用CAST解决问题: select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc

mysql order by limit 的一个坑

醉酒当歌 提交于 2019-12-11 17:16:34
分页查询的时候遇到的坑: 发现的问题: 对单个无索引的字段进行排序后limit .发现当被排序字段有相同值时并且在limit范围内,取的值并不是正常排序后的值, 也就是说,当排在第N行的数据可取key1、 key2 时 , 排序结果可能是key1,也可能是key2。 排序+ limit 结果 (排序键无索引) 按cnt取key_word分别前三结果: 解决: 先上个链接! https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html 这是mysql对limit的优化。 原文: If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, and may do so differently depending on the overall execution plan. In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns. 是说如果order by的列有相同的值时, mysql会随机选取这些行

Mysql相关知识总结-持续更新~~~

孤街醉人 提交于 2019-12-11 12:42:48
   2019-12-11对varchar类型排序问题的解决 在mysql默认order by 只对 数字与日期类型 可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同学介绍varchar类型排序问题如何解决。 现象描述:      select * from resultgroup where upUser = 'kkk' order by patientId desc      为什么会出现这种现象呢?就是因为 patientId 是 varchar 类型的 而order by 排序只针对数字 跟日期排序的。所以会出现上述现象。 解决办法:   1.把varchar类型字段加上0变成int类型就ok。    select * from resultgroup where upUser = 'kkk' order by patientId+0 desc     2.用mysql自带的方法 把varchar强转。 CAST/CONVERT   mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过?    CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。   这个类型 可以是以下值其中的 一个:   BINARY[(N)]   CHAR[(N)]   DATE   DATETIME  

mysql——中文数字排序的实现(FIELD)

空扰寡人 提交于 2019-12-11 06:18:49
今天遇到一个需求,要求排序输出网格信息,但是数据是第三方对接插入的,并没有给我们排好顺序。所以只能自己动手了。 下图是原数据: 我们需要将其升序输出。 使用mysql中的函数FIELD。 语法如下: SELECT identifier FROM 表名 ORDER BY FIELD(SUBSTRING(identifier,3,1),'一','二','三','四','五','六','七','八','九'); 1)ORDER BY 不用多说,排序 2)SUBSTRING的作用是截取到我们想要排序的依据,这个跟java中substring是差不多的,不多说。 3)‘一’,这个就是我们自定义的排序规则了,我们也可以定义从大到小,甚至不是顺序的,简单来说就是我们定义的才是排序规则! 输出效果: 好了,就这么简单,下一期来一波order by 的详解~ ! ! ! 谢谢观看,转载需注明出处哦~ 来源: https://www.cnblogs.com/dbright/p/12017117.html

索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!

强颜欢笑 提交于 2019-12-10 15:01:05
前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结。自上上篇写了 手动搭建Redis集群和MySQL主从同步(非Docker) 和上篇写了 动手实现MySQL读写分离and故障转移 之后,索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家。 这篇博客我会谈谈对于索引结构我自己的看法,以及分享如何从零开始一层一层向上最终理解索引结构。 从一个简单的表开始 create table user( id int primary key, age int, height int, weight int, name varchar(32) )engine = innoDb; 相信只要入门数据库的同学都可以理解这个语句,我们也将从这个最简单的表开始,一步步地理解MySQL的索引结构。 首先,我们往这个表中插入一些数据。 INSERT INTO user(id,age,height,weight,name)VALUES(2,1,2,7,'小吉'); INSERT INTO user(id,age,height,weight,name)VALUES(5,2,1,8,'小尼'); INSERT INTO user(id,age,height,weight,name)VALUES(1,4,3,1,'小泰'); INSERT INTO user(id