细说MySQL连接查询:内连、左连和右连
转:
细说MySQL连接查询:内连、左连和右连
简介:
MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接。
准备两张表做演示,这两张表必须要有相同的字段内容可匹配,这两张表是 id 和 bianhao 列
mysql> select * from a_player;
+----+----------+-------+
| id | name | score |
+----+----------+-------+
| 1 | zhangsan | 88 |
| 2 | lisi | 89 |
| 3 | wangwu | 67 |
| 4 | zhaoliu | 90 |
| 5 | xuli | 80 |
| 6 | keke | 75 |
+----+----------+-------+
6 rows in set (0.00 sec)
mysql> select * from b_table;
+---------+-------+
| bianhao | sushe |
+---------+-------+
| 1 | 301 |
| 2 | 303 |
| 3 | 308 |
| 7 | 301 |
| 8 | 305 |
| 9 | 304 |
| 10 | 308 |
+---------+-------+
7 rows in set (0.00 sec)
一、内连接定义和实例
简而言之:找两个表中的公共部分。
■ 两张或多张表中同时符合某种条件的数据记录组合
■ FROM子句中使用INNER JOIN关键字连接多张表,并使用ON设置连接条件
■ 是系统默认的表连接方式,可以省略INNER关键字
■ 多表支持连续使用INNER JOIN,建议不超过三个表
■ 语法结构
■ 实现原理,下图所示:

内连语句:inner join
验证:得到的结果是两个表相同字段的公共部分
mysql> select * from a_player inner join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+----+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
+----+----------+-------+---------+-------+
3 rows in set (0.01 sec)
二、外连接:左连接定义和实例
简而言之:以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据。左表有的数据正常显示,右表没有的数据就用NULL显示。
■ 也被称为左外连接
■ 在FROM子句中使用LEFT JOIN关键字来表示
■ 匹配左表中所有及右表中符合条件的行
■ 实现原理,下图所示:

左连接语句:left join
验证:得到的是以a_player(左表)为准的所有数据显示,再显示b_table中与其匹配的项,未匹配到的用NULL。
mysql> select * from a_player left join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+----+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
| 4 | zhaoliu | 90 | NULL | NULL |
| 5 | xuli | 80 | NULL | NULL |
| 6 | keke | 75 | NULL | NULL |
+----+----------+-------+---------+-------+
6 rows in set (0.00 sec)
二、外连接:右连接定义和实例
简而言之:与左外连接反之,以右表为准,去匹配左表,右表有多少条数据,结果就是多少条数据。右表的数据正常显示,左表没有的数据就用NULL显示。
■ 也被称为右外连接
■ 在FROM子句中使用RIGHT JOIN 关键字来表示
■ 匹配右表中所有行及左表中符合条件的行
■ 实现原理,下图所示

右连接语句:right join
验证:得到的是以b_table(右表)为准的所有数据显示,再显示a_player中与其匹配的项,未匹配到的用NULL。
mysql> select * from a_player right join b_table on a_player.id=b_table.bianhao;
+------+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+------+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
| NULL | NULL | NULL | 7 | 301 |
| NULL | NULL | NULL | 8 | 305 |
| NULL | NULL | NULL | 9 | 304 |
| NULL | NULL | NULL | 10 | 308 |
+------+----------+-------+---------+-------+
7 rows in set (0.00 sec)
简介:
MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接。
准备两张表做演示,这两张表必须要有相同的字段内容可匹配,这两张表是 id 和 bianhao 列
mysql> select * from a_player;
+----+----------+-------+
| id | name | score |
+----+----------+-------+
| 1 | zhangsan | 88 |
| 2 | lisi | 89 |
| 3 | wangwu | 67 |
| 4 | zhaoliu | 90 |
| 5 | xuli | 80 |
| 6 | keke | 75 |
+----+----------+-------+
6 rows in set (0.00 sec)
mysql> select * from b_table;
+---------+-------+
| bianhao | sushe |
+---------+-------+
| 1 | 301 |
| 2 | 303 |
| 3 | 308 |
| 7 | 301 |
| 8 | 305 |
| 9 | 304 |
| 10 | 308 |
+---------+-------+
7 rows in set (0.00 sec)
一、内连接定义和实例
简而言之:找两个表中的公共部分。
■ 两张或多张表中同时符合某种条件的数据记录组合
■ FROM子句中使用INNER JOIN关键字连接多张表,并使用ON设置连接条件
■ 是系统默认的表连接方式,可以省略INNER关键字
■ 多表支持连续使用INNER JOIN,建议不超过三个表
■ 语法结构
■ 实现原理,下图所示:

内连语句:inner join
验证:得到的结果是两个表相同字段的公共部分
mysql> select * from a_player inner join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+----+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
+----+----------+-------+---------+-------+
3 rows in set (0.01 sec)
二、外连接:左连接定义和实例
简而言之:以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据。左表有的数据正常显示,右表没有的数据就用NULL显示。
■ 也被称为左外连接
■ 在FROM子句中使用LEFT JOIN关键字来表示
■ 匹配左表中所有及右表中符合条件的行
■ 实现原理,下图所示:

左连接语句:left join
验证:得到的是以a_player(左表)为准的所有数据显示,再显示b_table中与其匹配的项,未匹配到的用NULL。
mysql> select * from a_player left join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+----+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
| 4 | zhaoliu | 90 | NULL | NULL |
| 5 | xuli | 80 | NULL | NULL |
| 6 | keke | 75 | NULL | NULL |
+----+----------+-------+---------+-------+
6 rows in set (0.00 sec)
二、外连接:右连接定义和实例
简而言之:与左外连接反之,以右表为准,去匹配左表,右表有多少条数据,结果就是多少条数据。右表的数据正常显示,左表没有的数据就用NULL显示。
■ 也被称为右外连接
■ 在FROM子句中使用RIGHT JOIN 关键字来表示
■ 匹配右表中所有行及左表中符合条件的行
■ 实现原理,下图所示

右连接语句:right join
验证:得到的是以b_table(右表)为准的所有数据显示,再显示a_player中与其匹配的项,未匹配到的用NULL。
mysql> select * from a_player right join b_table on a_player.id=b_table.bianhao;
+------+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+------+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
| NULL | NULL | NULL | 7 | 301 |
| NULL | NULL | NULL | 8 | 305 |
| NULL | NULL | NULL | 9 | 304 |
| NULL | NULL | NULL | 10 | 308 |
+------+----------+-------+---------+-------+
7 rows in set (0.00 sec)
转:
细说MySQL连接查询:内连、左连和右连
细说MySQL连接查询:内连、左连和右连的更多相关文章
- MySQL连接查询、联合查询、子查询
参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...
- Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符)
Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符) 一丶多表查询 多表连接查询的应用场景: 连接是关系数据库模型的主要特点,也是区别于其他 ...
- 掌握MySQL连接查询到底什么是驱动表
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- MySQL连接查询驱动表被驱动表以及性能优化
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- mysql连接查询经典小例题
mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...
- Mysql高级查询 内连接和外连接详解
一.内连接(INNER JOIN) 1.等值连接 概述:指使用等号"="比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录. 语法: SELECT 列 FRO ...
- mysql连接查询,封装mysql函数
连接查询 交叉连接语法: select * | 字段列表 from 表1 cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...
- SQL各种连接查询详解(左连接、右连接..)
一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...
- Mysql 连接查询 Mysql支持的连接查询有哪些
CREATE TABLE `chx` ( `id` VARCHAR(20) NOT NULL, `name` VARCHAR(50) DEFAULT NULL, `name2` CHAR( ...
随机推荐
- 2018-2019 ACM-ICPC Brazil Subregional Programming Contest PART (10/13)
$$2018-2019 ACM-ICPC Brazil Subregional Programming Contest$$ \(A.Slackline\ Adventure\) \(B.Marbles ...
- Codeforces Round #501 (Div. 3) D. Walking Between Houses (思维,构造)
题意:一共有\(n\)个房子,你需要访问\(k\)次,每次访问的距离是\(|x-y|\),每次都不能停留,问是否能使访问的总距离为\(s\),若能,输出\(YES\)和每次访问的房屋,反正输出\(NO ...
- 或许你知道Python的shell,那jshell呢?
Java 10以后,java官方推出了类似python的shell操作的jshell,你的指令可以及时反馈,对于新手学习而言非常有用.如果你和我一样刚学Java,建议你使用高版本,和我一起开始使用js ...
- 如何创建一个GETH节点(单节点,windows环境)
所有命令都是在powershell上执行的 1.创建"创世块" 初始化配置 创建一个 hdgenesis.json文件,拷贝到geth根目录 { "config&q ...
- Keepalived+LVS实现LNMP网站的高可用部署
Keepalived+LVS实现LNMP网站的高可用部署 项目需求 当我们访问某个网站的时候可以在浏览器中输入IP或者域名链接到Web Server进行访问,如果这个Web Server挂了, ...
- Automatic merge failed; fix conflicts and then commit the result.解决方法
产生原因: git pull 的时候会分为两步,第一步先从远程服务器上拉下代码,第二步进行merge.当你merge时候失败了就会产生Automatic merge failed; fix confl ...
- redis跳表
redis使用跳表作为有序集合的底层实现之一,下面来看下跳表的结构 一.跳表的结构
- os-hackNOS-2(wp5.3本地文件包含 rbash绕过)
一.信息收集 直接netdiscover,找到IP是 192.168.56.101 然后端口扫描一波 只打开了22和80端口,访问一下80端口,是apache首页,那就继续查目录赛.,发现了一个tsw ...
- Ubuntu16.04+wineQQ+解决版本过低
[参考1:] http://blog.csdn.net/sinat_32079337/article/details/72771078? [参考2:] http://blog.csdn.net/qq_ ...
- web online code editor All In One
web online code editor All In One 在线代码编辑器 Monaco Editor 摩纳哥编辑器 ️ 22.1k The Monaco Editor is the code ...