笔记之MySQL多表查询等值连接、内连接inner join …on、左连接left join…on、右连接right join…on、自关联

         等值连接
会出现笛卡尔积(出现一张虚拟的临时表,不存在),此时需要过滤掉错误的数据,以两表都出现的对应字段对接两表,最后结果是显示出来的就是证确的数据,这叫等值连接,格式:select * from 表1,表2 where 表1.列=表2.列
例如:select stu.*,sc.score from students stu,scores sc where stu.studentNo=sc.studentno

inner join ... on

内连接:笔者理解:从一个表取一条数据与第二个表对应的字段比较,相等则保留两天数据并连接在一起,形成一个虚拟表,这叫内连接。需要先了结笛卡尔积原理,内连接on后面的相等条件其实是在排除笛卡尔积后的错误数据。

如:

select * from table1 a
inner join table2 b on a.no = b.No(按照No字段此字段交集,显示交集里的数据,即No相同时数据显示,不同即去掉,取的数据时两者共有的)

若有三个表

select * from table1 a
inner join table2 b on a.no = b.No
inner join table3 c on b.no=c.No(三个表之间有一个表负责把另外两个表连起来,如:b表是有一个字段与a表相等,同时也有一个字段与c表相等,取三表的共同部分)

 

left join ...on

左连接理解:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null,就是取左表的全部,右表的部分符合要求的,其中左右以join的左右分

1、select * from table1 a
left join table2 b on a.No = b.No

2、select * from table1 a
left join table2 b on a.No = b.No
left join table3 c on c.No = b.No

 

right join...on

右连接理解与左连接刚好相反

1、select * from table1 a
right join table2 b on a.No = b.No

2、select * from table1 a
right join table2 b on a.No = b.No
right join table3 c on c.No = b.No

 

自关联

自关联指的是带多层次的数据(如地址省市县乡镇村等)存储,存储是都存与一张表,若存多张表浪费资源
查询时连接表越多,查询效率越低,需要的资源越多,浪费太多,如传销,存不到头,实际上数据库上是一张表维护(这种情况可以把一张表用多次,多起别名)

如:查询河南省的所有城市
select * from aress p,aress c(把一个表起两个别名,把一个表当成两个表来用)
where p.aid=c.pid and p.atitle='河南';

 

ps:以学习和记录为目的有错误请指出

 

posted @ 2020-04-18 21:56  吾言!  阅读(677)  评论(0编辑  收藏  举报