细说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( ...
随机推荐
- 阅读笔记:ImageNet Classification with Deep Convolutional Neural Networks
概要: 本文中的Alexnet神经网络在LSVRC-2010图像分类比赛中得到了第一名和第五名,将120万高分辨率的图像分到1000不同的类别中,分类结果比以往的神经网络的分类都要好.为了训练更快,使 ...
- uva10891 Game of Sum(博弈+区间dp+优化)
题目:点击打开链接 题意:两个人做游戏,共有n个数,每个人可以任选一端取任意多连续的数,问两个人都想拿最多的情况下,先手最多比后手多拿多少分数. 思路:这题一开始想到的是用dp[i][j]表示区间[i ...
- Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value 贪心
题意:E.Maximum Subsequence Value 题意: 给你n 个元素,你挑选k个元素,那么这个 k 集合的值为 ∑2i,其中,若集合内至少有 max(1,k−2)个数二进制下第 i 位 ...
- 找新朋友 HDU - 1286 欧拉函数模板题
题意: 求出来区间[1,n]内与n互质的数的数量 题解: 典型的欧拉函数应用,具体见这里:Relatives POJ - 2407 欧拉函数 代码: 1 #include<stdio.h> ...
- hdu5534 Partial Tree
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...
- WSL1中安装Docker
# step 0: clear# sudo apt-get remove docker docker-engine docker-ce docker.io# step 1: 安装必要的一些系统工具su ...
- Python3.7.9+Locust1.4.3版本性能测试工具案例分享
一.Locust工具介绍 1.概述 Locust是一款易于使用的分布式负载测试工具,完全基于事件,使用python开发,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gev ...
- codefforces 877B
B. Nikita and stringtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inpu ...
- 仿射加密与S-DES加密算法的实现
仿射加密 #include <iostream> #include <cstdio> using namespace std; char letter[30]; char _l ...
- GitHub in depth
GitHub in depth GitHub 高级玩法 / 进阶教程 https://github.com/trending/dart?since=daily https://github.com/t ...