MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC,还可以通过 ORDER BY FIELD(str,str1,...) 自定义字符串/数字来实现排序。这里用 order_diy 表举例,结构以及表数据展示:ORDER BY FIELD(str,str1,...) 自定义排序sql如下: SELECT * from order_diy ORDER BY FIELD(title,'九阴真经', '降龙十八掌','九阴白骨爪','双手互博','桃花岛主', '全真内功心法','蛤蟆功','销魂掌','灵白山少主'); 复制代码 查询结果如下: image.png如上,我们设置自定义排序字段为 title 字段,然后将我们自定义的排序结果跟在 title 后面。 case when then else end表达式功能非常强大可以帮助我们解决 if elseif else 这种问题,这里继续用 order_diy 表举例,假如我们想在 order_diy 表加一列 level 列,根据money 判断大于60就是高级,大于30就是中级,其余显示低级,sql 如下: 在SQL编程中,掌握一些高级技巧能够极大地提升数据库操作的效率和灵活性。本文将介绍10个高级SQL写法,这些技巧主要源自MySQL 8.0环境,适用于处理各种业务需求。 1. **ORDER BY FIELD() 自定义排序** 在MySQL中,除了常见的`ASC`和`DESC`用于排序外,`ORDER BY FIELD()`函数允许我们自定义排序顺序。例如,我们可以创建一个名为`order_diy`的表,并按照特定的字符串或数字顺序进行排序。如下面的SQL语句所示: ```sql SELECT * FROM order_diy ORDER BY FIELD(title, '九阴真经', '降龙十八掌', '九阴白骨爪', '双手互博', '桃花岛主', '全真内功心法', '蛤蟆功', '销魂掌', '灵白山少主'); ``` 这个查询将按照指定的顺序排列`title`字段的值。 2. **CASE表达式** `CASE WHEN THEN ELSE END`表达式提供了一种灵活的方式来处理条件逻辑,类似于编程语言中的`if...else`结构。在`order_diy`表中,如果我们要根据`money`字段值设定`level`级别(大于60为高级,大于30为中级,其余为低级),可以这样编写SQL: ```sql SELECT *, CASE WHEN money > 60 THEN '高级' WHEN money > 30 THEN '中级' ELSE '低级' END AS level FROM order_diy; ``` 这个查询会在结果集中添加一个新的`level`列,显示对应级别的分类。 3. **EXISTS用法** `EXISTS`关键字通常用于子查询,它检查子查询是否返回至少一行数据。与`IN`查询相比,`EXISTS`在某些情况下可能更有效率。例如,找出`emp`表中`dept_name`在`dept`表中没有对应项的员工,可以使用如下查询: ```sql SELECT * FROM emp e WHERE EXISTS (SELECT * FROM dept p WHERE e.dept_id = p.dept_id AND e.dept_name != p.dept_name); ``` `EXISTS`会检查每个`emp`表的记录,如果在`dept`表中找不到匹配的`dept_name`,则返回`TRUE`,该记录就会被包含在结果集中。 4. **GROUP_CONCAT(expr) 组连接函数** `GROUP_CONCAT(expr)`函数允许我们将分组后的特定字段值合并成一个字符串,同时可以指定排序和分隔符。例如,如果我们想要将`order_diy`表中每个`name`对应的`title`按`id`降序连接,可以使用以下SQL: ```sql SELECT name, GROUP_CONCAT(title ORDER BY id DESC SEPARATOR '-') FROM order_diy; ``` 这将返回每个`name`的`title`列表,按照`id`降序排列,用`-`作为分隔符。 除此之外,还有其他高级SQL技巧,如窗口函数、子查询优化、连接操作等,它们都能在特定场景下提升SQL查询的效率和功能性。了解并熟练运用这些技巧,可以更好地应对复杂的数据分析和处理任务。
剩余20页未读,继续阅读
- 粉丝: 2209
- 资源: 6175
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的操作系统实验项目.zip
- (源码)基于C++的分布式设备配置文件管理系统.zip
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip