多表联查
关系型数据库在设计,往往将一些综合数据,分离到不同的表中,当我们要展示到数据分布在不同的表的列中时,需要将相关表格先联合起来,组成一新的“表”(结果集),然后再对该新表进行SQL查询
-
基本的两表联查
语法:哪些表的哪些字段,两个表的连接字段(外键)
select 表1.字段1,表1.字段2, 表2.字段1,表2.字段2 from 表1,表2 where 连接条件 and 查询条件 //查询表所有字段 select 表1.*,表2.* from .... 连接条件 表1.关联键 = 表2.关联键
示例:
获取学生及班级名信息
select stu_info.`stu_name`, //查询字段 stu_info.`stu_age`, stu_info.`stu_sex`, stu_class.`c_name` from stu_info, //查询表 stu_class where stu_info.`c_id`=stu_class.`c_id`; //连接条件 and stu_info.`stu_age` > 30 //对连接后的结果集,进行条件筛选
-
标准联接查询
- 内连接
语法
select 表1.字段,表2.字段 from 表1 join 表2 on 连接条件 where 查询条件
示例:
select stu_info.`*`, stu_class.`*` from stu_info right join stu_class on stu_info.`c_id`=stu_class.`c_id` where stu_age > 20
- 左/右联接查询
表1 left join 表2 on 联接条件 表1 right join 表2 on 联接条件
- left : 表示,以表1为主表,将表2向表1合并,包证表1数据完整性(合并后集合中必须包含所有的表1数据项),如果表2有表1没有,就将没有项丢弃。 表1有,表2有就补NULL
- right:表示,以表2为主表,将表1向表2合并,包证表2数据完整性(合并后集合中必须包含所有的表2数据项),如果“辅表”有 “主表” 没有,就将“主表没有项”丢弃。 主表有,辅表没有,就补NULL