mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询相关的知识,希望对你有一定的参考价值。

1,表关联的效率要高于子查询,因为子查询走的是笛卡尔积
2,表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好走子查询追问

比如说我有三张表ABC,其中AB连接要用一个字段,BC连接要用一个字段,就是A和B是多对多的关系,我该用什么查询呢

追答

多表查询 用表关联啊,子查询是不建议使用的
看你要取什么样的数据 多对多的话 你要看清楚,容易产生笛卡尔积,取决于你想要什么样的数据
比如你就想要多对多的数据 就可以直接关联嘛

参考技术A

Semi-join 限制

不过并不是所有子查询都是半联接,必须满足以下条件:

    子查询必须是出现在顶层的 WHERE、ON 子句后面的 IN 或者 =ANY子查询必须是单个 select,不能是 union;子查询不能有 group by 或者 having 子句(可以用 semijoin materialization 策略,其他不可以 );It must not be implicitly grouped (it must contain no aggregate functions). (不知道啥意思,保持原文);子查询不能有 order by with limit;父查询中不能有 STRAIGHT_JOIN 指定联接顺序;The number of outer and inner tables together must be less than the maximum number of tables permitted in a join.

MySQL like 在啥情况下会走索引

参考技术A

mysql在使用like查询中,能不能用到索引?在什么地方使用索引呢?

在使用like的时候,如果使用‘%%’,会不会用到索引呢?

上面的结果是全表扫描( type == ALL ),并没有使用到索引。

只是使用一个%的查询结果:

EXPLAIN SELECT * FROM user WHERE username LIKE \'ptd_%\';

这个使用到了索引( type == range )。

在前面使用%时也是全表扫描,没有使用到索引。

综上,mysql在使用like查询的时候只有 不以%开头的时候,才会使用到索引

以上是关于mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询的主要内容,如果未能解决你的问题,请参考以下文章

mysql 啥时候分区 啥时候分表

sql语句中嵌套时候用in 和=有啥区别

MySQL like 在啥情况下会走索引

数据库的SQL语句中,嵌套查询和连接查询有啥区别,说的详细的

mysql数据库查询没有数据的时候会返回啥,是false,还是' ',还是null,还是啥啊?

mysql如何使用like关键字实现模糊查询?有啥注意事项