首页 / MYSQL / mysql多表联合查询
mysql多表联合查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql多表联合查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2275字,纯文字阅读大概需要4分钟。
内容图文
![mysql多表联合查询](/upload/InfoBanner/zyjiaocheng/537/69933e586a0b44148bae05f9aa2861a5.jpg)
推荐课程:MySQL教程。
多表连接类型
1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如:
SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2
由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN
2. 内连接INNER JOIN 在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件在MySQL中CROSS和INNER JOIN被划分在一起。 join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]
3. MySQL中的外连接,分为左外连接和右连接,即除了返回符合连接条件的结果之外,还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。
例子:
user表: id | name ——— 1 | libk 2 | zyfon 3 | daodao user_action表: user_id | action ————— 1 | jump 1 | kick 1 | jump 2 | run 4 | swim
sql语句:
select id, name, action from user as uleft join user_action a on u.id = a.user_id
结果:
id | name | action ——————————– 1 | libk | jump 结果1 1 | libk | kick 结果2 1 | libk | jump 结果3 2 | zyfon | run 结果4 3 | daodao | null 结果5 ---------------------
分析:
注意到user_action中还有一个user_id=4, action=swim的纪录,但是没有在结果中出现,
而user表中的id=3, name=daodao的用户在user_action中没有相应的纪录,但是却出现在了结果集中
因为现在是left join,所有的工作以left为准.
结果1,2,3,4都是既在左表又在右表的纪录,5是只在左表,不在右表的纪录
工作原理:
从左表读出一条,选出所有与on匹配的右表纪录(n条)进行连接,形成n条纪录(包括重复的行,如:结果1和结果3),如果右边没有与on条件匹配的表,那连接的字段都是null.然后继续读下一条。
引申:
我们可以用右表没有on匹配则显示null的规律, 来找出所有在左表,不在右表的纪录, 注意用来判断的那列必须声明为not null的。
如:
select id, name, action from user as uleft join user_action a on u.id = a.user_idwhere a.user_id is NULL
(注意:1.列值为null应该用is null 而不能用=NULL
2.这里a.user_id 列必须声明为 NOT NULL 的.)
上面sql的result:
id | name | action ————————– 3 | daodao | NULL
以上就是mysql多表联合查询的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的mysql多表联合查询全部内容,希望文章能够帮你解决mysql多表联合查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。