子查询

子查询(Subquery),也被称为嵌套查询(Nested Query),是指在一个查询句子中嵌套运用另一个完好的查询句子。子查询能够被视为一个查询的成果集,它能够作为外层查询的一部分,用于进一步筛选、核算或操作数据。

子查询一般出现在主查询的WHERE子句、FROM子句、HAVING子句或SELECT子句中,以提供更复杂的查询逻辑。子查询能够依据主查询的成果动态生成成果集,用于过滤和匹配数据,或者作为函数的参数运用。

子查询能够回来单个值、一列值、一行值或者一个成果集,具体取决于子查询的语法和用法。依据子查询回来的成果类型,能够将其与主查询的其他表达式进行比较、衔接或运用作为条件进行过滤。

咱们之前的案例都是在一张表去查询,实际中不会把一切东西都放在一张表,会进行分表,乃至还会分库分表,读写别离等等。

案例经过姓名查询photo表

photo表数据

Nodejs 第三十七章(子查询和连表)

user表数据

Nodejs 第三十七章(子查询和连表)

相关关系为 user表的id 相关 photo表的user_id

但是咱们现在需求经过姓名查询出photo表的数据 但是photo表没有存姓名怎么弄

子查询

咱们的思路便是经过姓名查询user表的id,然后经过user表的id去查询photo的user_id就完成了

SELECT * FROM `photo` WHERE `user_id` = (SELECT id FROM `user` WHERE name = '小满')

Nodejs 第三十七章(子查询和连表)

连表

Mysql的连表分为内衔接,外衔接,穿插衔接

  1. 对于内衔接的两个表,驱动表中的记载在被驱动表中找不到匹配的记载,该记载不会加入到最后的成果集,咱们上边说到的衔接都是所谓的内衔接

  2. 对于外衔接的两个表,驱动表中的记载即使在被驱动表中没有匹配的记载,也仍然需求加入到成果集。

  3. 穿插衔接是指在两张或多张表之间没有任何衔接条件的衔接。简略来说,穿插衔接能够让你查询一切或许的组合。

内衔接

SELECT * FROM `user`, `photo` WHERE `user`.`id` = `photo`.`user_id`

Nodejs 第三十七章(子查询和连表)

外衔接

左衔接

语法规则 LEFT JOIN [衔接的表] ON [衔接的条件]

而且以第一个表作为驱动表 被驱动表如果没有值则弥补null

SELECT * FROM `user` LEFT JOIN `table` ON `user`.`id` = `table`.`user_id`

Nodejs 第三十七章(子查询和连表)

右衔接

语法规则 LEFT JOIN [衔接的表] ON [衔接的条件]

而且以第二个表作为驱动表 被驱动表如果没有值则忽略

SELECT * FROM `user` RIGHT JOIN `table` ON `user`.`id` = `table`.`user_id`

Nodejs 第三十七章(子查询和连表)