子查询
子查询(Subquery),也被称为嵌套查询(Nested Query),是指在一个查询句子中嵌套运用另一个完好的查询句子。子查询能够被视为一个查询的成果集,它能够作为外层查询的一部分,用于进一步筛选、核算或操作数据。
子查询一般出现在主查询的WHERE子句、FROM子句、HAVING子句或SELECT子句中,以提供更复杂的查询逻辑。子查询能够依据主查询的成果动态生成成果集,用于过滤和匹配数据,或者作为函数的参数运用。
子查询能够回来单个值、一列值、一行值或者一个成果集,具体取决于子查询的语法和用法。依据子查询回来的成果类型,能够将其与主查询的其他表达式进行比较、衔接或运用作为条件进行过滤。
咱们之前的案例都是在一张表去查询,实际中不会把一切东西都放在一张表,会进行分表,乃至还会分库分表,读写别离等等。
案例经过姓名查询photo表
photo表数据
user表数据
相关关系为 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 = '小满')
连表
Mysql的连表分为内衔接,外衔接,穿插衔接
-
对于
内衔接
的两个表,驱动表中的记载在被驱动表中找不到匹配的记载,该记载不会加入到最后的成果集,咱们上边说到的衔接都是所谓的内衔接
。 -
对于
外衔接
的两个表,驱动表中的记载即使在被驱动表中没有匹配的记载,也仍然需求加入到成果集。 -
穿插衔接
是指在两张或多张表之间没有任何衔接条件的衔接。简略来说,穿插衔接
能够让你查询一切或许的组合。
内衔接
SELECT * FROM `user`, `photo` WHERE `user`.`id` = `photo`.`user_id`
外衔接
左衔接
语法规则 LEFT JOIN [衔接的表] ON [衔接的条件]
而且以第一个表作为驱动表
被驱动表如果没有值则弥补null
SELECT * FROM `user` LEFT JOIN `table` ON `user`.`id` = `table`.`user_id`
右衔接
语法规则 LEFT JOIN [衔接的表] ON [衔接的条件]
而且以第二个表作为驱动表
被驱动表如果没有值则忽略
SELECT * FROM `user` RIGHT JOIN `table` ON `user`.`id` = `table`.`user_id`