Mysql表的连接方式
1.交叉连接(笛卡尔积)
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
sql语句:select * from 表1,表2; 隐士笛卡尔积
select * from 表1 crross join 表2; 显示笛卡尔积
不带条件的内连接也是笛卡尔积:select * from 表1 inner join 表2;
2.内连接 inner join on
Sql语句:select * from 表1 inner join 表2 on 表1.id=表2.id;
注意:隐士笛卡尔积可以在后面跟where查询条件,查询结果和内连接相同(查询条件相 同),不能用on查询条件。显示笛卡尔积where和on都不能用,内连接inner join 后面可跟where查询条件和on查询条件,此处也可以说成笛卡尔带有查询条件后 是内连接。
3.自然连接Natural join(natural join在sql server 中不支持).....查询后的结果没看明白
是一种特殊的等值连接,要求两个关系表中进行比较的属性组必须是名称相同的属性组,并且在结果中把重复的属性列去掉(即:留下名称相同的属性组中的其中一组)。两张表中的名称和类型完全一致的列进行内连接
Sql语句:select * from 表1 natrual join 表2;
4.外连接分为全外连接,左外连接,右外连接on后面跟查询条件,不能用where等
全外连接 :select * from 表1 full join 表2 on 表1.id=表2.id;
全外连接在mysql中不能用,在oracle中可以使用;查询结果为左右的数据都显示,如果左边对应的右边没有与之相匹配的数据,则为null,同理左边的为nul。l
左外连接:select * from 表1 left join 表2 on 表1.id=表2.id;
查询结果为:左边的全部显示,右边的如果全部满足左边话,就和左边的显示数据条数相同;如果右边的不完全满足左边的话,则左边的表数据对应的右边为null;
右外连接:select * from 表1 right join 表2 on 表1.id=表2.id;
查询结果为:右边的全部显示,左边的如果全部满足右边话,就和右边的显示数据条数相同;如果左边的不完全满足右边的话,则右边的表数据对应的左边为null;
5.Union 和Union all
Union和union all是联合查询,union联合查询的条件是两个表的字段个数都是相同的
Union Sql语句:select * from 表1 union select * from 表2;
Union all Sql语句:select * from 表1 union all select * from 表2;
Union的查询结果为,如果两个表中右相同数据的话,则之显示一条,将两个表合称为一个表。
Union all的查询结果为,如果两个表中右相同数据的话,则全部显示,将两个表合称为一个表。
以上内容由本人亲自整理,通过Windows下mysql,进行建表,写sql语句,亲自测试总结,在自然连接这块不是很明白,欢迎熟悉自然连接的留言,探讨,也欢迎其他朋友提出建议。