作者:shanfeng0828_589 | 来源:互联网 | 2024-11-01 13:38
在第六章中,我们将深入探讨MySQL中的多表查询技术,包括联结查询和子查询。联结查询通过将两个或多个表进行连接,基于连接条件生成结果集。常见的联结类型有内联结、外联结和全外联结。交叉联结(CROSSJOIN)虽然使用较少,但其原理是生成所有可能的组合,类似于笛卡尔积的概念。此外,子查询则是在一个查询语句中嵌套另一个查询,用于获取更复杂的数据集。本章将通过实例详细讲解这些查询方法的应用和优化技巧。
0x01
MySQL多表查询和子查询
联结查询:事先将两张或者多张表join,根据join的结果进行查询
cross join:交叉联结 用的少, 相当于 (a+b)*(c+d+e) 所得结果的形式 用的少
自然联结 --- 只能在两者相等的情况下才能建立连接
等值联结:把相同的字段进行等值连接
外联结:
左外联接:只保留出现在左外连接元算之前(左边)的关系中的元组(以左表为准,)
left_tb LEFT JOIN right_tb ON 条件
右外联接:只保留出现在右外连接元算之后(右边)的关系中的元组(以右表为准)
left_tb RIGHT JOIN right_tb ON 条件
全外联接: --- 用的少
自联结:
别名:AS
表别名:
字段别名
子查询:在查询中嵌套的查询 ------ 用于WHERE中的子查询
1.用于比较表达式中的子查询
子查询的返回值只能有一个
2.用于EXISTS中的子查询
判断存在与否
3.用于IN中的子查询
判断存在于指定列表中
用于FROM中子查询
select alias.col,....FROM(SELECT CLUSE) alias WHERE condition
MYSQL不擅长于子查询,应该避免使用子查询
总结:mysql的连接查询与子查询
联结:
交叉联结:
内联结:
外联结:
左外
右外
自联结
子查询:
用于where中的子查询
用于条件比较:
用于exists
用于IN中
用于FROM
MYSQL的联合查询:
把两个或多个查询语句的结果合并成一个结果进行输出
select clauase union select clause union.....
索引
show indexs from tb_name 查看索引
show indexes from students\G;
alter table tb_name add index(字段) --- 更改为索引
创建索引
explain 解释命令,查看命令的执行过程
MYSQL视图(虚表)
存储下来的select语句
创建:
create view 视图名 as select语句
create view stud as select name,age,gender from students;
删除:
drop view 视图名
mysql基础-数据库多表查询-记录(六)