简介 目录 评价 推荐
  • 蜉蝣一日丶 2020-07-11
    这个是有什么使用场景限制吗
    1回答·769浏览
  • 0_菇凉将我作甚_0 2019-07-15
    这样也能查询出来,这种方式可行吗?

    不可以,日期不对

    2回答·892浏览
  • 慕尼黑3098031 2019-02-21
    join优化聚合子查询没有where子句,能用到索引ma

    这个具体得看执行计划,join两表的连接条件有索引的话,数据库会根据连接条件获取满足条件的数据,并进行相应的优化,一般来说数据量小的话,走不走索引影响不大,数据量达到一定级别且连接条件的字段有索引,数据库就会走索引

    1回答·1351浏览
  • 慕粉2125062864 2019-02-16
    left jion 能不能和 right outer jion划等号
    已采纳 久伴兔兔宝宝 的回答

    left join即left outer join是左连接,若有A\B两张表,意思是查询出A表的全部数据和与之对应的B表数据,B表中没有的数据就用null代替;而right outer join是右连接,意思是查询出B表的全部数据和与之对应的A表数据。怎么会划等号?查出的数据都不一样的

    1回答·1100浏览
  • qq_d_134 2018-12-06
    为啥要用where 在c.user_id=b.user_id

    关联查询

    1回答·1433浏览
  • qq_耶丑_imuzC6 2018-11-07
    JOIN的使用

    是三个表,第三个标的的目的是要算出max(kills)

    2回答·1133浏览
  • 破裂人偶 2018-07-06
    where b.user_id = c.user_id
    已采纳 jamieacejiang 的回答

    加了where b.user_id = c.user_id这个条件,max(c.kills)是可变的(会求出3个userid的各个的最大值,然后去外面卡where条件),不加,这个值是固定的(是这些userid里最大的一个值,无意义)。

    2回答·1773浏览
  • 华振宇 2018-03-14
    谁能详细解释下where里面的子查询是什么意思,看不太懂

    where b.kills = (select max(c.kills) from user_kills as c where b.user_id = c.user_id);可以这么理解:括号外的where b.user_id依次取数,但是只要满足括号内where b.user_id = c.user_id,即把同类ID最大的kills返回,相当于有一个分组条件;若不加上的话,只返回kills中最大的值,这个值是唯一的

    3回答·2598浏览
  • 华振宇 2018-03-14
    哪位大神知道MAX(c.kills)的值是怎么来的吗?

    c是user_kills的别名(user_kills有两个别名),max是用来求最大值的函数

    1回答·1186浏览
  • 忘记唱情歌 2017-11-25
    请问??????????

    是user_kills表的kills字段

    1回答·1147浏览
  • hen_nam 2017-11-05
    为什么执行这条 SQL 语句只能查询到 2 条记录?

    实际就是两条数据

    1回答·1153浏览
  • 薛cf 2017-05-29
    那位大神给讲解一下语句的执行流程
    已采纳 qq_为了美好的明天 的回答

    (user1 a
    join user_kills b on a.id = b.user_id
    join user_kills c on c.user_id = b.user_id
    group by a.user_name , b.timestr , b.kills
    having b.kills = MAX(c.kills))相当于虚拟了一个表,

    然后(select a.user_name , b.timestr , b.kills from )是从这个虚拟表中挑选的。

    对于上面的虚拟表 先用两个join把三个表关联起来,group是对这个虚拟表的数据的排序,having 字句是减小范围用的。

    3回答·1634浏览
  • qq_脸皮要够厚_03389615 2017-03-16
    数据表获取

    各位,现提供该课程建库建表脚本代码共享如下。

    -- 注意自己是否需要建库
    -- create database if not exists mysqldv1;
    
    -- 新建 user1 表
    create table if not exists user1 (
      id smallint unsigned primary key auto_increment,
      user_name varchar(40),
      over varchar(40)
    );
    -- 新建 user2 表
    create table if not exists user2 (
      id smallint unsigned primary key auto_increment,
      user_name varchar(40),
      over varchar(40)
    );
    -- 新建 user_kills 表
    create table if not exists user_kills (
      id smallint unsigned primary key auto_increment,
      user_id smallint unsigned,
      timestr timestamp default CURRENT_TIMESTAMP,
      kills smallint unsigned
    );
    -- 插入 user1 表数据
    insert into user1(user_name,over) values ('唐僧', '旃檀功德佛');
    insert into user1(user_name,over) values ('猪八戒', '净坛使者');
    insert into user1(user_name,over) values ('孙悟空', '斗战胜佛');
    insert into user1(user_name,over) values ('沙僧', '金身罗汉');
    -- 插入 user2 表数据
    insert into user2(user_name,over) values ('孙悟空', '成佛');
    insert into user2(user_name,over) values ('牛魔王', '被降服');
    insert into user2(user_name,over) values ('蛟魔王', '被降服');
    insert into user2(user_name,over) values ('鹏魔王', '被降服');
    insert into user2(user_name,over) values ('狮驼王', '被降服');
    -- 插入 user_kills 表数据
    insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-01-10'), 10);
    insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-01'), 2);
    insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-05'), 12);
    insert into user_kills(user_id, timestr, kills) values (4, timestamp('2013-01-10'), 3);
    insert into user_kills(user_id, timestr, kills) values (4, timestamp('2013-02-11'), 5);
    insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-06'), 1);
    insert into user_kills(user_id, timestr, kills) values (3, timestamp('2013-01-11'), 20);
    insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-12'), 10);
    insert into user_kills(user_id, timestr, kills) values (3, timestamp('2013-02-07'), 17);


    3回答·1423浏览
  • 杨鹏3 2016-10-29
    join 优化聚合子查询问题

    加粗部分是分别查出杀怪最大的数并赋给where条件查询相应的name 和  data

    1回答·1052浏览
  • car 2016-08-28
    join 优化聚合子查询

    他使用条件查询出来数据,再使用聚合函数与查询数据交叉查询出最大数据。

    1回答·991浏览
  • 致远163 2016-06-09
    最后面的where不是多此一举吗?

    c表查询的是最大的打怪数量,不一样,b表示整个第二张表,c查出来的结果是猪八戒

    1回答·1021浏览
  • 致远163 2016-06-09
    为什么不是打怪最多的那个人的时间,为什么是三个人呢?

    因为数据比较少,同一时间段3个人没有同时打怪

    1回答·1166浏览
  • 祁望 2016-05-06
    为什么要用c?
    已采纳 Lowell_hao 的回答

    c 是select MAX(c.kill) from user_kills c where c.user_id = b.user_id 这部分sql语句的,使用c是因为多张表关联查询或者是有子查询的时候使用别名便于区分

    1回答·1467浏览
  • qq_赫克托耳_0 2015-09-30
    这个没太明白,能分解每一步执行讲下么,老师

    对啊,这样做其实就行了

    2回答·1315浏览
  • newnewjiang 2015-08-13
    第二个JOIN
    2回答·967浏览
数据加载中...
开始学习 免费