mysql数据库多表各种join用法

mysql数据库多表各种join用法

在数据库查询中,往往会需要查询多个表的数据。比如查询会员信息同时关于这个会员的订单信息,如果分语句查询的话,效率会低很多,就需要用到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 散热器

如果我想查询会员名张三的订单数据,平常的方法是:

1
2
3
4
5
# 先查询张三的id
SELECT user_id FROM user WHERE user_name = '张三' LIMIT 1;

# 获取到张三的id为1之后,再通过会员id来查询订单
SELECT * FROM order WHERE user_id = 1;

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

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

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


join分:

left join: 返回左表所有符合条件的记录和右表连接相等的记录。
inner join: 只返回两个表中连接字段相等的行。
right join: 返回右表所有符合条件的记录和左表连接相等的记录。

语法为:

1
2
3
4
5
6
7
8
9
10
FROM table1 LEFT JOIN(INNER RIGHT) table2 ON table1.field1 compopr table2.field2

说明:
table1,table2 参数用于指定将记录组合的表的名称。

field1,field2 参数指定被连接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但他们不需要有相同的名称。

compopr 参数指定关系比较运算符:"=","<",">","<=",">=" 或 "<>"。

如果在 INNER JOIN 操作中要连接包含 Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。

下面是几个例子:

INNER JOIN

1
2
3
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

1
2
3
4
5
6
7
SELECT o.user_id,u.user_name FROM user AS u LEFT JOIN order AS o ON o.user_id = u.user_id WHETE u.user_name = '李四';

查询结果:
user_id user_name
2 李四

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

RIGHT JOIN 和 LEFT JOIN 相反

1
2
3
4
5
6
7
8
9
10
11
例如我想查询买了机械键盘套装的会员有多少

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

查询结果为:
user_id user_name order_id user_id order_name
3 张三 1 3 机械键盘套装
1 张三 3 1 机械键盘套装
4 5 机械键盘套装

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

这就是 mysql join 区别和用法了。

文章目录
  1. 1. mysql数据库多表各种join用法
    1. 1.1. join分:
    2. 1.2. 语法为:
    3. 1.3. 下面是几个例子:
本站总访问量 | 本页面被访问 | 您是第位小伙伴

© 炫彩信息科技有限公司 版权所有 备案号 : 赣ICP备19008485号