我是靠谱客的博主 文静小刺猬,最近开发中收集的这篇文章主要介绍mysq连接详解(内外连接,左右连接),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.mysq连接详解(内外连接,左右连接)

1.内连接

select * from emp,dept;
笛卡尔积 垃圾:把表里面所有的数据查询出来,会造成大量的数据垃圾。
解决方法:使用内连接(关联字段查询)
select * from emp,dept where emp.dep_id = dept.did;
Microsoft Windows [版本 10.0.19044.2130]
(c) Microsoft Corporation。保留所有权利。
C:Users31943>mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.
Commands end with ; or g.
Your MySQL connection id is 33
Server version: 5.7.17-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| day02
|
| itheima_admin
|
| mysql
|
| performance_schema |
| sys
|
+--------------------+
6 rows in set (0.00 sec)
mysql> use day02;
Database changed
mysql> select * from emp,dept;
+----+--------+--------+--------+------------+--------+-----+--------+
| id | NAME
| gender | salary | join_date
| dep_id | did | dname
|
+----+--------+--------+--------+------------+--------+-----+--------+
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
1 | 研发部 |
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
2 | 市场部 |
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
3 | 财务部 |
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
4 | 销售部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
1 | 研发部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
2 | 市场部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
3 | 财务部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
4 | 销售部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
1 | 研发部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
2 | 市场部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
3 | 财务部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
4 | 销售部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
1 | 研发部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
2 | 市场部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
3 | 财务部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
4 | 销售部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
1 | 研发部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
2 | 市场部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
3 | 财务部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
4 | 销售部 |
|
6 | 小白龙 | 男
|
2500 | 2011-02-14 |
NULL |
1 | 研发部 |
|
6 | 小白龙 | 男
|
2500 | 2011-02-14 |
NULL |
2 | 市场部 |
|
6 | 小白龙 | 男
|
2500 | 2011-02-14 |
NULL |
3 | 财务部 |
|
6 | 小白龙 | 男
|
2500 | 2011-02-14 |
NULL |
4 | 销售部 |
+----+--------+--------+--------+------------+--------+-----+--------+
24 rows in set (0.00 sec)
mysql> select * from emp,dept where emp.dep_id = dept.did;
+----+--------+--------+--------+------------+--------+-----+--------+
| id | NAME
| gender | salary | join_date
| dep_id | did | dname
|
+----+--------+--------+--------+------------+--------+-----+--------+
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
1 | 研发部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
2 | 市场部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
2 | 市场部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
3 | 财务部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
1 | 研发部 |
+----+--------+--------+--------+------------+--------+-----+--------+
5 rows in set (0.00 sec)
mysql> select * from emp inner join dept on emp.dep_id = dept.did;
+----+--------+--------+--------+------------+--------+-----+--------+
| id | NAME
| gender | salary | join_date
| dep_id | did | dname
|
+----+--------+--------+--------+------------+--------+-----+--------+
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
1 | 研发部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
2 | 市场部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
2 | 市场部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
3 | 财务部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
1 | 研发部 |
+----+--------+--------+--------+------------+--------+-----+--------+
5 rows in set (0.00 sec)
mysql> select emp.name,emp.salary,dept.dname from emp inner join dept on emp.dep_id = dept.did;
+--------+--------+--------+
| name
| salary | dname
|
+--------+--------+--------+
| 孙悟空 |
7200 | 研发部 |
| 猪八戒 |
3600 | 市场部 |
| 唐僧
|
9000 | 市场部 |
| 白骨精 |
5000 | 财务部 |
| 蜘蛛精 |
4500 | 研发部 |
+--------+--------+--------+
5 rows in set (0.00 sec)
mysql>

2.外连接查询

左外连接:相当于查询A表所有数据和交集部分数据
右外连接:相当于查询B表所有数据和交集部分数据
左连接
left 主表[表1] join [表2]
mysql> select * from emp left join dept on emp.dep_id = dept.did;
+----+--------+--------+--------+------------+--------+------+--------+
| id | NAME
| gender | salary | join_date
| dep_id | did
| dname
|
+----+--------+--------+--------+------------+--------+------+--------+
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
1 | 研发部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
1 | 研发部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
2 | 市场部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
2 | 市场部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
3 | 财务部 |
|
6 | 小白龙 | 男
|
2500 | 2011-02-14 |
NULL | NULL | NULL
|
+----+--------+--------+--------+------------+--------+------+--------+
6 rows in set (0.00 sec)
右连接
right [表1] join 主表[表2]
mysql> select * from emp right join dept on emp.dep_id = dept.did;
+------+--------+--------+--------+------------+--------+-----+--------+
| id
| NAME
| gender | salary | join_date
| dep_id | did | dname
|
+------+--------+--------+--------+------------+--------+-----+--------+
|
1 | 孙悟空 | 男
|
7200 | 2013-02-24 |
1 |
1 | 研发部 |
|
2 | 猪八戒 | 男
|
3600 | 2010-12-02 |
2 |
2 | 市场部 |
|
3 | 唐僧
| 男
|
9000 | 2008-08-08 |
2 |
2 | 市场部 |
|
4 | 白骨精 | 女
|
5000 | 2015-10-07 |
3 |
3 | 财务部 |
|
5 | 蜘蛛精 | 女
|
4500 | 2011-03-14 |
1 |
1 | 研发部 |
| NULL | NULL
| NULL
|
NULL | NULL
|
NULL |
4 | 销售部 |
+------+--------+--------+--------+------------+--------+-----+--------+
6 rows in set (0.00 sec)
总结:从数据上来看,其实左连接和右连接是互补的,也就是连接性偏向问题,左连接以左表为主表,和右表对应的字段中,左表必须全部查询到,右边没有

最后

以上就是文静小刺猬为你收集整理的mysq连接详解(内外连接,左右连接)的全部内容,希望文章能够帮你解决mysq连接详解(内外连接,左右连接)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部