mysql join

数据库中join又称连接,用于联合多表的查询。

我们会以两张表做例子customer:

mysql> select * from customer;
+------------+-----------+
| customerid | name      |
+------------+-----------+
|          1 | Joe       |
|          2 | Christian |
|          3 | Zero      |
|          4 | Karl      |
+------------+-----------+
4 rows in set (0.00 sec)
mysql> select * from `order`;
+---------+------------+
| orderid | customerid |
+---------+------------+
|   10001 |          1 |
|   10002 |          2 |
|   10003 |          3 |
|   10005 |          5 |
+---------+------------+
4 rows in set (0.00 sec)

inner join内连接

inner join或者两个表中字段匹配关系的记录。
在这里插入图片描述

select * from customer INNER JOIN `order` on customer.customerid=`order`.customerid;
+------------+-----------+---------+------------+
| customerid | name      | orderid | customerid |
+------------+-----------+---------+------------+
|          1 | Joe       |   10001 |          1 |
|          2 | Christian |   10002 |          2 |
|          3 | Zero      |   10003 |          3 |
+------------+-----------+---------+------------+
3 rows in set (0.00 sec)

left join左连接

获取左边所有记录,即使右表没有对应的匹配的记录。
在这里插入图片描述

mysql> select * from customer left JOIN `order` on customer.customerid=`order`.customerid;
+------------+-----------+---------+------------+
| customerid | name      | orderid | customerid |
+------------+-----------+---------+------------+
|          1 | Joe       |   10001 |          1 |
|          2 | Christian |   10002 |          2 |
|          3 | Zero      |   10003 |          3 |
|          4 | Karl      |    NULL |       NULL |
+------------+-----------+---------+------------+
4 rows in set (0.00 sec)

right join右连接

与left join相反,用于获取右边所有记录,即使左边没有对应匹配的记录。
在这里插入图片描述

mysql> select * from customer right JOIN `order` on customer.customerid=`order`.customerid;
+------------+-----------+---------+------------+
| customerid | name      | orderid | customerid |
+------------+-----------+---------+------------+
|          1 | Joe       |   10001 |          1 |
|          2 | Christian |   10002 |          2 |
|          3 | Zero      |   10003 |          3 |
|       NULL | NULL      |   10005 |          5 |
+------------+-----------+---------+------------+
4 rows in set (0.00 sec)

LEFT JOIN EXCLUDING INNER JOIN (左连接 - 内连接)

在这里插入图片描述

mysql> select * from customer LEFT JOIN `order` on customer.customerid=`order`.customerid where `order`.customerid IS NULL;
+------------+------+---------+------------+
| customerid | name | orderid | customerid |
+------------+------+---------+------------+
|          4 | Karl |    NULL |       NULL |
+------------+------+---------+------------+
1 row in set (0.00 sec)

RIGHT JOIN EXCLUDING INNER JOIN (右连接 - 内连接)

mysql> select * from customer RIGHT JOIN `order` on customer.customerid=`order`.customerid where `customer`.customerid IS NULL;
+------------+------+---------+------------+
| customerid | name | orderid | customerid |
+------------+------+---------+------------+
|       NULL | NULL |   10005 |          5 |
+------------+------+---------+------------+
1 row in set (0.00 sec)

CROSS JOIN笛卡尔积

左边的每一条记录和右边每一条记录组成数据对。

mysql> select * from customer CROSS JOIN `order`;
+------------+-----------+---------+------------+
| customerid | name      | orderid | customerid |
+------------+-----------+---------+------------+
|          1 | Joe       |   10001 |          1 |
|          2 | Christian |   10001 |          1 |
|          3 | Zero      |   10001 |          1 |
|          4 | Karl      |   10001 |          1 |
|          1 | Joe       |   10002 |          2 |
|          2 | Christian |   10002 |          2 |
|          3 | Zero      |   10002 |          2 |
|          4 | Karl      |   10002 |          2 |
|          1 | Joe       |   10003 |          3 |
|          2 | Christian |   10003 |          3 |
|          3 | Zero      |   10003 |          3 |
|          4 | Karl      |   10003 |          3 |
|          1 | Joe       |   10005 |          5 |
|          2 | Christian |   10005 |          5 |
|          3 | Zero      |   10005 |          5 |
|          4 | Karl      |   10005 |          5 |
|          1 | Joe       |   10004 |          1 |
|          2 | Christian |   10004 |          1 |
|          3 | Zero      |   10004 |          1 |
|          4 | Karl      |   10004 |          1 |
+------------+-----------+---------+------------+
20 rows in set (0.00 sec)

参考:https://blog.csdn.net/zhengsy_/article/details/90733864

更多讲解,欢迎关注我的github:
go成神之路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值