• mickey 置顶
    2019-07-03
    /*
    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    亚特兰大老鹰
    展开

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

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

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

     1
     7
  • 长安落雪
    2019-07-04
    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。

    
     7
  • ack
    2019-07-03
    练习:
    1.①内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接。自然连接是一种特殊的等值连接,他要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列。要求是两个这两个关系中参与比较的属性列必须是同名、同属性。
    ②外连接有三种方式:左连接,右连接和全连接。
    ③自连接,连接的两个表都是同一个表
    2.SELECT * FROM team a,team b WHERE a.team_id < b.team_id;
    展开
    
     5
  • 小白
    2019-07-21
    老师请教个问题,数据库主键id bigint 自增 为什么有时候会出现id跳跃增长,整个表没有删除操作,尤其线上,跳跃幅度很大
     3
     3
  • 圆子蛋
    2019-07-03
    三队对阵的可能组合:
    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都正确

    
     3
  • Paradise
    2019-10-24
    "查看比布雷克·格里芬高的球员都有谁"看个这个题目第一反应是想到子查询。。。

    SELECT player_name, height FROM player WHERE height > (SELECT height FROM player WHERE player_name = '布雷克-格里芬');
    
     2
  • Samson
    2019-07-05
    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

     2
     2
  • 太精
    2019-07-04
    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 | 亚特兰大老鹰 |
    +---------+-----------------------+---------+-----------------------+
    展开

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

    
     2
  • whaleFall_
    2019-10-23
    连接,有主从表之分。
    内连接:主表和从表的交集,类似“”等值连接“”
    左外连接:主表连接从表(+),显示主表的全部记录,从表只显示符合条件的记录。
    右外连接,和左外连接相反。
    全外连接:主表和从表的并集。
    自连接:自己连接自己,查询的时候用到了自己的字段。

    # 显示三只球队所有可能的比赛组合

    # 1)分主客队伍
    SELECT
        CONCAT(a.team_name,'VS',b.team_name) AS '主队 VS 客队'
    FROM team AS a
    JOIN team AS b
    ON a.team_id != b.team_id

    # 2)不分主客队伍
    SELECT
        a.team_name AS '队伍1',
        b.team_name AS '队伍2'
    FROM team AS a
    JOIN team AS b
    ON a.team_id < b.team_id
    展开
    
     1
  • 日拱一卒
    2019-10-02
    目前主流的DNMS应该都是按照SQL99的规定来设计连接操作的,在实际工作中,极少看到SAL语句中带+的情况。我的建议是在介绍了基本概念后,可以直接使用SAL99,这样更有利于实战。

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

    
     1
  • Crush
    2019-07-26
    自连接是不是可以用子查询替代?
     1
     1
  • xy
    2019-07-15
    表怎么下载下来的?

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

     1
     1
  • 野马
    2019-07-04
    那一个RDBMS支持多个SQL标准吗?

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

    
     1
  • 悟空
    2019-07-03
    老师好,
    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

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

    
     1
  • 墨禾
    2019-07-03
    /*等值连接:两张表存在相同的列属性*/
    SELECT player_id, player.team_id, player_name, height, team_name FROM player, team WHERE player.team_id = team.team_id;

    /*非等值连接*/
    SELECT p.player_name, p.height...

    极客时间版权所有: https://time.geekbang.org/column/article/104637


    /*外连接:包括左连接、右连接、全连接*/
    -- 左外连接:左边的表为主表
     select count(*) from team t left outer join player p on t.team_id = p.team_id;
     /*
    1001    底特律活塞    10001    1001    韦恩-艾灵顿    1.93
    1001    底特律活塞    10002    1001    雷吉-杰克逊    1.91
    1002    印第安纳步行者    10037    1002    Ike Anigbogu    2.08
    1003    亚特兰大老鹰                
    */
    -- 右外连接:右边的表为主表
    select count(*) from team t RIGHT outer join player p on t.team_id = p.team_id;
    /*
    1001    底特律活塞    10001    1001    韦恩-艾灵顿    1.93
    1001    底特律活塞    10002    1001    雷吉-杰克逊    1.91
    1002    印第安纳步行者    10037    1002    Ike Anigbogu    2.08
    1003    亚特兰大老鹰                
    */

    -- 全连接:两张表做笛卡尔积
    select count(*) from team t outer join player p on t.team_id = p.team_id;
    /*
    1001    底特律活塞    10001    1001    韦恩-艾灵顿    1.93
    1001    底特律活塞    10002    1001    雷吉-杰克逊    1.91
    1002    印第安纳步行者    10037    1002    Ike Anigbogu    2.08
    1003    亚特兰大老鹰                
    */


    select count(*) from team t inner join player p on t.team_id = p.team_id;


    -- 自连接:可对单表或多表进行操作
    SELECT b.player_name, b.height FROM player as a , player as b WHERE a.player_name = '布雷克 - 格里芬' and a.height < b.height

    /*请用一条 SQL 语句显示出所有可能的比赛组合*/
    SELECT * FROM team t1 , team t2 WHERE t1.team_id<> t2.team_id
    -- 或
    SELECT * FROM team t1 , team t2 WHERE t1.team_id !=t2.team_id
    展开

    作者回复: Good Job

    
     1
  • 爬行的蜗牛
    2020-01-22
    mysql> SELECT * FROM team join team as te on team.team_id!=te.team_id;
    +---------+-----------------------+---------+-----------------------+
    | team_id | team_name | team_id | team_name |
    +---------+-----------------------+---------+-----------------------+
    | 1002 | 印第安纳步行者 | 1001 | 底特律活塞 |
    | 1003 | 亚特兰大老鹰 | 1001 | 底特律活塞 |
    | 1001 | 底特律活塞 | 1002 | 印第安纳步行者 |
    | 1003 | 亚特兰大老鹰 | 1002 | 印第安纳步行者 |
    | 1001 | 底特律活塞 | 1003 | 亚特兰大老鹰 |
    | 1002 | 印第安纳步行者 | 1003 | 亚特兰大老鹰 |
    +---------+-----------------------+---------+-----------------------+
    6 rows in set (0.00 sec)
    展开
    
    
  • 高泽林
    2019-12-17
    要实际验证一下!

    作者回复: 对的 最好自己能练习操作下

    
    
  • taoist
    2019-12-16
    -- MariaDB

    -- 主客
    SELECT CONCAT( t1.team_name ,'(主)----(客)', t2.team_name) FROM team t1, team t2
    WHERE t1.team_id != t2.team_id;


    -- 不分主客
    SELECT CONCAT( t1.team_name ,'----', t2.team_name) FROM team t1, team t2
    WHERE t1.team_id < t2.team_id;
    展开

    作者回复: 2个SQL正确

    
    
  • Hash
    2019-12-06
    外连接不仅可以返回符合条件的行,还可以返回一些不符合条件的行
    内连接只能返回符合条件的行,不能返回不符合条件的行
    自连接自己连接自己,查询的时候用到了自己的字段,也可以多表进行连接

    学习这一节我觉得重点在于理解连接是如何进行的,区分清楚各个连接查询的主表和从表
    想要很深刻的理解,还是需要多做题目

    练习题
    SQL语句
    SELECT a.`team_name` AS 主队,b.team_name AS 客队
    FROM team AS a,team AS b
    WHERE a.`team_id` < b.`team_id`;

    展开

    作者回复: 总结的不错,SQL正确

    
    
我们在线,来聊聊吧