导航
短信预约 计算机二级考试动态提醒 立即预约

请输入下面的图形验证码

提交验证

短信预约提醒成功

计算机二级Mysql join连接查询的语法与示例

环球网校·2020-10-14 16:21:43浏览19 收藏1
摘要 在计算机二级考试中,部分同学备考的科目是计算机二级Mysql,在Mysql,如何利用join连接查询呢?为了帮助小伙伴们了解掌握这一知识点,环球网校小编整理了计算机二级Mysql join连接查询的语法与示例,希望对你有所帮助,更多计算机二级资讯敬请关注计算机二级频道。

计算机二级Mysql join连接查询的语法与示例

连接查询:

是将两个查询(或表)的每一行,以“两两横同对接”的方式,所得到的所有行的结果,即一个表中的某行,跟另一个表中的某行。进行“横向对接”,得到一个新行。

连接查询包括以下这些不同形式,连接方式:

交叉连接、内连接、外连接(分:左外连接,右外连接)

连接查询语法:

select * from 表名 [连接方式] join 表名 [on 连接条件] where ...;

测试数据:19mysql> select * from test;

+----+--------+------+------+

| id | name | sex | age |

+----+--------+------+------+

| 1 | name1 | 女 | 15 |

| 2 | name1 | 女 | 15 |

| 4 | name2 | 男 | 30 |

| 5 | name50 | 男 | 12 |

+----+--------+------+------+

mysql> select * from user;

+----+-------+------+

| id | name | age |

+----+-------+------+

| 1 | name1 | 18 |

| 2 | name2 | 15 |

| 3 | name3 | 20 |

| 4 | name4 | 30 |

+----+-------+------+

mysql> select * from test;

+----+--------+------+------+

| id | name | sex | age |

+----+--------+------+------+

| 1 | name1 | 女 | 15 |

| 2 | name1 | 女 | 15 |

| 4 | name2 | 男 | 30 |

| 5 | name50 | 男 | 12 |

+----+--------+------+------+

mysql> select * from user;

+----+-------+------+

| id | name | age |

+----+-------+------+

| 1 | name1 | 18 |

| 2 | name2 | 15 |

| 3 | name3 | 20 |

| 4 | name4 | 30 |

+----+-------+------+

交叉连接 (cross join)

1、交叉连接其实可以认为是连接查询的“完全版本”, 即所有行都无条件地都连接起来。

2、关键字 “cross” 可以省略;

3、交叉连接又称为“笛卡尔积”,通常应用价值不大

语法形式:

select * from 表名, 表名;

select * from 表名 join 表名;

select * from 表名 cross join 表名;

规范的交叉连接写法

+----+--------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+--------+------+------+----+-------+------+

| 1 | name1 | 女 | 15 | 1 | name1 | 18 |

| 2 | name1 | 女 | 15 | 1 | name1 | 18 |

| 4 | name2 | 男 | 30 | 1 | name1 | 18 |

| 5 | name50 | 男 | 12 | 1 | name1 | 18 |

| 1 | name1 | 女 | 15 | 2 | name2 | 15 |

| 2 | name1 | 女 | 15 | 2 | name2 | 15 |

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

| 5 | name50 | 男 | 12 | 2 | name2 | 15 |

| 1 | name1 | 女 | 15 | 3 | name3 | 20 |

| 2 | name1 | 女 | 15 | 3 | name3 | 20 |

| 4 | name2 | 男 | 30 | 3 | name3 | 20 |

| 5 | name50 | 男 | 12 | 3 | name3 | 20 |

| 1 | name1 | 女 | 15 | 4 | name4 | 30 |

| 2 | name1 | 女 | 15 | 4 | name4 | 30 |

| 4 | name2 | 男 | 30 | 4 | name4 | 30 |

| 5 | name50 | 男 | 12 | 4 | name4 | 30 |

+----+--------+------+------+----+-------+------+

mysql> select * from test cross join user;

+----+--------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+--------+------+------+----+-------+------+

| 1 | name1 | 女 | 15 | 1 | name1 | 18 |

| 2 | name1 | 女 | 15 | 1 | name1 | 18 |

| 4 | name2 | 男 | 30 | 1 | name1 | 18 |

| 5 | name50 | 男 | 12 | 1 | name1 | 18 |

| 1 | name1 | 女 | 15 | 2 | name2 | 15 |

| 2 | name1 | 女 | 15 | 2 | name2 | 15 |

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

| 5 | name50 | 男 | 12 | 2 | name2 | 15 |

| 1 | name1 | 女 | 15 | 3 | name3 | 20 |

| 2 | name1 | 女 | 15 | 3 | name3 | 20 |

| 4 | name2 | 男 | 30 | 3 | name3 | 20 |

| 5 | name50 | 男 | 12 | 3 | name3 | 20 |

| 1 | name1 | 女 | 15 | 4 | name4 | 30 |

| 2 | name1 | 女 | 15 | 4 | name4 | 30 |

| 4 | name2 | 男 | 30 | 4 | name4 | 30 |

| 5 | name50 | 男 | 12 | 4 | name4 | 30 |

+----+--------+------+------+----+-------+------+

直接使用 join 进行连接,相当于 cross join,默认就是 交叉连接

?

1mysql> select * from test join user;

mysql> select * from test join user;

查询结果跟上面一致!!!

还可以直接 from 表,表... 也相当于是交叉连接

?

1mysql> select * from test, user;

mysql> select * from test, user;

查询结果跟上面一致!!!

内连接 (inner join)

1、内连接其实是交叉连接的基础上,再通过 on 条件而筛选出来的部分数据。

2、关键字 "inner" 可以省略,但建议写上,真正有意义的是 on 连接条件。

3、内连接是应用最广泛的一种连接查询,其本质是根据条件筛选出“有意义的数据”。

语法形式:

select * from 表名 join 表名 on 连接条件;

select * from 表名 inner join 表名 on 连接条件;

查出两个表中 name 字段相等的数据

8mysql> select * from test inner join user on test.name=user.name;

+----+-------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+-------+------+------+----+-------+------+

| 1 | name1 | 女 | 15 | 1 | name1 | 18 |

| 2 | name1 | 女 | 15 | 1 | name1 | 18 |

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

+----+-------+------+------+----+-------+------+

mysql> select * from test inner join user on test.name=user.name;

+----+-------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+-------+------+------+----+-------+------+

| 1 | name1 | 女 | 15 | 1 | name1 | 18 |

| 2 | name1 | 女 | 15 | 1 | name1 | 18 |

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

+----+-------+------+------+----+-------+------+

查出两个表中 name 字段相等的数据,通过 as 给表取个别名进行使用

?

1mysql> select * from test as t inner join user as u on t.name=u.name;

mysql> select * from test as t inner join user as u on t.name=u.name;

查询结果跟上面一致!!!

查出两个表中 name 字段相等,test 表中 age>15,user 表中 age>10 的数据

如果使用表中有重复的字段,那么就需要通过 [表名.字段名] 来使用,例如 age :

?

1

2

3

4

5

6mysql> select * from test inner join user on test.name=user.name where test.age>15 and user.age>10;

+----+-------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+-------+------+------+----+-------+------+

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

+----+-------+------+------+----+-------+------+

mysql> select * from test inner join user on test.name=user.name where test.age>15 and user.age>10;

+----+-------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+-------+------+------+----+-------+------+

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

+----+-------+------+------+----+-------+------+

查出两个表中 name 字段相等,且 sex='男' 的数据。

如果使用表中没有重复的字段,那么可以通过 [表名.字段名] 或者直接使用 [字段名] 使用,例如 sex :

7mysql> select * from test as t inner join user as u on t.name=u.name where t.sex='男';

mysql> select * from test as t inner join user as u on t.name=u.name where sex='男';

+----+-------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+-------+------+------+----+-------+------+

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

+----+-------+------+------+----+-------+------+

mysql> select * from test as t inner join user as u on t.name=u.name where t.sex='男';

mysql> select * from test as t inner join user as u on t.name=u.name where sex='男';

+----+-------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+----+-------+------+------+----+-------+------+

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

+----+-------+------+------+----+-------+------+

外连接 - 左外连接 (left join)

1、左外连接其实是保证左边表的数据都能够取出的一种连接 。

2、左外连接其实是在内连接的基础上,再加上左边表中所有不能满足条件的数据

3、关键字 “outer" 可以省略。

语法形式:

select * from 表名 left [outer] join on 连接条件 where ...;

以左边的表为基准,保证左边表的数据全部显示,匹配不到的数据为 NULL

9mysql> select * from test left join user on test.name=user.name;

+----+--------+------+------+------+-------+------+

| id | name | sex | age | id | name | age |

+----+--------+------+------+------+-------+------+

| 1 | name1 | 女 | 15 | 1 | name1 | 18 |

| 2 | name1 | 女 | 15 | 1 | name1 | 18 |

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

| 5 | name50 | 男 | 12 | NULL | NULL | NULL |

+----+--------+------+------+------+-------+------+

mysql> select * from test left join user on test.name=user.name;

+----+--------+------+------+------+-------+------+

| id | name | sex | age | id | name | age |

+----+--------+------+------+------+-------+------+

| 1 | name1 | 女 | 15 | 1 | name1 | 18 |

| 2 | name1 | 女 | 15 | 1 | name1 | 18 |

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

| 5 | name50 | 男 | 12 | NULL | NULL | NULL |

+----+--------+------+------+------+-------+------+

外连接 - 右外连接 (right join)

1、右外连接其实是保证右边表的数据都能够取出的一种连接 。

2、右外连接其实是在内连接的基础上,再加上右边表中所有不能满足条件的数据

3、关键字 “outer" 可以省略。

语法形式:

select * from 表名 right [outer] join on 连接条件 where ...;

以右边的表为基准,保证右边表的数据全部显示,匹配不到的数据为 NULL

10mysql> select * from test right join user on test.name=user.name;

+------+-------+------+------+----+-------+------+

| id | name | sex | age | id | name | age |

+------+-------+------+------+----+-------+------+

| 1 | name1 | 女 | 15 | 1 | name1 | 18 |

| 2 | name1 | 女 | 15 | 1 | name1 | 18 |

| 4 | name2 | 男 | 30 | 2 | name2 | 15 |

| NULL | NULL | NULL | NULL | 3 | name3 | 20 |

| NULL | NULL | NULL | NULL | 4 | name4 | 30 |

+------+-------+------+------+----+-------+------+

以上就是“计算机二级Mysql join连接查询的语法与示例”相关内容,小伙伴们快来了解一下吧。另外,大家可通过环球网校“ 免费预约短信提醒”及时获知2020年9月全国计算机等级考试查分时间!环球网校友情提示:为方便更多小伙伴备考,环球网校特地为您准备了计算机二级复习资料,如有需要请点击文章下方“免费下载>>>计算机二级考试历年真题和答案”下载学习。

展开剩余
资料下载
历年真题
精选课程
老师直播

注册电脑版

版权所有©环球网校All Rights Reserved