最新要闻
- 快讯:成年子女不能与父母在酒店住同一标间引热议 太没道理?酒店回应
- 环球观察:4个多月第一次!Intel Arc Pro专业显卡终于有了新驱动
- 当前最新:小米“退钱”了:27万小米空气净化器初代用户 每人899元
- 全球快报:小金刚手机杀到1999元 卢伟冰喊话友商:欢迎光明磊落竞争
- 全球播报:人体工学椅从没想过:自己真正的对手会是汽车
- 天天微资讯!日本海滩惊现大量乌贼尸体 绵延200米
- 通讯!青石板路图片(青石板规格)
- 微头条丨喊老公过时了!赵丽颖唐嫣孙俪都这样称呼另一半,网友:甜炸了
- GPT-4救了我狗的命
- 【全球快播报】你敢坐吗?滴滴能打到自动驾驶汽车了
- 环球看点!三爱健康集团(01889)发盈喜 预计2022年度股东应占溢利同比增加约223.6%至2922万元
- 环球新消息丨OpenAI创始人:AI可能毁灭人类 必须开发新技术来解决
- 焦点速递!美亚柏科:公司将对各类 AIGC 内容的检测、AI 生成文本的检测技术及产品进行布局
- 绿牌将会取消?网友:走好不送
- 一图看懂Note 12 Turbo:性价比进行到底 16+1TB仅售2599元
- 一加李杰:用户不会被蒙蔽 将旗舰体验普及到底
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
每日消息!读SQL进阶教程笔记01_CASE表达式
1.概述
1.1.SQL-92标准里加入的最有用的特性
(相关资料图)
1.2.写法
1.2.1.简单CASE表达式
CASE sexWHEN "1" THEN ’男’WHEN "2" THEN ’女’ELSE ’其他’ END
- 1.2.1.1.写法简单,但能实现的事情比较有限
1.2.2.搜索CASE表达式
CASE WHEN sex ="1"THEN’男’WHEN sex ="2"THEN’女’ELSE ’其他’ END
1.2.2.1.简单CASE表达式能写的条件,搜索CASE表达式也能写
1.2.2.2.可以使用BETWEEN、LIKE和<、>等便利的谓词组合,以及能嵌套子查询的IN和EXISTS谓词
1.2.2.3.CASE表达式用在SELECT子句里时,既可以写在聚合函数内部,也可以写在聚合函数外部
1.2.2.3.1.CASE表达式在执行时会被判定为一个固定值,因此它可以写在聚合函数内部
1.2.2.3.2.因为它是表达式,所以还可以写在SELECE子句、GROUP BY子句、WHERE子句、ORDER BY子句里
1.2.2.4.是支撑SQL声明式编程的根基之一,也是灵活运用SQL时不可或缺的基础技能
1.2.2.4.1.在能写列名和常量的地方,通常都可以写CASE表达式
1.3.注意事项
1.3.1.统一各分支返回的数据类型
- 1.3.1.1.某个分支返回字符型,而其他分支返回数值型的写法是不正确的
1.3.2.要注意条件的排他性
1.3.3.不要忘了写END
1.3.4.养成写ELSE子句的习惯
1.3.4.1.ELSE子句是可选的
1.3.4.2.不写也不会出错
1.3.4.2.1.不写可能会造成“语法没有错误,结果却不对”这种不易追查原因的麻烦
1.3.4.3.即便是在结果可以为NULL的情况下
1.4.必须在SELECT子句和GROUP BY子句这两处写一样的CASE表达式
1.5.GROUP BY子句使用的正是SELECT子句里定义的列的别称
1.5.1.这种写法是违反标准SQL的规则的
1.5.1.1.因为GROUP BY子句比SELECT语句先执行
1.5.1.2.所以在GROUP BY子句中引用在SELECT子句里定义的别称是不被允许的
1.5.2.Oracle、DB2、SQL Server等数据库里采用这种写法时就会出错
1.5.3.在PostgreSQL和MySQL中可以顺利执行
1.5.4.不强烈推荐大家使用
2.示例
2.1.
-- 男性人口 SELECT pref_name, SUM(population) FROM PopTbl2 WHERE sex ="1" GROUP BY pref_name; -- 女性人口 SELECT pref_name, SUM(population) FROM PopTbl2 WHERE sex ="2" GROUP BY pref_name;
2.2.
SELECT pref_name, --男性人口 SUM( CASE WHEN sex ="1"THEN population ELSE 0 END) AS cnt_m, --女性人口 SUM( CASE WHEN sex ="2"THEN population ELSE 0 END) AS cnt_f FROM PopTbl2 GROUP BY pref_name;
2.3.能将SQL的查询结果转换为二维表的格式
- 2.3.1.新手用WHERE子句进行条件分支,高手用SELECT子句进行条件分支
3.用CHECK约束定义多个列的条件关系
3.1.
CONSTRAINT check_salary CHECK ( CASE WHEN sex ="2" THEN CASE WHEN salary <= 200000 THEN 1 ELSE 0 END ELSE 1 END = 1 )
- 3.1.1.使用蕴含式,男性也可以在这里工作
3.2.
CONSTRAINT check_salary CHECK ( sex ="2"AND salary <= 200000 )
- 3.2.1.使用逻辑与,该公司将不能雇佣男性员工
4.在UPDATE语句里进行条件分支
4.1.
--条件1 UPDATE Salaries SET salary = salary * 0.9 WHERE salary >= 300000; --条件2 UPDATE Salaries SET salary = salary * 1.2 WHERE salary >= 250000 AND salary < 280000;
4.2.用CASE表达式写正确的更新操作
UPDATE Salaries SET salary = CASE WHEN salary >= 300000 THEN salary * 0.9 WHEN salary >= 250000 AND salary < 280000 THEN salary * 1.2 ELSE salary END;
4.2.1.最后一行的ELSE salary非常重要,必须写上
4.2.2.因为如果没有它,条件1和条件2都不满足的员工的工资就会被更新成NULL
4.3.
--1.将a转换为中间值d UPDATE SomeTable SET p_key ="d" WHERE p_key ="a"; --2.将b调换为a UPDATE SomeTable SET p_key ="a" WHERE p_key ="b"; --3.将d调换为b UPDATE SomeTable SET p_key ="b" WHERE p_key ="d";
4.4.用CASE表达式调换主键值
UPDATE SomeTable SET p_key = CASE WHEN p_key ="a" THEN "b" WHEN p_key ="b" THEN "a" ELSE p_key END WHERE p_key IN ("a", "b");
5.表之间的数据匹配
5.1.表的匹配:使用IN谓词
SELECT course_name, CASE WHEN course_id IN (SELECT course_id FROM OpenCourses WHERE month = 200706) THEN"○" ELSE"×"END AS "6月", CASE WHEN course_id IN (SELECT course_id FROM OpenCourses WHERE month = 200707) THEN"○" ELSE"×"END AS "7月", CASE WHEN course_id IN (SELECT course_id FROM OpenCourses WHERE month = 200708) THEN"○" ELSE"×"END AS "8月" FROM CourseMaster;
5.2.表的匹配:使用EXISTS谓词
SELECT CM.course_name, CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200706 AND OC.course_id = CM.course_id) THEN"○" ELSE"×"END AS "6月", CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200707 AND OC.course_id = CM.course_id) THEN"○" ELSE"×"END AS "7月", CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200708 AND OC.course_id = CM.course_id) THEN"○" ELSE"×"END AS "8月" FROM CourseMaster CM;
- 5.2.1.从性能方面来说,EXISTS更好
6.在CASE表达式中使用聚合函数
6.1.条件1:选择只加入了一个社团的学生
SELECT std_id, MAX(club_id) AS main_club FROM StudentClub GROUP BY std_id HAVING COUNT(*) = 1;
6.2.条件2:选择加入了多个社团的学生
SELECT std_id, club_id AS main_club FROM StudentClub WHERE main_club_flg ="Y";
6.3.
SELECT std_id, CASE WHEN COUNT(*) = 1 --只加入了一个社团的学生 THEN MAX(club_id) ELSE MAX(CASE WHEN main_club_flg ="Y" THEN club_id ELSE NULL END) END AS main_club FROM StudentClub GROUP BY std_id;
关键词:
-
每日消息!读SQL进阶教程笔记01_CASE表达式
1 & 160;概述1 1 & 160;SQL-92标准里加入的最有用的特性1 2 & 160;写法1 2 1 & 160;简单CASE表达式CASEsexWHEN& 39;1& 39;
来源: 每日消息!读SQL进阶教程笔记01_CASE表达式
快讯:成年子女不能与父母在酒店住同一标间引热议 太没道理?酒店回应
Spring整合Mybatis遇到的问题(一)
有关Mongodb 在windows上安装的问题
今头条!JNI知识点总结
天天日报丨【Visual Leak Detector】配置项 ReportTo
【Visual Leak Detector】配置项 SelfTest
环球观察:4个多月第一次!Intel Arc Pro专业显卡终于有了新驱动
当前最新:小米“退钱”了:27万小米空气净化器初代用户 每人899元
全球快报:小金刚手机杀到1999元 卢伟冰喊话友商:欢迎光明磊落竞争
全球播报:人体工学椅从没想过:自己真正的对手会是汽车
天天微资讯!日本海滩惊现大量乌贼尸体 绵延200米
通讯!青石板路图片(青石板规格)
微头条丨喊老公过时了!赵丽颖唐嫣孙俪都这样称呼另一半,网友:甜炸了
项目中如何对XSS统一处理
面向对象设计原则
instanceof的使用
GPT-4救了我狗的命
【全球快播报】你敢坐吗?滴滴能打到自动驾驶汽车了
环球看点!三爱健康集团(01889)发盈喜 预计2022年度股东应占溢利同比增加约223.6%至2922万元
世界头条:用gpt4训练一个简易真人代理
全球热头条丨【Visual Leak Detector】配置项 ReportFile
环球通讯!融创百亿美元境外债务重组成功在即 持债金额超30%的债权人小组已签订重组支持协议
环球新消息丨OpenAI创始人:AI可能毁灭人类 必须开发新技术来解决
焦点速递!美亚柏科:公司将对各类 AIGC 内容的检测、AI 生成文本的检测技术及产品进行布局
聚焦:免费Midjourney AI绘画Prompt提示词平台合集
NCNN 模型推理详解及实战
基于中断的字符串动态显示
全球热推荐:[NOI1999] 生日蛋糕
绿牌将会取消?网友:走好不送
一图看懂Note 12 Turbo:性价比进行到底 16+1TB仅售2599元
一加李杰:用户不会被蒙蔽 将旗舰体验普及到底
视讯!哈迷必备!Redmi Buds 4哈利波特版图赏
首发第二代骁龙7+!Redmi Note 12 Turbo图赏
设备树的概念(四):平台设备驱动和设备树
天天最资讯丨Apache iotdb-web-workbench 认证绕过漏洞(CVE-2023-24829)
Halcon学习教程(一) 之提取十字线中心 图像分割
甲流吃退烧药不退烧怎么办_吃了一粒退烧药多久可以喂奶
环球今日报丨卢伟冰:Note系列全球销量破3.2亿 进入全球单品十强
头条:马斯克为何没做出ChatGPT?揭秘OpenAI创始人的权力斗争
日本推出佛祖版ChatGPT:已经为20多万人解决烦恼
观天下!合资车还咋玩!奇瑞艾瑞泽5 GT上市:起售价仅7.99万
每日快报!Redmi Note 12 Turbo搭载超细四窄边直屏:边框窄至1.42mm!
热消息:一篇文章带你了解面积图
京沪杭等地近期明确将有序放开设摊、允许外摆
全球资讯:德创环保:宁波甬德拟以1.61亿元收购飞乐环保100%股权
每日讯息!12306回应免费坐高铁:积分存在有效期
环球即时看!甄子丹主演!《疾速追杀4》豆瓣8.2分:纯粹动作爽片 超越前作
男子求职竟被要求在杭州本地买房 网友:不是招员工是招客户
环球微动态丨试过网易的新AI后 我发现它很笨 但又很聪明
广汽传祺GS4追尾后定损巡航坏了?保险公司不想理赔
记录--vue刷新当前页面
全球关注:借助 mperf 进行矩阵乘法极致优化
MySQL学习笔记-存储引擎
当前看点!低代码起势,开发者可以早日脱离996了?
今日热议:南钢股份:钢材销量同比下降6.28%,2022年年归母净利润同比下滑48.59%,拟10派2.5元
快讯:《生化危机4:重制版》D加密惹争议 又导致性能问题了
全球观热点:女子地铁照被AI一键脱衣传播 网友:无下限的开发
每日焦点!网友准备冲Redmi Note 12 Turbo哈利·波特版:预算3900元
头条:男子乘错出租车 起步1秒被强制收费6元:走了不到10米
【世界新视野】内存掉入无底洞:没有最便宜 只有更便宜
环球观天下!32、K8S-配置管理之Configmap
世界看点:Python中21道个程序小练习
css设置超过固定长度以省略号显示
全球看点:乒乓球技巧训练这就是高手的水准_乒乓球技巧
全球简讯:瑞银:看好亚股增长潜力 偏好亚洲投资级债券
Twitter将上线离谱新规:非会员甚至无法参与投票
热头条丨九识自动驾驶物流车被曝闯红灯 网友:该怎么记分处罚
速读:“网红”威震天在北京环球影城摔了一跤 客服回应:后续演出正常
【环球新要闻】一个时代结束了!Wii U和3DS在线商店已正式关闭
实时:透明外壳设计!Nothing Ear(2)无线耳机上市 999元
热资讯![HTML]表单标签(form表单域、input输入表单、label标签、select下拉表单、textarea文本域)
C#List的3种排序方法
环球观焦点:韩国有意解禁福岛水产品?在野党呼吁韩总统表态
全球新资讯:收评:两市震荡走弱沪指跌0.19% 人工智能概念冲高回落
全球热头条丨想玩必须升级!Steam将于2024年终止对Win7/8/8.1系统支持
中国科学家发现月球水库 估计蓄水量多达2700亿吨
父母做生意给儿子取名为顾客 当事人:家里有个“顾客”能带来更多顾客
世界最高安全标准 我国自研核电华龙一号西部首堆全面建成
【时快讯】249元 TP-LINK推出新款玄鸟AX3000路由器:3000Mbps满血Wi-Fi 6
观热点:Rust 备忘清单_开发速查表分享
即时焦点:郑州大学河南先进技术研究院2023年硕士研究生拟调剂信息公告已公布
天天热点评!国服一步步被掏空 暴雪国际服支持微信支付宝:价格全面上涨
vivo X Fold2将在博鳌亚洲论坛首秀:采用“天圆地方·两仪万象”设计
每日资讯:网信办:全面清理虚假摆拍短视频
环球观热点:如何应对上手英文工具站的 8 大误区
小程序的车载场景应用
【Visual Leak Detector】配置项 ReportEncoding
数据建模
世界要闻:在.NET7使用NPOI读取Excel如此简单
每日简讯:西门子医疗Syngo Carbon助力贵安医院打破数据孤岛,加速智慧医院建设
每日快播:谁是更好的甜点处理器?锐龙5 7600、酷睿i5-13400对比评测:游戏差距大到不敢相信
终于结束了 特斯拉“退一赔三”案二审败诉后申请再审:法院驳回
笔记本电脑排风扇声音大是怎么回事?笔记本电脑排风扇声音大怎么解决?
nova6最严重的缺点是什么?nova6参数详细价格
哈尔滨有几个电脑城?哈尔滨电脑城地址
折旧率是什么意思?折旧率计算公式
全球今头条!Go语言:通过TDD驱动测试开发为同事写的程序优化提速——初次接触并发与channel
【世界时快讯】非看不可的Redis持久化
选择排序