mysql数据库多表各种join用法

举报
仙士可 发表于 2023/06/14 12:00:54 2023/06/14
【摘要】 在数据库查询中,往往会需要查询多个表的数据,比如查询会员信息同时查询关于这个会员的订单信息,如果分语句查询的话,效率会很低,就需要用到join关键字来连表查询了下面是例子分析会员表:useruser_id  user_name1      张三2      李四3      王老五订单表:orderorder_id   user_id    order_name1        3     ...

数据库查询中,往往会需要查询多个表的数据,比如查询会员信息同时查询关于这个会员的订单信息,如果分语句查询的话,效率会很低,就需要用到join关键字来连表查询了

下面是例子分析

会员表:user

user_id  user_name

1      张三

2      李四

3      王老五

订单表:order

order_id   user_id    order_name

1        3         机械键盘套装

2        1         鼠标套装

3        1         机械键盘套装

4        5         机械键盘套装

5        3         显卡

6        3         散热器

如果我想查询会员名张三的订单数据

平常的方法是

先查询张三的id

SELECT user_id FROM user WHERE user_name ='张三' LIMIT 1;

获取到张三的id为1之后,再通过会员id来查询订单

SELECT * FROM order WHERE user_id = 1;

如果用join连接的话,直接一条语句就可以搞定

SELECT o.* FROM user AS u LEFT JOIN order AS o ON o.user_id=u.user_id WHERE u.user_name='张三'; 

这样就可以直接查询到张三的订单信息了

join分 

left join,返回左表所有符合条件的记录和右表连接相等的记录

inner join,只返回两个表中联结字段相等的行

right join,返回右表所有符合条件的记录和左表连接相等的记录

语法为

FROM table1 LEFT JOIN(INNEER  RIGHT) table2 ON table1.field1 compopr table2.field2   说明:table1, table2参数用于指定要将记录组合的表的名称。  field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的  名称。  compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。  如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。

下面是几个例子

INNER JOIN 

SELECT o.* FROM user AS u INNER JOIN order AS o ON o.user_id=u.user_id WHERE u.user_name='李四';

查询结果是空的

因为inner join 只返回连接相等的行,order表是没有关于李四的订单记录的

LEFT JOIN 

SELECT o.* FROM user AS u INNER JOIN order AS o ON o.user_id=u.user_id WHERE u.user_name='李四';

查询结果为

user_id  user_name

1      张三

因为order表没有内容,所以只返回左表的数据

RIGHT JOIN 和LEFT JOIN相反

例如我想查询买了机械键盘套装的会员有多少

SELECT o.* FROM user AS u INNER JOIN order AS o ON o.user_id=u.user_id WHERE u.order_name='机械键盘套装';

查询结果为

user_id  user_name  order_id   user_id      order_name

1      张三       1        3         机械键盘套装

1      张三      3        1         机械键盘套装

              4        5        机械键盘套装

因为会员id 5 数据不存在,所以只返回订单表的内容

这就是 mysql join区别和用法了

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。