多表关联查询的SQL执行原理
平时大多是执行单表查询,通常你把索引建好,让他尽可能走索引,性能都没问题。但其实也有不少的多表关联语句,因为有时查找目标数据,不得不借助多表关联的语法,才能实现你想要但使用多表关联的时候,你的SQL性能就可能会遇到一些问题。 最基础的多表关联查询 select * from t1,t2 where t1.x1=xxx and t1.x2=t2.x2 and t2.x3=xxx
若在FROM字句后直接来两个表名,就是要针对两个表进行查询,而且会把两个表的数据给关联,假设你未限定多表连接条件,可能会搞出一个笛卡尔积。所以通常都会在多表关联语句中的WHERE子句里引入一些关联条件:where t1.x1=xxx and t1.x2=t2.x2 and t2.x3=xxx t1.x1=xxx 明确绝对不是多表关联的连接条件,而是针对t1表的数据筛选条件,从t1筛选一波数据再和t2表关联 然后t2.x3=xxx,也不是关联条件,他也是针对t2表的筛选条件 真正的关联条件 t1.x2=t2.x2 必须要t1表里的每条数据根据自己的x2字段值关联t2 表里的某条记录,要求t1表里这条数据的x2值==t2表里的那条数据的x2字段值
假设: t1表里有1条数据x2=265 t2有2条数据x2=265 就会把t1表里的那条数据和t2表的2条数据分别关联,最终返你两条关联后数据。
所以该SQL执行过程可能是: 首先根据t1.x1=xxx筛选条件,去t1查出一批数据,此时可能是const、ref,也可能index或all,具体看你的索引如何建的 假设从t1按t1.x1=xxx条件筛选出2条数据 接着对这两条数据,根据每条数据的x2字段值及t2.x3=xxx条件,去t2表里找x2、x3字段值都匹配的数据。比如t1表第一条数据的x2=265,就根据t2.x2=265和t2.x3=xxx这俩条件,找出一波数据,比如找出来2条吧 此时就把t1表里x2=265的那个数据 和 t2表里t2.x2=265和t2.x3=xxx的两条数据关联,t1表里另外一条数据如法炮制
他可能是先从一个表里查一波数据:驱动表
再根据这波数据去另外一个表里查一波数据进行关联,另外一个表叫:被驱动表 内连接
员工表包含id(主键)、name(姓名)、department(部门)
产品销售业绩表里包含id(主键)、employee_id(员工id)、产品名称(product_name)、销售业绩(saled_amount)。
现在要看每个员工对每个产品的销售业绩: select e.name,e.department,ps.product_name,ps.saled_amount from employee e,product_saled pa where e.id=pa.employee_id
此时看到的数据:
执行原理
全表扫描员工表,找出每个员工,然后针对每个员工的id去业绩表找 employee_id 跟员工id相等的数据,可能每个员工的id在业绩表里都会找到多条数据,因为他可能有多个产品的销售业绩。
然后把每个员工数据跟他在业绩表里找到的所有业绩数据都关联,比如: 张三关联了业绩表里的三条数据 李四关联了业绩表里的两条数据
内连接,inner join,要求两个表里的数据必须完全能关联上,才能返回。
假设员工表里有个人是新员工,入职到现在无销售业绩,此时还是希望能够查出来该员工的数据,只不过他的销售业绩那块可以给个NULL,表示无业绩。但若仅使用上述SQL语法,似乎搞不定,因为必须要两个表能关联上的数据才查得出来。
此时就需要 外连接
outer join,分为: 左外连接 在左侧的表里的某条数据,如果在右侧的表里关联不到任何数据,也得把左侧表这个数据给返回出来 右外连接 右外连接反之,在右侧的表里如果关联不到左侧表里的任何数据,得把右侧表的数据返回出来
还有个语法限制,如果你是内连接,那连接条件可以放在where语句,但外连接一般是把连接条件放在ON语句: SELECT e.name, e.department, ps.product_name, ps.saled_amount FROM employee e LEFT OUTER JOIN product_saled pa ON e.id=pa.employee_id
一般写多表关联,主要就是内连接和外连接。
纹枰论道,真如争锋!普陀这场围棋文化交流赛开赛了2023年3月19日下午,真如杯长三角围棋交流赛于上海棋院普陀分院启动,同一时间,真如寺内举行的董勤围棋(上海)工作室成立暨聂棋圣文化体验馆签约仪式也顺利完成。活动现场真如杯长三角
城阳区上马街道育英路社区开展青少年趣味英语活动半岛全媒体记者王洪智为了激发孩子们学习英语的兴趣,拓展孩子们的英语知识面,培养良好的英语学习习惯,上马街道育英路社区联合国立社会服务中心,于2023年3月19日下午,在育英路社区三
知名女星公开婚讯!对象是他就在刚刚李多海发文官宣结婚她宣布与崔东旭Seven8年的恋爱长跑终于结束,将于五月举办婚礼。会带着大家的祝福开始新的生活,尽到一个做妻子做丈夫的责任,相互相亲相爱,相濡以沫。据悉,
日企将在福岛投放中国产共享EV以涉足纯电动汽车(EV)市场为目标的日本新兴企业ApatechMotors最早将于今年春季在福岛县大熊町投放可低价使用的纯电动汽车。将在町公所和车站等场所设置纯电动汽车,让用户以共
银保监会进一步提升中国金融业的制度型开放水平北京日报客户端记者潘福达全球财富管理论坛2023年会于3月18日至19日在北京举行,本次年会以高水平开放应对全球变局为主题。中国银行保险监督管理委员会副主席党委委员曹宇在主旨发言中
消博会时装周4月11日开幕!近千件时尚单品将发布以蔚蓝海岸为主题时尚零距离为定位的2023中国国际消费品博览会时装周定于4月11日4月15日举办共设置3个固定秀场1个快闪秀场届时将有40余个品牌发布近千件时尚单品一系列配套活动助
2023巴黎时装黄帝的新装秀出来什么叫原始美才是真的美巴黎时装秀永远走在时代的前列我的美你不懂我不怪你!2023注定是不平凡的一年!这一届的巴黎时装秀,抛开了世俗的眼光,用最真挚的情感来打动世界,用内在美来征服世界,用赤裸裸的心来睡服
这场摄影大赛,等你来报名!如果你是一名长江半马的参赛跑者在跑马过程中拍摄到赏心悦目的风景如果你是加油助威的亲友团记录下了正在比赛的亲友爱人如果你是观众或是志愿者善于用镜头去记录跑马快来参加2023上海长江半
投资1。58万亿元韩国欲打造全球最大半导体集群3月15日,在韩国总统尹锡悦主持的第14次非常经济民生会议上,韩国政府宣布,计划到2042年,将在韩国京畿道首都圈龙仁市建设710万平方米的产业园区,投资300万亿韩元(约合1。5
巴黎时装周现场,外网被怀疑帮国内女星修图,老外欢呼声接连不断笑死。张天爱因为参加巴黎时装周,被外网摄影师拍的照片太好看,于是有人质疑外网摄影师是不是特意单独给张天爱一个人修图了。哈哈哈,这个猜测虽然有点离谱,可张天爱在巴黎时装周的状态真的是
新海诚晒中韩工作餐,韩国网民破防了16日,日本知名动画导演新海诚携新作玲芽之旅来到中国开展宣传工作。人到北京的第一天,他就在个人推特上晒出了当晚吃的海鲜火锅与此同时,在韩国的发行团队则向他发来了一张泡面图中国团队V