MySql基本使用
- 联结表
- 关系表
- 联结
- 创建联结
- Where的重要性
- 内部联结
- 联结多个表
- 高级联结
- 表别名
- 3种其他联结
- 自联结
- 自然联结(使用概率低)
- 外部联结
- 例子
- 使用带有聚集函数的联结
- 总结
联结表
关系表
关系表的设计就是要保证把信息分解成多个表,一类数据一个表;
外键:是某个表的一列,它包含另一个表的主键值,定义了两个表之间的关系;
联结
联结:一种机制,用来在一条select语句中关联表;
注意 1.联结由MySql根据需要建立,存在于查询的执行中;2.仅仅在关系列之中插入合法的数据非常重要。
创建联结
Where的重要性
联结两个表时,实际上做的工作是将第一个表中的每一行和第二个表中的每一行进行配对;
where是过滤条件;
注意:没有where子句,第一个表之中每行将与第二个表中的每一行进行配对,无论他们在逻辑上是否可以匹配。
应该保证所有联结都有where子句
笛卡尔积:没有联结条件的表关系返回的结果
内部联结
基于两个表之间的相等测试称为等值联结(equijion),也叫内部联结。
内部联结时可以使用ON而不是Where(尽量使用ON)
联结多个表
联结的表越多,性能下降越厉害
高级联结
表别名
表别名时在查询中使用
表别名不会返回到客户机(列别名可以)
3种其他联结
自联结
自联结经常作为外部语句来替代从相同表中检索数据时使用的子查询语句
自然联结(使用概率低)
作用:排除返回行之中出现重复,排除多次出现
外部联结
联结之中包含了那些在相关表之中没有关联行的行,称为外部联结
没有 *= 操作符:mysql不支持简化字符*=和 =*的使用,在其他DBMS(数据库管理系统)中很流行
left right:左右外部联结唯一差别就是所关联的表的顺序不同,可以通过颠倒where或from子句之中的表顺序进行互相转换
例子
检测所有客户及订单
使用带有聚集函数的联结
聚集函数用来汇总数据
总结
- 一般情况使用内部联结,使用外部联结也是有效的;
- 保证使用正确联结;
- 必须提供联结条件,否则会返回笛卡尔积;
- 一个联结可以包含多个表,但是应该进行从简到繁的撰写联结。