Mysql join连接查询的语法与示例
连接查询:
是将两个查询(或表)的每一行,以“两两横同对接”的方式,所得到的所有行的结果,即一个表中的某行,跟另一个表中的某行。进行“横向对接”,得到一个新行。
连接查询包括以下这些不同形式,连接方式:
交叉连接、内连接、外连接(分:左外连接,右外连接)
连接查询语法:
select*from表名[连接方式]join表名[on连接条件]where...;
测试数据:
mysql>select*fromtest; +----+--------+------+------+ |id|name|sex|age| +----+--------+------+------+ |1|name1|女|15| |2|name1|女|15| |4|name2|男|30| |5|name50|男|12| +----+--------+------+------+ mysql>select*fromuser; +----+-------+------+ |id|name|age| +----+-------+------+ |1|name1|18| |2|name2|15| |3|name3|20| |4|name4|30| +----+-------+------+
交叉连接(crossjoin)
1、交叉连接其实可以认为是连接查询的“完全版本”,即所有行都无条件地都连接起来。
2、关键字“cross”可以省略;
3、交叉连接又称为“笛卡尔积”,通常应用价值不大
语法形式:
select*from表名,表名;
select*from表名join表名;
select*from表名crossjoin表名;
规范的交叉连接写法
mysql>select*fromtestcrossjoinuser; +----+--------+------+------+----+-------+------+ |id|name|sex|age|id|name|age| +----+--------+------+------+----+-------+------+ |1|name1|女|15|1|name1|18| |2|name1|女|15|1|name1|18| |4|name2|男|30|1|name1|18| |5|name50|男|12|1|name1|18| |1|name1|女|15|2|name2|15| |2|name1|女|15|2|name2|15| |4|name2|男|30|2|name2|15| |5|name50|男|12|2|name2|15| |1|name1|女|15|3|name3|20| |2|name1|女|15|3|name3|20| |4|name2|男|30|3|name3|20| |5|name50|男|12|3|name3|20| |1|name1|女|15|4|name4|30| |2|name1|女|15|4|name4|30| |4|name2|男|30|4|name4|30| |5|name50|男|12|4|name4|30| +----+--------+------+------+----+-------+------+
直接使用join进行连接,相当于crossjoin,默认就是交叉连接
mysql>select*fromtestjoinuser;
查询结果跟上面一致!!!
还可以直接from表,表...也相当于是交叉连接
mysql>select*fromtest,user;
查询结果跟上面一致!!!
内连接(innerjoin)
1、内连接其实是交叉连接的基础上,再通过on条件而筛选出来的部分数据。
2、关键字"inner"可以省略,但建议写上,真正有意义的是on连接条件。
3、内连接是应用最广泛的一种连接查询,其本质是根据条件筛选出“有意义的数据”。
语法形式:
select*from表名join表名on连接条件;
select*from表名innerjoin表名on连接条件;
查出两个表中name字段相等的数据
mysql>select*fromtestinnerjoinuserontest.name=user.name; +----+-------+------+------+----+-------+------+ |id|name|sex|age|id|name|age| +----+-------+------+------+----+-------+------+ |1|name1|女|15|1|name1|18| |2|name1|女|15|1|name1|18| |4|name2|男|30|2|name2|15| +----+-------+------+------+----+-------+------+
查出两个表中name字段相等的数据,通过as给表取个别名进行使用
mysql>select*fromtestastinnerjoinuserasuont.name=u.name;
查询结果跟上面一致!!!
查出两个表中name字段相等,test表中age>15,user表中age>10的数据
如果使用表中有重复的字段,那么就需要通过[表名.字段名]来使用,例如age:
mysql>select*fromtestinnerjoinuserontest.name=user.namewheretest.age>15anduser.age>10; +----+-------+------+------+----+-------+------+ |id|name|sex|age|id|name|age| +----+-------+------+------+----+-------+------+ |4|name2|男|30|2|name2|15| +----+-------+------+------+----+-------+------+
查出两个表中name字段相等,且sex='男'的数据。
如果使用表中没有重复的字段,那么可以通过[表名.字段名]或者直接使用[字段名]使用,例如sex:
mysql>select*fromtestastinnerjoinuserasuont.name=u.namewheret.sex='男'; mysql>select*fromtestastinnerjoinuserasuont.name=u.namewheresex='男'; +----+-------+------+------+----+-------+------+ |id|name|sex|age|id|name|age| +----+-------+------+------+----+-------+------+ |4|name2|男|30|2|name2|15| +----+-------+------+------+----+-------+------+
外连接-左外连接(leftjoin)
1、左外连接其实是保证左边表的数据都能够取出的一种连接。
2、左外连接其实是在内连接的基础上,再加上左边表中所有不能满足条件的数据
3、关键字“outer"可以省略。
语法形式:
select*from表名left[outer]joinon连接条件where...;
以左边的表为基准,保证左边表的数据全部显示,匹配不到的数据为NULL
mysql>select*fromtestleftjoinuserontest.name=user.name; +----+--------+------+------+------+-------+------+ |id|name|sex|age|id|name|age| +----+--------+------+------+------+-------+------+ |1|name1|女|15|1|name1|18| |2|name1|女|15|1|name1|18| |4|name2|男|30|2|name2|15| |5|name50|男|12|NULL|NULL|NULL| +----+--------+------+------+------+-------+------+
外连接-右外连接(rightjoin)
1、右外连接其实是保证右边表的数据都能够取出的一种连接。
2、右外连接其实是在内连接的基础上,再加上右边表中所有不能满足条件的数据
3、关键字“outer"可以省略。
语法形式:
select*from表名right[outer]joinon连接条件where...;
以右边的表为基准,保证右边表的数据全部显示,匹配不到的数据为NULL
mysql>select*fromtestrightjoinuserontest.name=user.name; +------+-------+------+------+----+-------+------+ |id|name|sex|age|id|name|age| +------+-------+------+------+----+-------+------+ |1|name1|女|15|1|name1|18| |2|name1|女|15|1|name1|18| |4|name2|男|30|2|name2|15| |NULL|NULL|NULL|NULL|3|name3|20| |NULL|NULL|NULL|NULL|4|name4|30| +------+-------+------+------+----+-------+------+
总结
到此这篇关于Mysqljoin连接查询的语法与示例的文章就介绍到这了,更多相关Mysqljoin连接查询内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。