含义: 又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
比如下面两张表:
查询每个每个类型下的社团信息,这里面的数据来源于两个表,就用到了多表查询。
语法:
-- 查询社团名称和社团分类名称
select klasifiko_name,name from club,club_klasifiko;
查询出的数据只是club与club_klasifiko进行无条件匹配。
笛卡尔积现象:表1有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
select klasifiko_name,name from club_klasifiko,club where club_klasifiko.id=club.klasifiko_id;
连接查询分类:
按功能分类:
- 内连接
- 等值连接
- 非等值连接
- 自连接
- 外连接
- 左外连接
- 右外连接
- 全外连接(MySQL不支持)
- 交叉连接
1. 等值连接:
在连接条件中使用等于号(=)运算符比较被连接列的列值
例如:查询出每个社团类型下对应的社团名称
select klasifiko_name,name from club_klasifiko,club where club_klasifiko.id = club.klasifiko_id;
-
为表起别名:
- 优点:提高语句的简洁度,区分多个重名的字段
- 注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定
-
当查询语句中设计多张表或者表名比较复杂时,我们可以为其起别名
select c1.klasifiko_name,c2.name from club_klasifiko as c1,club as c2 where c1.id=c2.klasifiko_id;
- 当从多张表查询数据时,表的顺序可以任意调换
select c1.klasifiko_name,c2.name from club as c2,club_klasifiko as c1 where c1.id=c2.klasifiko_id;
- 加筛选条件
-- 查询出每个文化体育类型下对应的社团名称
select c1.klasifiko_name,c2.name from club_klasifiko c1,club c2 where c1.id=c2.klasifiko_id and c1.klasifiko_name='文化体育';
2. 非等值连接:
连接条件不为’=’
例如:查询员工的工资和工资级别,如下图所示: