范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

分享10个高级sql写法

  本文主要介绍博主在以往开发过程中,对于不同业务所对应的 sql 写法进行归纳总结而来。进而分享给大家。  本文所讲述 sql 语法都是基于 MySql 8.0  博主github地址:http://github.com/wayn111 欢迎大家关注,点个star  一、ORDER BY FIELD() 自定义排序逻辑
  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,"九阴真经",  "降龙十八掌","九阴白骨爪","双手互博","桃花岛主", "全真内功心法","蛤蟆功","销魂掌","灵白山少主");
  查询结果如下:
  如上,我们设置自定义排序字段为 title 字段,然后将我们自定义的排序结果跟在 title 后面。  二、CASE 表达式
  「case when then else end」 表达式功能非常强大可以帮助我们解决 if elseif else  这种问题,这里继续用 order_diy 表举例,假如我们想在 order_diy 表加一列 level 列,根据money 判断大于60就是高级,大于30就是中级,其余显示低级,sql 如下: SELECT *,  case when money > 60 then "高级"  when money > 30 then "中级"  else "低级" END level  from order_diy;
  查询结果:
  三、EXISTS 用法
  我猜大家在日常开发中,应该都对关键词 exists 用的比较少,估计使用 in 查询偏多。这里给大家介绍一下 exists 用法,引用官网文档:
  可知 exists 后面是跟着一个子查询语句,它的作用是 「根据主查询的数据,每一行都放到子查询中做条件验证,根据验证结果(TRUE 或者 FALSE),TRUE的话该行数据就会保留」 ,下面用 emp 表和 dept 表进行举例,表结构以及数据展示:
  计入我们现在想找到 emp 表中 dept_name 与 dept表 中 dept_name 对应不上员工数据,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 表全部数据进行比较,只要有一行记录返回true。画个图展示主查询所有记录与子查询交互如下:
  第一条记录与子查询比较时,全部返回 false,所以第一行不展示。  第二行记录与子查询比较时,发现  销售部门  与 dept 表第二行 销售部  对应不上,返回 true,所以主查询该行记录会返回。 第二行以后记录执行结果同第一条。  四、GROUP_CONCAT(expr) 组连接函数
  「GROUP_CONCAT(expr)」  组连接函数可以返回分组后指定字段的字符串连接形式,并且可以指定排序逻辑,以及连接字符串,默认为英文逗号连接。这里继续用 order_diy 表举例:sql 如下: SELECT name, GROUP_CONCAT(title ORDER BY id desc  SEPARATOR "-")  from order_diy GROUP BY name ORDER BY NULL;
  查询结果:
  如上我们通过  「GROUP_CONCAT(title ORDER BY id desc SEPARATOR "-")」  语句,指定分组连接 title 字段并按照 id 排序,设置连接字符串为 - 。 五、自连接查询
  自连接查询是 sql 语法里常用的一种写法,掌握了自连接的用法我们可以在 sql 层面轻松解决很多问题。这里用 tree 表举例,结构以及表数据展示:
  tree 表中通过 pid 字段与 id 字段进行父子关联,假如现在有一个需求,我们想按照父子层级将 tree 表数据转换成  一级职位 二级职位 三级职位  三个列名进行展示,sql 如下: SELECT t1.job_name "一级职位", t2.job_name "二级职位", t3.job_name "三级职位"  from tree t1 join tree t2 on t1.id = t2.pid left join tree t3 on t2.id = t3.pid  where t1.pid = 0;
  结果如下:
  我们通过  「tree t1 join tree t2 on t1.id = t2.pid」  自连接展示 一级职位 二级职位 ,再用 「left join tree t3 on t2.id = t3.pid」  自连接展示 二级职位 三级职位 ,最后通过「where 条件 t1.pid = 0」 过滤掉非一级职位的展示,完成这个需求。
  六、更新 emp 表和 dept 表关联数据
  这里继续使用上文提到的 emp 表和 dept 表,数据如下:
  可以看到上述 emp 表中 jack 的部门名称与 dept 表实际不符合,现在我们想将 jack 的部门名称更新成 dept 表的正确数据,sql 如下:  update emp, dept set emp.dept_name = dept.dept_name where emp.dept_id = dept.dept_id;
  查询结果:
  我们可以直接关联 emp 表和 dept 表并设置关联条件,然后更新 emp 表的 dept_name 为 dept 表的 dept_name。  七、ORDER BY 空值 NULL 排序
  ORDER BY 字句中可以跟我们要排序的字段名称,但是当字段中存在 null 值时,会对我们的排序结果造成影响。我们可以通过  「ORDER BY IF(ISNULL(title), 1, 0)」  语法将 null 值转换成0或1,来达到将 null 值放到前面还是后面进行排序的效果。 SELECT * FROM test_rollup ORDER BY  IF(ISNULL(title), 0, 1), money;
  查询结果:
  image.png  八、with rollup 分组统计数据的基础上再进行统计汇总
  MySql 中可以使用 with rollup 在分组统计数据的基础上再进行统计汇总,即用来得到 group by 的汇总信息。这里继续用order_diy 表举例,sql 如下:  SELECT name, SUM(money) as money  FROM order_diy GROUP BY name WITH ROLLUP;
  查询结果:
  可以看到通过  「GROUP BY name WITH ROLLUP」  语句,查询结果最后一列显示了分组统计的汇总结果。但是 name 字段最后显示为 null,我们可以通过 coalesce()  比较函数,返回第一个非空参数。 SELECT coalesce(name, "总金额") name, SUM(money) as money  FROM order_diy GROUP BY name WITH ROLLUP;
  查询结果:
  image.png  九、with as 提取临时表别名
  with as 语法需要 MySql 8.0以上版本,它的作用主要是提取子查询,方便后续共用,更多情况下会用在数据分析的场景上。
  如果一整句查询中 「多个子查询都需要使用同一个子查询」 的结果,那么就可以用with as,将共用的子查询提取出来,加个别名。后面查询语句可以直接用,对于大量复杂的SQL语句起到了很好的优化作用。这里继续用 order_diy 表举例,这里使用with as给出sql 如下: -- 使用 with as with t1 as (SELECT * from order_diy where money > 30), t2 as (SELECT * from order_diy where money > 60) SELECT * from t1  where t1.id not in (SELECT id from  t2) and t1.name = "周伯通";
  查询结果:
  这个 sql 查询了 order_diy 表中 money 大于30且小于等于60之间并且 name 是周伯通的记录。  10、存在就更新,不存在就插入
  MySql 中通过 「on duplicate key update」 语法来实现存在就更新,不存在就插入的逻辑。插入或者更新时,它会根据表中主键索引或者唯一索引进行判断,如果主键索引或者唯一索引有冲突,就会执行「on duplicate key update」 后面的赋值语句。 这里通过 news 表举例,表结构和说数据展示,其中 news_code 字段有唯一索引:
  添加sql:  -- 第一次执行添加语句 INSERT INTO `news` (`news_title`, `news_auth`, `news_code`)  VALUES ("新闻3", "小花", "wx-0003")  on duplicate key update news_title = "新闻3"; -- 第二次执行修改语句 INSERT INTO `news` (`news_title`, `news_auth`, `news_code`)  VALUES ("新闻4", "小花", "wx-0003")  on duplicate key update news_title = "新闻4";
  结果如下:
  总结
  到这里,本文所分享的10个高级sql写法就全部介绍完了,希望对大家日常开发 sql 编写有所帮助,喜欢的朋友们可以点赞加关注。

干部文摘张建春真正把读书学习当成一种生活态度一种工作责任一种精神追求,涵育爱读书读好书善读书的阅读风尚张建春真正把读书学习当成一种生活态度一种工作责任一种精神追求,涵育爱读书读好书善读书的阅读风尚干部文摘今年4月23日,首届全民阅读大会在京开幕,习近平总书记致信祝贺,指出阅读是人类中国科学家在14万个颗粒中分离出嫦娥石嫦娥石发现于嫦娥五号月壤的玄武岩碎屑中,是新的磷酸盐矿物,属于陨磷钠镁钙石(Merrillite)族。2021年6月,嫦娥五号月壤样品向全社会开放申请。中核集团核地研院是首批获得月机器人殖民地续作奥拓星球强敌上架Steam支持简体中文机器人殖民地续作奥拓星球强敌(AutonautsVS。PirateBots)上架Steam,支持简体中文。在奥拓星球强敌中,玩家要建造并保卫一个坚不可破的基地。组建和编程一个机器人地球上的水是从哪里来的?从太空中看地球,它是一个大部分为蓝色的圆球,那些蓝色的部分便是水。在太阳系中,地球是唯一拥有液态水的天体。这让人们不禁想问地球上的水来自何处?地球上有多少水?地球表面积约5。1亿平当心你的合伙人04宝马车04宝马车交通工具对于任何一个公司发展来讲,永远是必不可少的。公司在创立之初,没有资金,股东也没有实缴股份,当然也没有钱买车。创业初期,一切都是围绕着谈项目签业务赚钱为目的。但是,低价格也有高配置千元机也有优秀的这三款看过来款款都是良心推荐高配置的手机价格就一定高,这可不一定,随着手机技术的不断进步,性能的不断加强,价格也一再降低,现在低价格也可以买到高配置的手机了,而且还非常的优秀,今天我就良心推荐三款这样的手机,重大利好10家公司发布重大利好消息,1公司净利润大增550上市公司重大利好消息广汽集团16月公司实现营业收入484。48亿元,同比增长41。17归母净利润57。51亿元,同比增长32。61顺丰控股顺丰控股实现营业收入1300。64亿元,同陈萌晒做孕检晒品,心疼做检查花了几百大洋,网友陈亚男打脸了不管是男人还是女人,到了一定的年龄就要成家立业,婚后孝顺父母,更要尽快迎来自己的小宝宝,只有将这个传承下去这辈子才不算白来。朱小伟娶陈亚男的时候,朱家人就开始期待迎接小生命的到来,俄计划用中俄管线替代北溪2,是双赢还是画饼?中方需要仔细分析中俄西伯利亚力量2天然气管线,已经确定2024年开工。近日,俄罗斯副总理称,即将开工的中俄天然气管线项目,将有希望去取代目前前景不明的北溪2管线。但这条管线建成还需7年时间,是否存关于第九版这些名词你弄通了没有!下面,日喀则市融媒体中心的小编用图文音向大家解释,大家记得听一听哦!周末证券市场释放三大消息,明天a股开盘会怎么走?这个周末股民过得很不愉快,因为大部分股民的股票还处于被套中,意味着炒股亏钱了,周末根本高兴不起来,内心只能祈祷下周a股牛起来。本想周末会有利好消息出来,刺激下周a股强势反攻,让股民
完美世界再遭群嘲,官方紧急放出柳神全身照,却又惹很多粉丝不满完美世界第62集已经更新,但是让我没有想到的是,这一集出来后却遭到很多网友的群嘲,看看官方微博下方的评论区就知道了,各种批评,从火灵儿到云曦,再到魔改石昊的人设,乃至于删减了重要人世界最穷总统90元工资捐献,住郊外板房,开三千块的车乌拉圭2009年当选的何塞穆希卡总统就是目前世界上最穷的总统,据说他在当选总统之后,任然坚持居住在首都郊外的一个偏远农场,而在那里仅仅只有一条一车道的泥土路,以及一间简陋的板房,最维金斯当库里进入了那个独特的领域,能做的就是欣赏在今日的总决赛中,勇士客场10797胜凯尔特人,大比分扳平为22。本场比赛,勇士前锋安德鲁维金斯上场43分钟,17投7中,得到17分16篮板2助攻,赛后他接受了记者采访。谈到自己的为防匈牙利阻挠对华制裁,欧洲议会抢先下手,欲剥夺其否决权近日,欧洲议会对中国密集出招,先是以47460的压倒性票数通过了所谓印太安全挑战报告,无端指责中国威胁欧盟安全。紧接着,又以5131的结果通过一项涉疆决议,对中国内政指指点点,均遭禁赛倒计时!知名记者却爆出猛料,国足迎来利好,陈戌源放心了关注国内足球的球迷们应该都知道,中国足协最近又陷入了麻烦。由于合同违约,中国女足的前主帅布鲁诺一纸诉状把中国足协告上了国际体育仲裁庭,经过国际仲裁庭审议,认定中国足协在解雇布鲁诺时TA记者发问想象一下如果库里签的是耐克直播吧6月11日讯总决赛G4,勇士战胜凯尔特人。此役,库里出战40分41秒,26投14中,三分球14中7,9罚8中,得到43分10板4助。赛后TA活塞记者JamesEdwardsI唐山打人事件,请给公众一个说法6月10号的唐山打人事件,简直震惊了我手机上所有的社交平台。半夜翻评论有生气的气到睡不着觉的,有为被打女生鸣不平的,有骂那些施暴作恶的男人的,甚至还有严重跑偏挑起性别对立的。暂时先LPL英文解说开团,LCK女记者当场破防!就四号种子一事,展开争论各位LPL的观众和英雄联盟召唤师大家好,这里是天下游戏汇。今年的MSI季中冠军赛举办期间,爆发出了很多和RNG相关的争议,导致国外的各大论坛,每天都在吵架,LCK那边的观众是重点针轮到你敬酒时,建议牢记3句敬酒话,让全桌人对你刮目相看中国是个讲究人情世故的地方,人与人之间编织成了巨大的关系网,而在饭局上喝酒谈事,又是展开这个关系网的重要润滑剂。中国的酒桌文化,堪称博大精深,不但是宾主的待客之道,更是酒桌上的智慧魅族新品来了给大伙看一下今天的主要产品吧,省的看发布会去了,主要还是贯彻落实了魅友都用iPhone的核心思想。魅族现在一直在输出设计,输出潮玩的概念。比如长相很讨喜的耳机啊,充电宝音响键盘等外老年斑是怎么来的?用红霉素软膏去除,可靠吗?详细跟你说一说奶奶,你走远点,我不要你抱,你身上的斑太难看了。听了孙子这么说,李奶奶很是心痛,儿子和儿媳妇结婚多年,好不容易盼来这么一个大孙子,可是孩子却不跟自己亲近,就连儿媳妇都嫌自己有点不干