应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

分享10个高级sql写法

  本文主要介绍博主在以往开发过程中,对于不同业务所对应的sql写法进行归纳总结而来。进而分享给大家。本文所讲述sql语法都是基于MySql8。0博主github地址:http:github。comwayn111欢迎大家关注,点个star一、ORDERBYFIELD()自定义排序逻辑
  MySql中的排序ORDERBY除了可以用ASC和DESC,还可以通过ORDERBYFIELD(str,str1,。。。)自定义字符串数字来实现排序。这里用orderdiy表举例,结构以及表数据展示:
  ORDERBYFIELD(str,str1,。。。)自定义排序sql如下:SELECTfromorderdiyORDERBYFIELD(title,九阴真经,降龙十八掌,九阴白骨爪,双手互博,桃花岛主,全真内功心法,蛤蟆功,销魂掌,灵白山少主);
  查询结果如下:
  如上,我们设置自定义排序字段为title字段,然后将我们自定义的排序结果跟在title后面。二、CASE表达式
  casewhenthenelseend表达式功能非常强大可以帮助我们解决ifelseifelse这种问题,这里继续用orderdiy表举例,假如我们想在orderdiy表加一列level列,根据money判断大于60就是高级,大于30就是中级,其余显示低级,sql如下:SELECT,casewhenmoney60then高级whenmoney30then中级else低级ENDlevelfromorderdiy;
  查询结果:
  三、EXISTS用法
  我猜大家在日常开发中,应该都对关键词exists用的比较少,估计使用in查询偏多。这里给大家介绍一下exists用法,引用官网文档:
  可知exists后面是跟着一个子查询语句,它的作用是根据主查询的数据,每一行都放到子查询中做条件验证,根据验证结果(TRUE或者FALSE),TRUE的话该行数据就会保留,下面用emp表和dept表进行举例,表结构以及数据展示:
  计入我们现在想找到emp表中deptname与dept表中deptname对应不上员工数据,sql如下:SELECTfromempewhereexists(SELECTfromdeptpwheree。deptidp。deptidande。deptname!p。deptname)
  查询结果:
  我们通过exists语法将外层emp表全部数据放到子查询中与一一与dept表全部数据进行比较,只要有一行记录返回true。画个图展示主查询所有记录与子查询交互如下:
  第一条记录与子查询比较时,全部返回false,所以第一行不展示。第二行记录与子查询比较时,发现销售部门与dept表第二行销售部对应不上,返回true,所以主查询该行记录会返回。第二行以后记录执行结果同第一条。四、GROUPCONCAT(expr)组连接函数
  GROUPCONCAT(expr)组连接函数可以返回分组后指定字段的字符串连接形式,并且可以指定排序逻辑,以及连接字符串,默认为英文逗号连接。这里继续用orderdiy表举例:sql如下:SELECTname,GROUPCONCAT(titleORDERBYiddescSEPARATOR)fromorderdiyGROUPBYnameORDERBYNULL;
  查询结果:
  如上我们通过GROUPCONCAT(titleORDERBYiddescSEPARATOR)语句,指定分组连接title字段并按照id排序,设置连接字符串为。五、自连接查询
  自连接查询是sql语法里常用的一种写法,掌握了自连接的用法我们可以在sql层面轻松解决很多问题。这里用tree表举例,结构以及表数据展示:
  tree表中通过pid字段与id字段进行父子关联,假如现在有一个需求,我们想按照父子层级将tree表数据转换成一级职位二级职位三级职位三个列名进行展示,sql如下:SELECTt1。jobname一级职位,t2。jobname二级职位,t3。jobname三级职位fromtreet1jointreet2ont1。idt2。pidleftjointreet3ont2。idt3。pidwheret1。pid0;
  结果如下:
  我们通过treet1jointreet2ont1。idt2。pid自连接展示一级职位二级职位,再用leftjointreet3ont2。idt3。pid自连接展示二级职位三级职位,最后通过where条件t1。pid0过滤掉非一级职位的展示,完成这个需求。
  六、更新emp表和dept表关联数据
  这里继续使用上文提到的emp表和dept表,数据如下:
  可以看到上述emp表中jack的部门名称与dept表实际不符合,现在我们想将jack的部门名称更新成dept表的正确数据,sql如下:updateemp,deptsetemp。deptnamedept。deptnamewhereemp。deptiddept。deptid;
  查询结果:
  我们可以直接关联emp表和dept表并设置关联条件,然后更新emp表的deptname为dept表的deptname。七、ORDERBY空值NULL排序
  ORDERBY字句中可以跟我们要排序的字段名称,但是当字段中存在null值时,会对我们的排序结果造成影响。我们可以通过ORDERBYIF(ISNULL(title),1,0)语法将null值转换成0或1,来达到将null值放到前面还是后面进行排序的效果。SELECTFROMtestrollupORDERBYIF(ISNULL(title),0,1),money;
  查询结果:
  image。png八、withrollup分组统计数据的基础上再进行统计汇总
  MySql中可以使用withrollup在分组统计数据的基础上再进行统计汇总,即用来得到groupby的汇总信息。这里继续用orderdiy表举例,sql如下:SELECTname,SUM(money)asmoneyFROMorderdiyGROUPBYnameWITHROLLUP;
  查询结果:
  可以看到通过GROUPBYnameWITHROLLUP语句,查询结果最后一列显示了分组统计的汇总结果。但是name字段最后显示为null,我们可以通过coalesce()比较函数,返回第一个非空参数。SELECTcoalesce(name,总金额)name,SUM(money)asmoneyFROMorderdiyGROUPBYnameWITHROLLUP;
  查询结果:
  image。png九、withas提取临时表别名
  withas语法需要MySql8。0以上版本,它的作用主要是提取子查询,方便后续共用,更多情况下会用在数据分析的场景上。
  如果一整句查询中多个子查询都需要使用同一个子查询的结果,那么就可以用withas,将共用的子查询提取出来,加个别名。后面查询语句可以直接用,对于大量复杂的SQL语句起到了很好的优化作用。这里继续用orderdiy表举例,这里使用withas给出sql如下:使用withaswitht1as(SELECTfromorderdiywheremoney30),t2as(SELECTfromorderdiywheremoney60)SELECTfromt1wheret1。idnotin(SELECTidfromt2)andt1。name周伯通;
  查询结果:
  这个sql查询了orderdiy表中money大于30且小于等于60之间并且name是周伯通的记录。10、存在就更新,不存在就插入
  MySql中通过onduplicatekeyupdate语法来实现存在就更新,不存在就插入的逻辑。插入或者更新时,它会根据表中主键索引或者唯一索引进行判断,如果主键索引或者唯一索引有冲突,就会执行onduplicatekeyupdate后面的赋值语句。这里通过news表举例,表结构和说数据展示,其中newscode字段有唯一索引:
  添加sql:第一次执行添加语句INSERTINTOnews(newstitle,newsauth,newscode)VALUES(新闻3,小花,wx0003)onduplicatekeyupdatenewstitle新闻3;第二次执行修改语句INSERTINTOnews(newstitle,newsauth,newscode)VALUES(新闻4,小花,wx0003)onduplicatekeyupdatenewstitle新闻4;
  结果如下:
  总结
  到这里,本文所分享的10个高级sql写法就全部介绍完了,希望对大家日常开发sql编写有所帮助,喜欢的朋友们可以点赞加关注。

赵露思身穿黑色镂空连衣裙,身高不足一米六,全靠一双高跟鞋撑着赵露思身穿黑色镂空修身连衣裙,现身在上海某活动现场中,当她向活动现场走来时,一身修身的小黑裙,引起不少观众的眼球。看着记者在拍她时,她也非常随和亲切,并伸出左手向观众打招呼,也……我喜欢喝绿茶有的人说喝绿茶可以抗癌,可有的人却说喝绿茶会致癌。下面我用自己的亲身经历来说一下喝绿茶的事?我原本是不能喝绿茶的,一喝就肚子痛。九年多前我得了癌症,手术出院后,有一……买白酒时,店主问自己喝还是送人,切记别乱回答,里面门道很大自古至今,人们的饭桌上就少不了酒字,在喝酒的过程中,不仅能够品味酒之美,而且能够通过酒增进彼此之间的关系,所以送礼送酒也就成了一大潮流。尤其是朋友之间馈赠佳品,总也少不了……一个烂尾完结的IP,怎么靠游戏改编秽土转生?提到西方奇幻,我们往往会想到J。R。R。托尔金创造的中土世界,或者《龙与地下城》里的诸多剧本。在许多西方奇幻作品的背景设定里,往往存在着矮人、精灵和兽人等各种奇幻种族,剑与魔法……重庆这个藏在城中心的水库,钓鱼郊游耍水都可以重庆从来不缺湖泊,在那些山水环绕的地方,非常适合进行户外活动。摄影by重庆周末去哪8群小舟位于渝北双凤桥的东方红水库,算是市区藏得极深的宝藏景点,在这里可以散步、钓……十全大补丸人参养荣丸前列舒通胶囊能长期服用吗?注意什么?好医生为健康护航十全大补丸组方为党参、炒白术、茯苓、炙甘草、当归、川芎、酒白芍、熟地黄、炙黄芪、肉桂。方中党参补脾健中,益气生血,阳生阴长,熟地补血滋阴,填精生髓,共为君……为什么个股出现三线合一之后一定会涨?揭秘三线合一战法今天天气很那个,但心情非常不错,没有出现所谓的压抑,看一看外面感觉心情舒坦。说说股市,今天股市的走势在预料之中,没有出现所谓的暴跌暴涨,盯盘几十年,深感身体比什么都重要,哈哈。……阳,可能在所难免,积极面对,正确调养非常关键解封后的街道并没有往日的熙熙攘攘最近症状寒包火较多,临床表现也是:恶寒重,头痛身痛重,无汗。热像也很明显,发热39以上的很多,咽痛很多。传染性很强,这就是温病的表现……披荆斩棘的男人会选择什么样的腕表?〔腕表之家时髦星腕〕上周五,《披荆斩棘的哥哥第二季》总决赛播出,17位哥哥得以成团,在最后的舞台上,哥哥们贡献出了他们最为精彩的表演《莫欺少年穷》、《还在流浪》、《凤毛麟角》等……知名女星艾梅伯疑街边大便!全过程视频曝光,当街穿脱裤子胆子大近日,女星艾梅伯德疑似被拍到深夜在西班牙的街头随地大便,女神形象毁于一旦。起因是外网网红JosephMorris日前上传了一段视频,指他收到来自西班牙的网友给他发的爆料,……弗洛安欧洲人对中国新能源汽车品牌的关注度在持续升温继去年《百年大党老外讲故事》百集融媒体产品,境内外播放量突破16亿之后,老外讲故事迎来第二季《海外员工看中国》。100位不同国度的海外员工,用最接地气的方式,讲述自己在中……中国男篮VS伊朗3大奇兵拯救杜锋,周鹏再当队长,MVP三分发11月份国内篮坛的热点话题是男篮国家队,目前杜锋已经带队奔赴赛区,参加世预赛第五窗口期的比赛,接下来对阵伊朗和巴林难度不小,除了周琦可能因伤不能出战以外,这次阵容构成略显单薄,……
想要孩子将来少走弯路,家长要谨记养儿三不和养女四忌大家好,我是践行终身学习的西红柿妈妈!家长们,你家生的女儿还是男孩呢?现在养育孩子很不容易,需要我们科学育儿,而且男孩和女孩也是不同的养法。一旦父母用错了方法、犯了……广东核心内线即将退役?你们想多了,因为杜锋还离不开他广东队的核心内线即将退役,先不说今年的他已经超过了32岁,就是他在未来几个赛季的状态也将不可避免地持续下滑,在这种情况下,貌似退役也就成为他唯一的选择。但事情的真相却并非如此,……冀中装备石煤机公司智能掘进机研制获批中央引导地方科技发展资金【来源:河北省国有资产监督管理委员会国资动态】石煤机公司智能掘进机研制获批中央引导地方科技发展资金项目日前,由冀中装备石煤机公司承担、河北科技大学参加的智能型悬臂式……11年后再看回家的诱惑,配角爆火,主角糊了,差别太大2011年,《回家的诱惑》开播,从一众电视剧中脱颖而出,成为时下最热播剧。剧中人物无论是主角还是配角都个性鲜明,演员将每一个角色都演绎得非常到位,连剧中的台词也十分出彩,……有面子更有里子高品质纯电SUV推荐随着中国新能源汽车发展逐步提速,充电基建在全国区域的快速布局让新能源车出行越发便捷。新能源车相比于燃油车拥有更强的动力与提速响应、安静的行驶品质以及智能化的用车体验,成为许多敢……三大招儿助攻神十三平安着陆,等你们回家离开地球近200天的神十三终于快回家啦空间站绕地球飞行约90分钟,空间站上的宇航员每24小时大约能看到16次日出日落这样的一天他们重复了一百七十多次。终于在人间最美……普拉蒂尼起诉国际足联主席因凡蒂诺贪腐,两人曾是亲密搭档澎湃新闻记者蒲垚磊北京时间4月5日晚,前欧足联主席普拉蒂尼发布官方声明,宣布对现任国际足联主席因凡蒂诺提起刑事诉讼,指控其涉嫌腐败。普拉蒂尼(左)曾任欧足联主席,因……2022年4月56日云南省部分风景区天气预报晋宁郑和公园,小雨,912度西双版纳望天树风景区,小雨,2032度怒江大峡谷,小雨,2029度宁洱那柯里茶马古道,小雨,925度昭通彝良小草坝,小雨,5……春季多吃菜,但要留意这5种,可能含有毒素,不要乱吃乱做大家好,这里是小曦美食。进入春天之后气温逐渐升高,万物生长,各种蔬菜都是逐渐上市了的。现在是吃野菜的季节,应季而食身体健康,春天可以吃的野菜有很多种,都是带包了春天的美味。……印度法院允许解冻vivo银行账户,但要求提供近1。2亿美元担Tech星球7月13日消息,据界面,印度德里高等法院当地时间7月13日允许解冻vivo银行账户,前提是vivo要向银行提供95亿印度卢比(约合1。19亿美元)担保。法院还指示v……小米12sUltra,体验后的牢骚看了网上各种媒体的评测,对这台机子很是心动,作为一个所有平台粉丝加起来不到10000的小自媒体,自然是拿不到媒体机的,所以心动之后马上行动,跑去专卖店体验了一个多小时,下面跟大……大肠癌怎么预防?大肠癌这种疾病,由于早期的症状并不是很明显,所以很多人并没有引起重视,以为只是暂时不正常的表现,过段时间自然就会恢复。其实大肠癌会给人们的健康带来很大的影响,所以在平时的生活中……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网