Mysql join连接查询的语法与示例
作者:卡尔特斯 发布时间:2024-01-15 07:34:48
连接查询:
是将两个查询(或表)的每一行,以“两两横同对接”的方式,所得到的所有行的结果,即一个表中的某行,跟另一个表中的某行。进行“横向对接”,得到一个新行。
连接查询包括以下这些不同形式,连接方式:
交叉连接、内连接、外连接(分:左外连接,右外连接)
连接查询语法:
select * from 表名 [连接方式] join 表名 [on 连接条件] where ...;
测试数据:
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 表名;
规范的交叉连接写法
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,默认就是 交叉连接
mysql> select * from test join user;
查询结果跟上面一致!!!
还可以直接 from 表,表... 也相当于是交叉连接
mysql> select * from test, user;
查询结果跟上面一致!!!
内连接 (inner join)
1、内连接其实是交叉连接的基础上,再通过 on 条件而筛选出来的部分数据。
2、关键字 "inner" 可以省略,但建议写上,真正有意义的是 on 连接条件。
3、内连接是应用最广泛的一种连接查询,其本质是根据条件筛选出“有意义的数据”。
语法形式:
select * from 表名 join 表名 on 连接条件;
select * from 表名 inner join 表名 on 连接条件;
查出两个表中 name 字段相等的数据
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 给表取个别名进行使用
mysql> select * from test as t inner join user as u on t.name=u.name;
查询结果跟上面一致!!!
查出两个表中 name 字段相等,test 表中 age>15,user 表中 age>10 的数据
如果使用表中有重复的字段,那么就需要通过 [表名.字段名] 来使用,例如 age :
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 :
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
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
mysql> 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 |
+------+-------+------+------+----+-------+------+
来源:https://juejin.im/post/6881536621733380110


猜你喜欢
- 这里分享一些轨迹聚类的基本方法,涉及轨迹距离的定义、kmeans聚类应用。需要使用的python库如下import pandas as pd
- 要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的字符串。在这三个条件中,模块与字符串都是准备好的,只有
- 本文实例讲述了Python二叉树定义与遍历方法。分享给大家供大家参考,具体如下:二叉树基本概述:二叉树是有限个元素的几个,如果为空则为空二叉
- 1.apt update && apt install -y curl wget sudo1.设置hostPVE官方要求,/
- 本文实例讲述了JS+HTML5实现上传图片预览效果。分享给大家供大家参考,具体如下:在项目中遇到用input标签file类型的文件上传,想实
- 1 硬件设备TTL串口摄像头(VC0706)USB转TTL烧录器2 serial安装第一次安装的是serial的包导包的时候发现下载错了,正
- 本文主要分享的是一则python+opencv实现任意角度的透视变换的实例,具体如下:# -*- coding:utf-8 -*-impor
- 本文实例为大家分享了Python实现简单飞机大战的具体代码,供大家参考,具体内容如下功能玩家飞机可以移动,可以发射 * ,敌机随机产生,自由坠
- 引言一般来说,很多时候我们面临这样一种情况,即我们需要运行时间记录器,它不断向我们显示当前时间或在给定的时间间隔内保持执行一定的代码和平,在
- JS动态加载CSS 在可换主题的界面中具有很重要的意义,用户可以根据自己的浏览习惯选择自己喜欢的页面显示方式,下面详细说明。希望下面的方法对
- 下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别题目很简单,利用语音识别识
- 今天仔细研究了下GD的一些相关技术,顺手也研究下GD中文乱码的问题。 使用GD库输出中文字符串,调用imagestring是没有
- Mysql索引索引介绍索引是什么官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据
- 解读model.named_parameters()与model.parameters()model.named_parameters()迭
- 我们大家都知道MySQL数据库在安装完之后,默认的MySQL数据库,其最大连接数为100,一般流量稍微大一点的论坛或网站这个连接数是远远不够
- 1、XML 是什么?XML仅仅是一种数据存放格式,这种格式是一种文本(虽然XML规范中也提供了存放二进制数据的解决方案)。事实上有很多文本格
- 递归查询对于同一个表父子关系的计算提供了很大的方便,这个示例使用了SQL server 2005中的递归查询,使用的表是CarParts,这
- Js代码:vartempForm=document.createElement("form"); tempF
- 导语大家早上好哈!——有没有想我啊?木木子来啦,今日上线放一波大招给大家!刚学会了录制视频,之后的效果动态显示终于完美录制出来了!今天跟着小
- 基本开发环境· Python 3.6· Pycharm相关模块使用目标网页分析输入想看的小说内容,点击搜索这里会返回很多结果,我只选择第一个