MySQL学习2:多表
1. 多表查询的错误方式:没有连接条件 or 连接没起作用
cross join
也叫:笛卡尔积
也叫:交叉连接
两张表,每一条目两两相乘
2. 多表查询的正确方式:需要连接条件
【SQL优化】从sql优化的角度,建议多表查询时,每个字段前都指明其所在的表
【阅读优化】可以给多张表各自取别名,且在取了别名之后,select和where中只能只用别名而不能使用表原来的名
如果有n个表实现多表的查询,则至少需要n-1个连接条件
3. 多表查询的分类
(1) 等值连接 VS 非等值连接
等值连接
连接条件用 = 连接
非等值连接
连接条件用除了 = 之外的连接
(2)自连接 VS 非自连接
自连接
一张表,自己和自己进行连接
非自连接
多张不用的表,进行连接
(3)内连接 VS 外连接
内连接
合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
(以下为SQL92的内连接写法)
(以下为SQL99的内连接写法)
外连接
两个表在连接过程中除了返回满足连接条件的行以外,还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。没有匹配的行时,结果表中相应的列为空(NULL)。
左外连接
如果是左外连接,则连接条件中左边的表也称为主表,右边的表称为从表。
右外连接
如果是右外连接,则连接条件中右边的表也称为主表,左边的表称为从表。
满外连接
全都有
内连接
左外连接
右外连接
满外连接