11丨SQL99是如何使用连接的,与SQL92的区别是什么?
该思维导图由 AI 生成,仅供参考
SQL99 标准中的连接查询
交叉连接
- 深入了解
- 翻译
- 解释
- 总结
SQL99标准与SQL92标准在连接查询方面有着明显的区别。SQL99标准提供了更灵活、可读性更强的连接操作方式,包括交叉连接、自然连接、ON连接、USING连接、外连接和自连接。相比之下,SQL92标准在连接查询时需要将所有需要连接的表放到FROM之后,并在WHERE中写明连接条件,而SQL99标准采用JOIN的方式,每次连接一张表,可以多次使用JOIN进行连接,使得SQL语句更加简洁、可读性更强。总的来说,SQL99标准在连接查询方面提供了更加灵活、清晰的操作方式,使得多表连接更加直观易懂。 此外,不同的DBMS在使用连接时会存在差异,需要注意一些常见的问题,如不是所有的DBMS都支持全外连接,Oracle中不存在表别名AS,SQLite的外连接只有左连接等。在连接时需要注意控制连接表的数量,不要连接不必要的表,并且不要忘记WHERE语句以筛选符合条件的数据行。另外,建议使用自连接而不是子查询,因为在许多DBMS的处理过程中,对于自连接的处理速度要比子查询快得多。 总的来说,连接是SQL中的核心操作,通过两篇文章的学习,读者可以从多个维度对连接进行了了解。在实际工作中,尤其是做业务报表的时候,需要理解和熟练掌握SQL标准中连接的使用,以及不同DBMS中对连接的语法规范。文章提供了对SQL标准的学习,建议在需要进行外连接的时候采用SQL99标准,这样更适合阅读。
《SQL 必知必会》,新⼈⾸单¥68
全部留言(106)
- 最新
- 精选
- 奕所有的连接类型,是不是都先对连接的表做笛卡尔,然后在根据条件进行数据筛选的? 对于上一个问题,可能没有表达清楚,我想问的是,各种连接的内部执行步骤,比如先根据连接生成中间表数据,然后在连接类型,on,where进行数据筛选得到数据的步骤
作者回复: 完整的SELECT语句内部执行顺序是: 1、FROM子句组装数据(包括通过ON进行连接) 2、WHERE子句进行条件筛选 3、GROUP BY分组 4、使用聚集函数进行计算; 5、HAVING筛选分组; 6、计算所有的表达式; 7、SELECT 的字段; 8、ORDER BY排序 9、LIMIT筛选
2019-07-05367 - 墨禾跟踪到第四个星期的专栏学习,这里对前面的知识点做个阶段性的总结。首先我自己是个用过mssql、mysql做过项目开发的人,所以我学习这几节课的专栏比较轻松,除了对过去的项目做个复盘提醒之外,还有些新的收获——从纵向广度、横向深度了解sql语言的特点。 ----------------------------------------------------------------------------------------------------- 1、纵向广度 几乎每节专栏都会对 mysql 和 oracle 的知识点做对比,让我从不同之中寻找练习,迁移默化之中加强知识迁移的能力,让我在技术不断迭代更新的时代减少一些焦虑感。 ------------------------------------------------------------------------------------------------------- 2、横向深度 -- 熟悉了更多的专业术语(如DML、DDL、DQL、TCL、SQL92、SQL99):之前在实操的时候,只管用,而不管知识属于哪个体系,这样的方法有些粗暴而低效,因为有时候出错的时候,在不理解知识整体结构和专业术语的情况下,难以定位具体的出错点,也就难以检索到对应的解决办法。 -- 理清楚mysql的知识脉络结构,学习一种思维模式:每一节专栏都有对应的思维导图,看完文字听完语音,掌握了知识要点后,可能忽略了知识之间的联系,思维导图可以很清晰地展现知识之间的联系。其实看老师的专栏的结构组织,也就是一种学习【思维模式】,让我逐渐地转变学生思维,一年后,以更为优秀的姿态走向社会。 -- 摆正心态:大步迈进,小步迭代。看到知识点都是自己学过的,有时候会觉得有些亏。 但反过来想,老师这么厉害的人,尚且与我们一起学习基础知识,我有什么理由好高骛远? 所以我要做到每节课不落地认真做笔记,最重要的还是要多实践,实践方能出真知。
作者回复: 多谢支持,不同企业使用的DBMS会有不同,所以在竞争激烈的环境下掌握不同的RDBMS的使用有时候会是一种优势。 我们知道数据库都有自己的“方言”,同时也都遵循一定的规范标准,所以对规范标准的掌握有时候更重要,“方言”在实际使用中查阅相应的RDBMS文档,当然日常积累也很重要 专栏里不同人所处的阶段不同,所以需要先交付基础,当然即使是基础篇也需要了解底层原理,这样对后续的SQL优化很有必要。 赞下总结笔记的习惯,我接触很多同学,一般来说经常写总结笔记的同学收获更大,在实际工作中也会游刃有余。
2019-07-05536 - mickey# 编写 SQL 查询语句,查询不同身高级别(对应 height_grades 表)对应的球员数量(对应 player 表) SELECT h.height_level AS '身高级别', COUNT(player_id) AS '球员数量' FROM height_grades as h LEFT JOIN player as p ON height BETWEEN h.height_lowest AND h.height_highest GROUP BY height_level; 身高级别 球员数量 --------------------------- A 18 B 14 C 5 D 0
作者回复: 正确
2019-07-18730 - lmingzhi"需要注意的是 MySQL 不支持全外连接,否则的话全外连接会返回左表和右表中的所有行。当表之间有匹配的行,会显示内连接的结果。当某行在另一个表中没有匹配时,那么会把另一个表中选择的列显示为空值。" 请问一下,这里的否则,指的是支持全外连接的数据库吗?
作者回复: 对的 就是讲解下如果支持全外连接的数据库是怎样的结果。Oracle支持全外连接 FULL JOIN,而MySQL不支持,不过想要写全外连接的话,可以用 左外连接 UNION 右外连接,比如: SELECT * FROM player LEFT JOIN team ON player.team_id = team.team_id UNION SELECT * FROM player RIGHT JOIN team ON player.team_id = team.team_id
2019-07-0515 - Geek_635558结果相同可以有N种写法,其实很多时候更应该关注查询的效率如何。希望可以详解
作者回复: 对的,我们需要先了解都有哪些写法,然后在正确性的基础上提升SQL优化的能力,这部分会在后面陆续讲到。 SQL优化有很多维度,最常用的考虑可以从两方面入手:如何建立有效的索引策略(包括主键),以及不要在WHERE的字段中做函数运算。 在此基础上,我们还会了解事务处理,锁的机制,不同RDBMS的特点和使用等等。
2019-07-0515 - rike我有一个疑问,在例子上写的很多sql连接查询时,只有join...on关键字,但是没有其他的,但是这种join...on和left join...on的区别是什么?
作者回复: JOIN 就是默认的 INNER JOIN,LEFT JOIN是左连接 左连接:以左表为主,关联上右表 内连接:左表和右表的交集
2019-09-0129 - 夜路破晓建议多表连接使用SQL99标准.好了本章结束,继续!
作者回复: 加油~
2019-07-054 - Oliver老师好,问个问题,在一对多的关系中,怎么写sql语句?初学者一枚
作者回复: SQL查询语句是面向集合的思维方式,你需要思考你想提取的数据是什么?不论是一对多,一对一,还是多对多的关系,关注的都应该是你想提取的数据是什么。 不过在建数据表的时候,你需要考虑到这些关系的特性,比如一张数据表是一对多的关系,可以将1端设置为主键,这样在查询的时候效率更高。
2019-07-073 - Krison我SQL很差,之前订了课程一直没时间学。今天捡起来。这个sql想了很久,总算是想出来了。加油! SELECT CONCAT( '身高级别', ' - ', b.height_level ), CONCAT( '球员数量', ' - ', count( b.height_level ) ) FROM `player` AS a LEFT JOIN height_grades AS b ON a.height BETWEEN b.height_lowest AND b.height_highest GROUP BY b.height_level; ------结果如下------------ 身高级别 - A 球员数量 - 18 身高级别 - B 球员数量 - 14 身高级别 - C 球员数量 - 5
作者回复: 加油Krison,SQL写的不错
2019-11-27 - 爬行的蜗牛SELECT COUNT(*), h.height_level FROM player as p JOIN height_grades as h ON p.height BETWEEN h.height_lowest AND h.height_highest GROUP BY h.height_level;
作者回复: 正确
2019-11-25