SQL 必知必会
陈旸
清华大学计算机博士
73337 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
第一章:SQL语法基础篇 (19讲)
SQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

10丨常用的SQL标准有哪些,在SQL92中是如何使用连接的?

显示右表全部行
显示左表全部行
对同一表进行操作
右外连接
左外连接
使用其他运算符连接
可使用表别名
使用相同列进行连接
需要筛选
任意表连接
1000页以上
复杂
500页
简单
SQL语句显示所有可能的比赛组合
内连接、外连接和自连接的含义
不同数据库管理系统的差别
SQL标准的变化
在信息领域中广泛使用
超越数据库领域
自连接
外连接
非等值连接
等值连接
笛卡尔积
SQL99
SQL92
问题
注意事项
SQL标准影响力
连接种类
SQL标准
SQL连接操作

该思维导图由 AI 生成,仅供参考

今天我主要讲解连接表的操作。在讲解之前,我想先给你介绍下连接(JOIN)在 SQL 中的重要性。
我们知道 SQL 的英文全称叫做 Structured Query Language,它有一个很强大的功能,就是能在各个数据表之间进行连接查询(Query)。这是因为 SQL 是建立在关系型数据库基础上的一种语言。关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的(Structured)。你可以把关系模型理解成一个二维表格模型,这个二维表格是由行(row)和列(column)组成的。每一个行(row)就是一条数据,每一列(column)就是数据在某一维度的属性。
正是因为在数据库中,表的组成是基于关系模型的,所以一个表就是一个关系。一个数据库中可以包括多个表,也就是存在多种数据之间的关系。而我们之所以能使用 SQL 语言对各个数据表进行复杂查询,核心就在于连接,它可以用一条 SELECT 语句在多张表之间进行查询。你也可以理解为,关系型数据库的核心之一就是连接。
既然连接在 SQL 中这么重要,那么针对今天的内容,需要你从以下几个方面进行掌握:
SQL 实际上存在不同的标准,不同标准下的连接定义也有不同。你首先需要了解常用的 SQL 标准有哪些;
了解了 SQL 的标准之后,我们从 SQL92 标准入门,来看下连接表的种类有哪些;
针对一个实际的数据库表,如果你想要做数据统计,需要学会使用跨表的连接进行操作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

SELECT t1.team_name AS team1, t2.team_name AS team2 FROM team t1 CROSS JOIN team t2 WHERE t1.team_name < t2.team_name;

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《SQL 必知必会》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(70)

  • 最新
  • 精选
  • mickey
    置顶
    /* team 表做一道动手题,表格中一共有 3 支球队,现在这 3 支球队需要进行比赛,请用一条 SQL 语句显示出所有可能的比赛组合。 */ #分主客队 SELECT CONCAT(kedui.team_name, ' VS ', zhudui.team_name) as '客队 VS 主队' FROM team as zhudui LEFT JOIN team as kedui on zhudui.team_id<>kedui.team_id; 客队 VS 主队 ------------------------------------ 底特律活塞 VS 印第安纳步行者 底特律活塞 VS 亚特兰大老鹰 印第安纳步行者 VS 底特律活塞 印第安纳步行者 VS 亚特兰大老鹰 亚特兰大老鹰 VS 底特律活塞 亚特兰大老鹰 VS 印第安纳步行者 #不分主客队 SELECT a.team_name as '队伍1' ,'VS' , b.team_name as '队伍2' FROM team as a ,team as b where a.team_id<b.team_id; 队伍1 VS 队伍2 ------------------------------------ 底特律活塞 VS 印第安纳步行者 底特律活塞 VS 亚特兰大老鹰 印第安纳步行者 VS 亚特兰大老鹰

    作者回复: 可以看下这个留言,解释的很详细

    2019-07-03
    12
    101
  • 有两个问题: 1: 在进行连接查询的时候,查询的顺序是什么呢? 是先进行笛卡尔积在进行条件条件筛选吗? 2: 在进行连接查询的时候 on 中的条件和 where 中的条件有什么区别呢? 这两个的筛选顺序一样吗?

    作者回复: 1、查询顺序是:FROM > WHERE > GROUP BY > HAVING > SELECT 的字段 > DISTINCT > ORDER BY > LIMIT 可以看下05篇后面的内容。 你说的正确,是先进行 CROSS JOIN 求笛卡尔积,然后进行条件筛选。 2、执行的顺序会先进行ON连接,然后进行WHERE筛选。ON连接是一般连接表的方式,当我们得到数据之后,再会对数据行进行条件筛选

    2019-07-05
    2
    25
  • 长安落雪
    SELECT t1.team_name,t2.team_name FROM team as t1 LEFT JOIN team as t2 ON t1.team_id != t2.team_id SELECT t1.team_name , t2.team_name FROM team as t1 ,team as t2 where t1.team_id<t2.team_id;

    作者回复: 正确,大家可以参考下这个。如果是分主客场的话,是第一个SQL。如果是不重复的两个球队的比赛的话,是第二个SQL。

    2019-07-04
    21
  • 圆子蛋
    三队对阵的可能组合: SELECT * FROM team AS a,team AS b WHERE a.team_id < b.team_id 主客场对阵的可能(只列出名字的话是不是可以这样?) SELECT a.team_name as 主场,b.team_name as 客场 FROM team AS a,team AS b WHERE a.team_id != b.team_id

    作者回复: 这两个SQL都正确

    2019-07-03
    3
    5
  • Samson
    SQL:SELECT p.player_name, p.height, h.height_level FROM player AS p, height_grades AS h WHERE p.height BETWEEN h.height_lowest AND h.height_highest 老师,我还是不能够理解这条语句中WHERE之后的部分,可以麻烦详加解释一番吗? 另外,对于外连接的两个例子,可以把已经结果也贴一下吗?感觉这样子下效果会更好

    作者回复: SELECT p.player_name, p.height, h.height_level FROM player AS p, height_grades AS h WHERE p.height BETWEEN h.height_lowest AND h.height_highest 我们是用的两张表进行连接,会显示出来height,然后你需要显示height对应的height_level,这个height_level在height_grades数据表中可以查询,也就是用WHERE条件进行筛选,把对应的height_level找出来,WHERE条件为:WHERE p.height BETWEEN h.height_lowest AND h.height_highest

    2019-07-05
    3
    4
  • 野马
    那一个RDBMS支持多个SQL标准吗?

    作者回复: 这是一个好问题,有的时候是同时支持的,比如: SELECT * FROM a, b 和 SELECT * FROM a JOIN b 但有的时候又不支持,比如在MySQL中不支持SQL92标准下的 +号方式的外连接,但是支持SQL99的外连接方式。 具体还需要参考RDBMS相关的文档,即使是同一个标准,每个RDBMS都有自己的“方言”,使用的语法也有差异。

    2019-07-04
    4
  • 技术修行者
    目前主流的DNMS应该都是按照SQL99的规定来设计连接操作的,在实际工作中,极少看到SAL语句中带+的情况。我的建议是在介绍了基本概念后,可以直接使用SAL99,这样更有利于实战。

    作者回复: 对 后面有讲解到SQL99

    2019-10-02
    3
  • 太精
    select * from team as a, team as b where a.team_id != b.team_id; +---------+-----------------------+---------+-----------------------+ | team_id | team_name | team_id | team_name | +---------+-----------------------+---------+-----------------------+ | 1002 | 印第安纳步行者 | 1001 | 底特律活塞 | | 1003 | 亚特兰大老鹰 | 1001 | 底特律活塞 | | 1001 | 底特律活塞 | 1002 | 印第安纳步行者 | | 1003 | 亚特兰大老鹰 | 1002 | 印第安纳步行者 | | 1001 | 底特律活塞 | 1003 | 亚特兰大老鹰 | | 1002 | 印第安纳步行者 | 1003 | 亚特兰大老鹰 | +---------+-----------------------+---------+-----------------------+

    作者回复: 主队,客队的话 是这样的

    2019-07-04
    3
  • xy
    表怎么下载下来的?

    作者回复: GitHub上有SQL文件,然后导入到MySQL里

    2019-07-15
    2
    2
  • Goal
    老师好, 1. 文中“等值连接” 的结果图配错了,此处应该是只有:底特律活塞、印第安纳步行者的37名成员的表; 2. 思考题,主客场共计6场比赛 SELECT a.team_name,b.team_name from team a,team b WHERE a.team_id != b.team_id SELECT a.team_name,b.team_name FROM team a JOIN team b WHERE a.team_name <> b.team_name

    编辑回复: 您好,文章已进行更正,谢谢您的反馈。

    2019-07-03
    2
收起评论
显示
设置
留言
70
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部