mysql 游戏背包_MySQL实战技能包
1. 表字段按照汉字拼音排序
命令:
若库表为uft8字符集时,需转换为gbk编码再排序:【比较常见】
order by convert(columnname(排序的列名) using gbk) asc;
order by convert(columnname(排序的列名) using gbk) desc;
若库表为gbk字符集时,直接排序:
order by columnname(排序的列名) asc;
order by columnname(排序的列名) desc;
举例:
对数据库user表的name字段按照汉字拼音排序,user表数据如下:
user表
查看user表的DDL:user表采用utf8字符集,中文不能按照拼音排序,需转换为gbk编码,再进行排序
user DDL
对user表的name字段进行gbk编码再排序:【升序的话,英文排在中文前面的;反之降序排在后面】
name asc
name desc
2. 查询表中重复记录/查询表中某字段值存在重复值
一般不存在表中有完全重复的记录,因为我们在设计数据库表时,都有主键(id),不可重复,所以常见情况都是表中某字段值存在重复。
<1> 查询某一字段存在重复值的命令:
举例:查询user表中name字段重复值
方式一:使用group by和having 【简洁,高效,推荐】
命令格式:select columnname(字段名), count(*) as count from tablename(数据库表名) group by columnname(字段名) having count > 1;
具体命令:
select name from user group by name having count(name) > 1;
或
select name, count(*) as count from user group by name having count > 1;
或
select name, count(name) as count from user group by name having count > 1 order by count desc;
name字段存在重复值
name字段存在重复值命令扩展
方式二:使用group by和临时表
命令:select name from (select name, count(name) as count from user group by name) as usertemp where count > 1;
group by+临时表
<2> 查询多个字段同时存在重复值的命令:
举例:查询user表中name和address字段同时存在重复值
命令格式:
select columnname1(字段名1), columnname2(字段名2), count(*) as count from tablename(数据库表名) group by columnname1(字段名1), columnname2(字段名2) having count > 1;
name,address字段值都重复
<3> 查询某一字段存在重复值的具体行记录信息:
方式一:使用in + 子查询 【数据量大时,耗时长,效率低】
举例:先用子查询查出user表中name字段的重复值,然后在user全表中做in匹配。
name字段值重复的具体行记录
方式二:使用临时表做关联查询 【建立临时表,耗时短,效率高,推荐】
举例:把user表中重复的name字段值存放临时表usertemp中,使用关联查询,查出重复name字段的具体行记录信息。
临时表关联查询字段重复值行记录
说明:using() 括号必须有,关联查询 join using() 表明要关联的两个表user和usertemp,关联的字段名是一致的,都为name。
<4> 查询多个字段同时存在重复值的具体行记录信息:
举例:
name,address字段值都重复的具体行记录
3. 去除表中重复记录
表中重复记录: 指的是表中完全重复的记录,即所有字段值均重复。
一般我们在设计数据库表时,都有主键id,不可重复,所以一般不存在表中记录完全重复的情况;若出现了此情况,建议先从表结构设计上查找问题,增加主键,优化表结构。
查询表中完全重复的记录命令:【不常用】
select distinct * from tablename(数据库表名);
4. 查询第N高薪水
思路:先按薪水字段降序排序,同时去掉重复项,结合limit,即可查出。
举例:user表信息
user表信息
从user表中找出薪水第三高的用户信息
降序+去重+limit
关于limit的坑提醒:
查询user表中薪水第三高的用户信息,如下写sql,可以吗?
select distinct salary, user.* from user order by salary desc limit 3-1,1;
select distinct salary, user.* from user order by salary desc limit (3-1),1;
当然不可以,limit不支持计算表达式,带不带括号都不行,如下报错:
limit不支持计算表达式
总结:查询第N高 = 降序(desc) + 去重(distinct) + limit(不含计算表达式)
扩展:查询第N高薪水,如果不存在,返回null。
思路:先查出第N高薪水,使用ifnull函数做判断显示。
举例:
ifnull+降序+去重+limit
5. 查询涉及取余运算MOD(x,y)
MOD(x,y):返回x除以y后的余数。
select mod(5,2); -- 返回1
实际应用举例:从user表中查出所有id为奇数的男性的用户信息,且按照薪资从高到低排名。
mod函数
6. 交换值
实际应用:user表中,更新操作,将男性(m)和女性(f)的性别进行交换。
update user set sex = if(sex='f','m','f');
或者
UPDATE user SET sex = (CASE sex WHEN 'm' THEN 'f' ELSE 'm' END); (为了区分字段,关键字大写)
交换值
7. 交换相邻行的值
实际应用:user表中,交换相邻两行的用户信息,若user表中用户总数为奇数的话,最后一行用户信息不变。
解题思路:交换相邻两行数据可以转换为交换相邻两行id,然后按照id排序即可。
select (
case when mod(id,2)=1 and id = (select max(id) from user) then id
when mod(id,2)=1 then id+1 else id-1
end
) as id, name, sex, age, phone, address, salary, create_time, update_time from user order by id;
交换相邻行的值
8. 相隔几天DATEDIFF(d1,d2)
DATEDIFF(d1,d2):返回d1 -> d2之间相隔的天数
select DATEDIFF('2001-01-01','2001-02-02'); -- -32
实际应用:有一温度表weather记录着每天的平均温度,查出后一天比前一天温度高的日期。
温度表:
weather表
后一天比前一天温度高的日期:
select w1.date from weather w1 inner join weather w2 on DATEDIFF(w1.date, w2.date) = 1 and w1.temperature > w2.temperature;
后一天比前一天温度高的日期
9.MySQL连接
分为三类:
<1> inner join 内连接或等值连接
等价写法:
inner join <==> join
select * from a inner join b where a.id = b.id <==> select * from a, b where a.id = b.id;
inner join a>b
inner join a
<2> left join 左连接
left join
<3> right join 右连接
right join
后续持续更新,完善...
mysql 游戏背包_MySQL实战技能包相关推荐
- mysql 游戏背包_用sql实现背包问题
背包问题是一道经典的组合优化问题,给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,如何选择使得物品的总价格最高,背包问题又可以分成01背包,完全背包和多重背包等,网上关于这个问题的解答有 ...
- mysql 设置时区_MySQL实战干货 | 如何处理由时区设置引发的 SQL 执行“卡顿”?...
作者:田杰,阿里云数据库高级运维专家 查询执行时间长引发应用感知 "卡顿" 的场景在数据库的日常支持和使用中并不少见,但由于时区设置引发的 SQL 执行"卡顿" ...
- mysql游戏名称_MySQL 游戏排行榜
今天在坛子上看到了,顺便写下来. 有两种方法: 1.效率不高,因为有子查询.但是简洁.而且我对SOCRES表做了INDEX.所以性能上也差不了多少. mysql> show create tab ...
- mysql范围条件_MySQL 索引及优化实战(一)
mysql 随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能.高并发和高可用的系统. ...
- 【阅读笔记】Java游戏服务器架构实战
[阅读笔记]Java游戏服务器架构实战 书籍链接:Java游戏服务器架构实战 作者提供的源码链接:kebukeYi / book-code 这里对书籍中比较重要的知识点(精华部分)进行摘录(总结) 文 ...
- 黑白游戏逆向传奇实战:汇编,CE,OD,易语言,反外挂,网络安全
黑白游戏逆向传奇实战 第一课:查找人物角色相关信息 [录播]第一课:查找人物角色相关信息(12分钟) 02 第二课:查找普攻基址实现打怪 [录播]第二课:查找普 ...
- mysql decode语句_mysql数据灾难恢复方案
数据库备份:将数据库中存在的现有数据,进行存放成为副本数据,可以解决数据容灾,提高系统的高可用性和灾难恢复性,数据崩溃时,以最小代价重新恢复数据.数据备份的分类: 物理备份:指对数据库操作系统的物理文 ...
- dnslog在mysql在linux_DNSLog在MySQL注入中的实战
关于DNSlog在Web攻击的利用 简单理解就是在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起DNS请求,这个时候可以通过DNSlog这种方式把想获得的数据外带出来. 常用在哪些情况下SQL ...
- Skynet 游戏服务器开发实战
Skynet 是一个使用 C 和 Lua 语言开发的轻量级游戏框架.本次课程中,我们将了解到一个游戏服务器从游戏逻辑方面存在的 5 个模块:注册和登录.网络协议.数据库.玩法逻辑.其他通用模块.并逐步 ...
最新文章
- Linux系统日志分析与管理(14)
- Google 出品的 Java 编码规范和编程指南!
- arp 命令详解(安装、arp欺骗防御)
- [Oracle]oracle概念和术语
- 11g R2 RAC客户端负载均衡配置
- 钉钉web版防撤回、屏蔽已读
- 自学鄙视链顶端的王者
- 排查DHCP服务器故障
- 网页设计html5留言板代码,web网页设计期末大作业_留言板制作.doc
- jQueryAPI_1.7.1 中文版
- 定时任务Cron常用表达式
- python omron Fins -PLC和上位机socket通讯( tcy)
- PowerShell 实现企业微信机器人推送消息
- 我的世界服务器修改宠物属性,我的世界怎么改宠物名字?
- 正则表达式re之模块函数和编译标志
- excel调色板自定颜色_抓住Excel调色板
- 基于javaweb体育馆、体育器材管理系统
- 安卓模拟器 arm linux,让x86的android模拟器能模拟arm架构系统
- 微信小程序开发——JS中字符和数组的操作
- Vue 中使用 Font Awesome 字体图标