最新要闻
- 陕西省19个农产品区域公用品牌亮相第22届绿色食品博览会
- 环球微头条丨你为啥不升级Win11?数据:Win11份额历史新高 用过都说好?
- 每日热点:想薅羊毛?本轮汽车降价你需要知道事:10万以下车别想 理想蔚来等不跟定位豪华
- 今日最新!NVIDIA对RTX 4070定价有信心:3060的功耗输出3080性能
- 每日时讯!气温跳水!今年来范围最广最强雨雪上线:北方多地降温达10℃
- 时代终结!50年的大众经典神车高尔夫要停产了
- 送牙刷:纳美氨基酸牙膏4支/19.9元清仓
- 重磅!“笔吧”称将转行评测飞机杯?看了眼日期我悟了
- 【世界聚看点】速度可达600km/h!我国自研高温超导电动悬浮交通系统实现首次悬浮运行
- 天天精选!马斯克74岁母亲来武汉游玩:频繁晒照 称中国悠久的历史令人着迷
- 哥伦比亚发布橙色预警!这座火山,或在未来几天喷发?曾致超2.3万人死亡
- 今日聚焦!建议友商跟进!长安深蓝豪送大礼:已提车用户享终身整车质保
- 热点在线丨专家:发展电车一年可节约500亿美元石油进口、这钱拿来干什么不好
- 天天观点:送给老师的便宜小礼物
- 理想杀疯了!3月交付破2万辆 成新势力新老大 李想:30-50万SUV市场占比已接近20%
- 讯息:波兰蠢驴营收向好
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前热点-读SQL进阶教程笔记06_外连接
1.SQL的弱点
1.1.SQL语句的执行结果转换为想要的格式
(资料图片仅供参考)
1.1.1.格式转换
1.1.2.SQL语言本来就不是为了这个目的而出现的
1.1.3.SQL终究也只是主要用于查询数据的语言而已
1.2.生成报表的功能
- 1.2.1.窗口函数
1.3.SQL不是用来生成报表的语言,所以不建议用它来进行格式转换
- 1.3.1.必要时考虑用外连接或CASE表达式来解决问题
2.制作交叉表(行→列)
2.1.示例
- 2.1.1.
- 2.1.1.1.--水平展开求交叉表(1):使用外连接
SELECT C0.name,CASE WHEN C1.name IS NOT NULL THEN"○"ELSE NULL END AS "SQL入门",CASE WHEN C2.name IS NOT NULL THEN"○"ELSE NULL END AS "UNIX基础",CASE WHEN C3.name IS NOT NULL THEN"○"ELSE NULL END AS "Java中级"FROM (SELECT DISTINCT name FROM Courses) C0 --这里的C0是侧栏LEFT OUTER JOIN(SELECT name FROM Courses WHERE course = "SQL入门’) C1ON C0.name = C1.nameLEFT OUTER JOIN(SELECT name FROM Courses WHERE course = "UNIX基础’) C2ON C0.name = C2.nameLEFT OUTER JOIN(SELECT name FROM Courses WHERE course = "Java中级’) C3ON C0.name = C3.name;
2.1.1.2.一般情况下,外连接都可以用标量子查询替代
2.1.1.2.1.需要增加或者减少课程时,只修改SELECT子句即可,代码修改起来比较简单
2.1.1.2.2.利于应对需求变更,对于需要动态生成SQL的系统也是很有好处的
2.1.1.2.3.性能不太好
2.1.1.3.--水平展开(2):使用标量子查询
SELECT C0.name,(SELECT "○"FROM Courses C1WHERE course = "SQL入门’AND C1.name = C0.name) AS "SQL入门",(SELECT "○"FROM Courses C2WHERE course = "UNIX基础’AND C2.name = C0.name) AS "UNIX基础",(SELECT "○"FROM Courses C3WHERE course = "Java中级’AND C3.name = C0.name) AS "Java中级"FROM (SELECT DISTINCT name FROM Courses) C0; --这里的C0是表侧栏
2.1.1.4.嵌套使用CASE表达式
2.1.1.4.1.CASE表达式可以写在SELECT子句里的聚合函数内部,也可以写在聚合函数外部
2.1.1.4.2.其实在SELECT子句里,聚合函数的执行结果也是标量值,因此可以像常量和普通列一样使用
2.1.1.4.3.和标量子查询的做法一样简洁,也能灵活地应对需求变更
2.1.1.5.--水平展开(3):嵌套使用CASE表达式
SELECT name,CASE WHEN SUM(CASE WHEN course = "SQL入门’THEN 1 ELSE NULL END) = 1THEN"○"ELSE NULL END AS "SQL入门",CASE WHEN SUM(CASE WHEN course = "UNIX基础’THEN 1 ELSE NULL END) = 1THEN"○"ELSE NULL END AS "UNIX基础",CASE WHEN SUM(CASE WHEN course = "Java中级’THEN 1 ELSE NULL END) = 1THEN"○"ELSE NULL END AS "Java中级"FROM CoursesGROUP BY name;
3.汇总重复项于一列(列→行)
3.1.示例
- 3.1.1.
- 3.1.1.1.--列数据转换成行数据:使用UNION ALL
SELECT employee, child_1 AS child FROM PersonnelUNION ALLSELECT employee, child_2 AS child FROM PersonnelUNION ALLSELECT employee, child_3 AS child FROM Personnel;
- 3.1.1.2. 视图
CREATE VIEW Children(child)AS SELECT child_1 FROM PersonnelUNIONSELECT child_2 FROM PersonnelUNIONSELECT child_3 FROM Personnel;child-----一郎二郎三郎春子夏子
3.1.1.2.1.--获取员工子女列表的SQL语句(没有孩子的员工也要输出)
SELECT EMP.employee, CHILDREN.childFROM Personnel EMPLEFT OUTER JOIN ChildrenON CHILDREN.child IN (EMP.child_1, EMP.child_2, EMP.child_3);
4.制作嵌套式表侧栏
4.1.示例
- 4.1.1.
- 4.1.2.
4.1.3.结果
- 4.1.3.1.
- 4.1.4.--使用外连接生成嵌套式表侧栏:错误的SQL语句
SELECT MASTER1.age_class AS age_class,MASTER2.sex_cd AS sex_cd,DATA.pop_tohoku AS pop_tohoku,DATA.pop_kanto AS pop_kantoFROM (SELECT age_class, sex_cd,SUM(CASE WHEN pref_name IN (’青森’, ’秋田’)THEN population ELSE NULL END) AS pop_tohoku,SUM(CASE WHEN pref_name IN (’东京’, ’千叶’)THEN population ELSE NULL END) AS pop_kantoFROM TblPopGROUP BY age_class, sex_cd) DATARIGHT OUTER JOIN TblAge MASTER1--外连接1:和年龄层级主表进行外连接ON MASTER1.age_class = DATA.age_classRIGHT OUTER JOIN TblSex MASTER2--外连接2:和性别主表进行外连接ON MASTER2.sex_cd = DATA.sex_cd;
- 4.1.4.1.--停在第1个外连接处时:结果里包含年龄层级为2的数据
SELECT MASTER1.age_class AS age_class,DATA.sex_cd AS sex_cd,DATA.pop_tohoku AS pop_tohoku,DATA.pop_kanto AS pop_kantoFROM (SELECT age_class, sex_cd,SUM(CASE WHEN pref_name IN (’青森’, ’秋田’)THEN population ELSE NULL END) AS pop_tohoku,SUM(CASE WHEN pref_name IN (’东京’, ’千叶’)THEN population ELSE NULL END) AS pop_kantoFROM TblPopGROUP BY age_class, sex_cd) DATARIGHT OUTER JOIN TblAge MASTER1ON MASTER1.age_class = DATA.age_class;
4.1.5.如果不允许进行两次外连接,那么调整成一次就可以了
4.1.6.对于不支持CROSS JOIN语句的数据库,可以像FROM TblAge,TblSex这样不指定连接条件,把需要连接的表写在一起,其效果与交叉连接一样
4.1.7.如果先生成主表的笛卡儿积再进行连接,很容易就可以完成
4.1.8.--使用外连接生成嵌套式表侧栏:正确的SQL语句
SELECT MASTER.age_class AS age_class,MASTER.sex_cd AS sex_cd,DATA.pop_tohoku AS pop_tohoku,DATA.pop_kanto AS pop_kantoFROM (SELECT age_class, sex_cdFROM TblAge CROSS JOIN TblSex ) MASTER --使用交叉连接生成两张主表的笛卡儿积LEFT OUTER JOIN(SELECT age_class, sex_cd,SUM(CASE WHEN pref_name IN (’青森’, ’秋田’)THEN population ELSE NULL END) AS pop_tohoku,SUM(CASE WHEN pref_name IN (’东京’, ’千叶’)THEN population ELSE NULL END) AS pop_kantoFROM TblPopGROUP BY age_class, sex_cd) DATAON MASTER.age_class = DATA.age_classAND MASTER.sex_cd = DATA.sex_cd;
5.作为乘法运算的连接
5.1.示例
- 5.1.1.
- 5.1.2.--解答(1):通过在连接前聚合来创建一对一的关系
SELECT I.item_no, SH.total_qtyFROM Items I LEFT OUTER JOIN(SELECT item_no, SUM(quantity) AS total_qtyFROM SalesHistoryGROUP BY item_no) SHON I.item_no = SH.item_no;
5.1.2.1.以商品编号为主键的临时视图
5.1.2.2.无法利用索引优化查询
5.1.3.--解答(2):先进行一对多的连接再聚合
SELECT I.item_no, SUM(SH.quantity) AS total_qtyFROM Items I LEFT OUTER JOIN SalesHistory SHON I.item_no = SH.item_no 一对多的连接GROUP BY I.item_no;
5.1.3.1.代码更简洁
5.1.3.2.没有使用临时视图,所以性能也会有所改善
5.2.从行数来看,表连接可以看成乘法。因此,当表之间是一对多的关系时,连接后行数不会增加
6.全外连接
6.1.FULL OUTER JOIN
6.2.相当于求集合的和(UNION,也称并集)
- 6.2.1.内连接相当于求集合的积(INTERSECT,也称交集)
6.3.示例
- 6.3.1.--全外连接保留全部信息
SELECT COALESCE(A.id, B.id) AS id,A.name AS A_name,B.name AS B_nameFROM Class_A A FULL OUTER JOIN Class_B BON A.id = B.id;
- 6.3.1.1.--数据库不支持全外连接时的替代方案
SELECT A.id AS id, A.name, B.nameFROM Class_A A LEFT OUTER JOIN Class_B BON A.id = B.idUNIONSELECT B.id AS id, A.name, B.nameFROM Class_A A RIGHT OUTER JOIN Class_B BON A.id = B.id;
6.3.1.1.1.分别进行左外连接和右外连接,再把两个结果通过UNION合并起来
6.4.COALESCE是SQL的标准函数
- 6.4.1.可以接受多个参数,功能是返回第一个非NULL的参数
6.5.外连接的思想和集合运算很像,使用外连接可以实现各种集合运算
7.用外连接求差集:B-A
7.1.示例
- 7.1.1.
SELECT B.id AS id, B.name AS B_nameFROM Class_A A RIGHT OUTER JOIN Class_B BON A.id = B.idWHERE A.name IS NULL;
7.2.可以作为NOT IN和NOT EXISTS之外的另一种解法
7.3.可能是差集运算中效率最高的
8.用全外连接求异或集
8.1.SQL没有定义求异或集的运算符
8.2.用集合运算符
8.2.1.(A UNION B) EXCEPT (A INTERSECT B)
8.2.2.(A EXCEPT B) UNION (B EXCEPT A)
8.2.3.性能开销大
8.3.示例
- 8.3.1.
SELECT COALESCE(A.id, B.id) AS id, COALESCE(A.name , B.name ) AS name FROM Class_A A FULL OUTER JOIN Class_B B ON A.id = B.id WHERE A.name IS NULL OR B.name IS NULL;
9.用外连接进行关系除法
9.1.示例
- 9.1.1.--用外连接进行关系除法运算:差集的应用
SELECT DISTINCT shopFROM ShopItems SI1WHERE NOT EXISTS(SELECT I.itemFROM Items I LEFT OUTER JOIN ShopItems SI2ON I.item = SI2.itemAND SI1.shop = SI2.shopWHERE SI2.item IS NULL) ;
关键词:
-
全球今头条!简单实用出入库管理系统开源 实用进销存管理系统 快销品管理平台 电商进出库管理系统 开源下载
大家好,给大家推荐最近给研究的出入库管理平台,非常实用,直接使用EXCEL开发,业务基本小企业需求,如...
来源: -
快报:求求你别乱脱敏了!MyBatis 插件 + 注解轻松实现数据脱敏,So easy~!
问题在项目中需要对用户敏感数据进行脱敏处理,例如身份号、手机号等信息进行加密再入库。解决思路就是...
来源: 当前热点-读SQL进阶教程笔记06_外连接
全球今头条!简单实用出入库管理系统开源 实用进销存管理系统 快销品管理平台 电商进出库管理系统 开源下载
快报:求求你别乱脱敏了!MyBatis 插件 + 注解轻松实现数据脱敏,So easy~!
博客园添加打赏按钮
Pytorch 备忘清单_开发速查表分享
中金普洛斯REIT第一次扩募并新购入基础设施项目正式获批
吸收外资扩量更要提质
年内19只债基降低管理费 一级债基成主力
环球热点!当市场恐慌时,美联储会采取行动吗?
陕西省19个农产品区域公用品牌亮相第22届绿色食品博览会
环球微头条丨你为啥不升级Win11?数据:Win11份额历史新高 用过都说好?
每日热点:想薅羊毛?本轮汽车降价你需要知道事:10万以下车别想 理想蔚来等不跟定位豪华
今日最新!NVIDIA对RTX 4070定价有信心:3060的功耗输出3080性能
每日时讯!气温跳水!今年来范围最广最强雨雪上线:北方多地降温达10℃
时代终结!50年的大众经典神车高尔夫要停产了
送牙刷:纳美氨基酸牙膏4支/19.9元清仓
重磅!“笔吧”称将转行评测飞机杯?看了眼日期我悟了
【世界聚看点】速度可达600km/h!我国自研高温超导电动悬浮交通系统实现首次悬浮运行
天天精选!马斯克74岁母亲来武汉游玩:频繁晒照 称中国悠久的历史令人着迷
全球热资讯!基于zynq的OV5640摄像头的sobel算子边缘检测
天天新动态:小米路由器3C刷入Breed和OpenWrt
【世界播资讯】Microsoft Visual Studio 2022 透明背景设置
全球快播:相同基准点的多个rvt BIM模型数据配准后位置有错位偏差问题处理
哥伦比亚发布橙色预警!这座火山,或在未来几天喷发?曾致超2.3万人死亡
今日聚焦!建议友商跟进!长安深蓝豪送大礼:已提车用户享终身整车质保
热点在线丨专家:发展电车一年可节约500亿美元石油进口、这钱拿来干什么不好
天天观点:送给老师的便宜小礼物
头条焦点:Redis——内存淘汰策略
理想杀疯了!3月交付破2万辆 成新势力新老大 李想:30-50万SUV市场占比已接近20%
讯息:波兰蠢驴营收向好
世界今日讯!斗罗大陆游戏激活码有哪些(斗罗大陆游戏激活码是多少)
全球今日报丨Java 基础 -- NIO 多人聊天室
环球热推荐:四元数法
环球快资讯丨iPhone大面积bug:苹果自带天气崩了 无任何数据
shell 脚本之一键部署安装 Nginx
环球实时:国产PCSK9抑制剂 ,即将迎来商业爆发?
全球观速讯丨韩国主持人流鼻血仍淡定直播 本人回应没事:网友看笑但直呼真敬业
热文:钟南山亲自颁发!理想L9获颁“五星健康车”:383.4分创造历史
全球热头条丨文峰股份:3月31日融券卖出5300股,融资融券余额1.56亿元
全球动态:读SQL进阶教程笔记04_集合运算
加满一箱油少花13元!油价迎今年来最大降幅
天天热资讯!2020广州大佛寺中秋佳节拜月法会安排一览
Swift与OC混编
环球信息:知乎使用指南
汉唐元三车齐发!比亚迪乘用车在西班牙正式开售
【世界独家】不虚标!比亚迪汉EV冠军版实测光电续航达成率93.1%
世界今热点:中国最畅销手机出炉:“十三香”传奇上演 安卓高端难成
内存狂魔第一次冲上8200MHz!芝奇带来96GB DDR5
佛山企业标准“领跑者”数量连续三年全国第一
当前视点!腮腺炎初期有什么症状?_腮腺炎初期有什么症状
全球时讯:深度学习——用简单的线性模型构建识别鸟与飞机模型
Redhat/CentOS Linux 系统进入单用户模式
天天即时看!万恶的环境 二 java
今日要闻!验证码被攻破!谷歌AI已能精准识别 GPT-4则装瞎求人帮忙
美女博主在家拍擦边视频?穿瑜伽服涨粉百万!真相是...
全球今头条!3DMark加入AMD FSR专项测试:终于追上NVIDIA、Intel
全球报道:广汽埃安AION Y Plus 2023款上市:14万级唯一纯电610KM续航
天天信息:V观财报|科达制造股东广东联塑短线交易致歉
世界消息!Teamcenter_SOA开发:使用查询构建器查询数据
即时:flatMap
热讯:React Native 备忘清单_开发速查表分享
世界信息:5.98万起售还嫌贵?五菱缤果上市即热销:当天交付522台
每日热议!想买车的抓紧 广州新能源汽车也有补贴了:最高1万元
世界微头条丨《原神》开发商新作:米哈游《崩坏:星穹铁道》预约超2000万
环球热推荐:米香四溢:袁隆平品牌隆平农场东北晶米10斤39.9元发车
华硕ROG游戏手机7真机曝光:无挖孔全面屏、后置三摄
天天讯息:华天科技2022年营收119亿元 拟实施先进封测研发及产业化项目
当前焦点!Leetcode Practice --- 栈和队列
我的第一个项目(七):(解决问题)Vue中canvas无法绘制图片
观点:确认引进内地!《小美人鱼》新泄露镜头:爱丽儿深情抚摸王子的脸
全球首个商用海底数据中心在海南下水:算力高、散热不费电
今日关注:不挑路面、转得很稳 仰望U8如何实现原地掉头?官方详解
大学生应聘饭店洗碗工被HR婉拒 HR:第一份工作很重要 这会害了他
不等发布会!vivo X Fold2真机抢先看:素皮+玻璃设计惊艳
现场丨圆桌对话:抓住确定性——楼宇经济的大周期和小趋势
讯息:awk 处理 Git 提交信息生成 Release Note
最长上升子序列 II
视焦点讯!day3 函数的定义和调用,练习编写简单的程序(记录1)
天天热文:内存/SSD白菜价甩卖 美光芯片大减产:工厂停机率创纪录
任泽平:在中国做生意没任何理由抱怨 燃油车正迎来诺基亚时刻
世界新资讯:宏碁推出W系列4K电视:QLED面板、30W扬声器
油价“二连降” 今年来最大降幅!加满一箱油少花13元
【全球热闻】网络时钟同步设备(NTP时间同步服务器)技术设计应用方案
全球实时:记录--你可能忽略的10种JavaScript快乐写法
聚焦:无所畏惧的求和题解
今亮点!商品日报(3月31日):焦炭低位反弹菜油补涨 纸浆、玻璃主力合约跌超2%
保姆级教程!12306官方详解“免费坐高铁”
环球速递!RTX 40系显卡才能“撑得住”!《赛博朋克2077》实现路径光追
夏季必备 圈叉潮品纯棉印花T恤/短裤24.9元起
【新视野】编程神童立志写最棒的程序改变世界 严重偏科只能选职高 妈妈无奈
世界视讯!成龙自豪发声:不是我要去好莱坞 而是好莱坞要我
“19鑫苑01”到期日期将延期一年
Excel批量检查5列数据是否一致(存在不规则空值)
【密码管理器】上海道宁为您提供存储和使用强密码的简单方法工具软件——1Password
【环球报资讯】MQTT协议介绍
世界热资讯!开心档之Go 语言环境安装
DIM中的一些知识点(慢更)
新消息丨每日机构分析:3月31日
全球实时:国家发展改革委:国内汽、柴油价格每吨分别降低335元和320元
焦点简讯:吃日料、听京剧 库克时隔3年再访中国:6年前还去过ofo小黄车总部