mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询相关的知识,希望对你有一定的参考价值。
1,表关联的效率要高于子查询,因为子查询走的是笛卡尔积2,表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好走子查询追问
比如说我有三张表ABC,其中AB连接要用一个字段,BC连接要用一个字段,就是A和B是多对多的关系,我该用什么查询呢
追答多表查询 用表关联啊,子查询是不建议使用的
看你要取什么样的数据 多对多的话 你要看清楚,容易产生笛卡尔积,取决于你想要什么样的数据
比如你就想要多对多的数据 就可以直接关联嘛
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 在啥情况下会走索引
参考技术Amysql在使用like查询中,能不能用到索引?在什么地方使用索引呢?
在使用like的时候,如果使用‘%%’,会不会用到索引呢?
上面的结果是全表扫描( type == ALL ),并没有使用到索引。
只是使用一个%的查询结果:
EXPLAIN SELECT * FROM user WHERE username LIKE \'ptd_%\';
这个使用到了索引( type == range )。
在前面使用%时也是全表扫描,没有使用到索引。
综上,mysql在使用like查询的时候只有 不以%开头的时候,才会使用到索引 。
以上是关于mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询的主要内容,如果未能解决你的问题,请参考以下文章
数据库的SQL语句中,嵌套查询和连接查询有啥区别,说的详细的