分享

SQL入门教程第14课:什么是交叉连接

 asaser 2022-08-18 发布于四川
 戳蓝字Excel星球关注我哦。

菜单→资源礼包✔领取更多SQL教程👆

HI,大家好,我是星光。

前尘往事如云烟,聊了SQL辣么久,咱们总算聊到连接查询了……

连接查询,有时称多表查询,有时又称多表连接查询,名字有差异,但意思总是一样——在多表之间创建指定关系的连接,并按指定条件进行查询。

在语句形式上,连接查询通常有两种实现方式。一种是FROM子句列出所有需要连接的表,然后通过WHERE子句列出筛选条件;另一种是通过关键字JOIN建立表和表之间的连接,再通过关键字ON指定连接条件。

咱们今天先聊既简单又粗暴的第一种方法,该方法在语法上可以简单总结如下:

SELECT 字段名 FROM 表1,表2 WHERE 表1.字段名=表2.字段名

FROM子句列出需要连接查询的多个表,不同表名之间使用英文逗号间隔,然后WHERE子句指定了筛选的条件,最后SELECT子句指定需要提取字段的名称。

我举个小栗子。

如下图所示,有两张表,左边是花名册,右边是成绩表。

图片

现在我们需要查询班组为'二组’的人员成绩明细……

查询结果如下:

图片

这问题是不是有点眼熟?我们好像在哪见过你还得吗?上期咱们刚分享过子查询的解决方案,不知道相关语句你是否还记得……

使用连接查询的方式,SQL语句如下:

SELECT 花名册$.组别,花名册$.姓名,成绩表$.成绩 FROM [花名册$] , [成绩表$]  WHERE 花名册$.组别='二组'     AND 花名册$.姓名=成绩表$.姓名

以上语句中,花名册$和成绩表$两个表名反复出现,代码书写和阅读都显得很复杂,此时我们可以使用表的别名进行简化

和字段别名一样,定义表的别名关键字也是AS,但和字段别名不同的是,在对表定义别名时,关键字AS可以省略。

比如,以下语句,我们将[花名册$]定义别名为a , [成绩表$]定义别名为b:

SELECT a.组别,a.姓名,b.成绩 FROM [花名册$]a , [成绩表$]b WHERE a.组别='二组' AND a.姓名=b.姓名

代码也可以写成:

SELECT 组别,a.姓名,成绩 FROM [花名册$]a , [成绩表$]b  WHERE 组别='二组'     AND a.姓名=b.姓名

对比上一条的语句,不难发现部分字段名省略了表名,这是因为相关字段名称在连接表中是独一无二的;而'姓名’是花名册和成绩表都存在的字段名,则必须提供表名,否则系统无法识别字段来源,会发出错误提示:

图片

说完表的别名,我们再说下语句的含义和运算过程。

通过本系列教程第11章的内容(SELECT语法结构和运算顺序),我们知道,系统首先执行FROM子句。

本例中,FROM子句存在两个表,花名册和成绩表,系统读取它们的别名,并计算两个表的笛卡尔积,也就是列出这两个表中行的所有可能的组合,形成一个中间表。

该过程类似于以下语句:

SELECT * FROM [花名册$]a , [成绩表$]b

运行该语句获得结果如下:

图片

这个结果显然并不是我们最后希望获取的,但通过观察该表,我们也不难发现,只要我们通过WHERE子句指定两个条件即可获得目标数据,也就是组别='二组'以及a.姓名=b.姓名

……下一步,系统按照WHERE指定的筛选条件(WHERE 组别='二组' AND a.姓名=b.姓名),对中间表进行筛选,去除中间表不符合条件的记录。该过程运算结果等同于以下语句:

SELECT * FROM [花名册$]a , [成绩表$]b  WHERE 组别='二组'     AND a.姓名=b.姓名

运行该语句得出结果如下:

图片

观察该表,a.姓名和b.姓名字段内容重复,而我们只需要其中一个即可,因此我们在SELECT子句中提供了3个字段名:

SELECT 组别,a.姓名,成绩

最后,系统按我们提供的字段名,从执行WHERE子句后得出的中间表中提取记录作为结果表……最后结果如下:

图片

摊手,整个过程就酱紫~

……

FROM+WHERE的这种连接查询方式,虽简单,但也过于粗暴。

图片          

它会产生笛卡尔积,也就是会列出了连接表之间行的所有可能组合。

比如两个表,各有10行记录,行的所有可能组合也就是10X10=100行……

如果两个表各有1万行呢?那就是1万X1万=1万万……

如果两个表各有30万行呢?那就是……抱谦,你电脑可以重启了,不用谢。

在SQL查询中,我们通常会尽量避免笛卡尔积的产生,除非您就是需要笛卡尔积,比如列出所有产品组合的可能性……

那么如何在不产生笛卡尔积的前提下对数据进行连接查询?河中生灵为何神秘死亡?下游居民为何染上怪病?河畔植物为何不断变异?是残留农药还是可怕细菌?今日说法下期播出~

还是皮一下比较开心……左上角点关注,右下角点个赞,咱们下期再见。

案例文件下载百度网盘..▼

https://pan.baidu.com/s/1P32U8DEKG7QcXkgAcdNbsA 

需要系统学习Excel,却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?加入我的付费社群,与4500+学员一起,同微软最有价值专家(MVP)全面精进表格之道👇

👀

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多