mysql支持嵌套查询或连接查询吗?

mysql支持嵌套查询或连接查询吗?,第1张

sql语句里有嵌套查询,如:

select sname from student where sno in

select sno from sc where cno='2'

这样得查询可以实现一条指令对两个表 *** 作

可在php里我用这个命令来对mysql *** 作时显示sql语句错误!!

不支持,mysql不支持嵌套查询,不支持分布式查询,

不许有个中间转换,

比如你的将 select sno from sc where cno='2'的**结果**存起来,

然后select sname from student where sno in(**结果**,**结果**2)

只能这样。但支持join on。

拼写错误||上面的不许有个中间转换改为: 必须有个中间转换

mysql不支持嵌套查询,分开来写吧

但是mysql支持join语句where用括号括起来!!!!

嵌套查询与连接查询的区别如下:

1、意义上的差异

嵌套查询是包含一个或多个子查询或子查询的另一个术语的select语句。在外部查询中包含内部查询的另一个子查询是SQL语句的扩展。

连接查询是关系数据库中最重要的查询。在关系数据库管理系统中,数据之间的关系不需要确定表的建立时间,实体的所有信息通常都存储在表中。检索数据时,通过连接 *** 作查询存储在多个表中的不同实体的信息。

2、特征上的差异

嵌套查询的主要特点是sql允许从内到外进行多层嵌套分析,并将子查询的结果作为主查询的查询条件。

连接是关系数据库模型的主要特征。多表查询可以通过连接运算符实现。连接 *** 作给用户带来极大的灵活性,可以随时添加新的数据类型。

扩展资料:

连接查询分为:

1、等价联接:在联接条件中使用等号(=)运算符比较联接列的列值,并在查询结果中列出联接表中的所有列,包括重复列。

2、不等联接:在联接条件下使用比较运算符而不是等号运算符比较联接列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

3、自然联接:在联接条件中,使用等号(=)运算符比较联接列的列值,但它使用选择列表指示查询结果集中包含的列,并删除联接表中的重复列。

参考资料来源:

百度百科-嵌套查询

百度百科-连接查询

1. Nested-Loop Join 翻译过来就是嵌套循环连接,简称 NLJ。

这种是 MySQL 里最简单、最容易理解的表关联算法。

比如,拿语句 select * from p1 join p2 using(r1) 来说,

先从表 p1 里拿出来一条记录 ROW1,完了再用 ROW1 遍历表 p2 里的每一条记录,并且字段 r1 来做匹配是否相同,以便输出;再次循环刚才的过程,直到两表的记录数对比完成为止。

2. Block Nested-Loop Join ,块嵌套循环,简称 BNLJ

那 BNLJ 比 NLJ 来说,中间多了一块 BUFFER 来缓存外表的对应记录从而减少了外表的循环次数,也就减少了内表的匹配次数。还是那上面的例子来说,假设 join_buffer_size 刚好能容纳外表的对应 JOIN KEY 记录,那对表 p2 匹配次数就由 1000 次减少到 1 次,性能直接提升了 1000 倍。

3. 最近 MySQL 8.0.18 发布,终于推出了新的 JOIN 算法 — HASH JOIN。

MySQL 的 HASH JOIN 也是用了 JOIN BUFFER 来做缓存,但是和 BNLJ 不同的是,它在 JOIN BUFFER 中以外表为基础建立一张哈希表,内表通过哈希算法来跟哈希表进行匹配,hash join 也就是进一步减少内表的匹配次数。当然官方并没有说明详细的算法描述,以上仅代表个人臆想。那还是针对以上的 SQL,我们来看下执行计划。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6168239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存