转:

细说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连接查询:内连、左连和右连

细说MySQL连接查询:内连、左连和右连的更多相关文章

  1. MySQL连接查询、联合查询、子查询

    参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...

  2. Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符)

    Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符) 一丶多表查询     多表连接查询的应用场景: ​         连接是关系数据库模型的主要特点,也是区别于其他 ...

  3. 掌握MySQL连接查询到底什么是驱动表

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  4. MySQL连接查询驱动表被驱动表以及性能优化

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  5. mysql连接查询经典小例题

    mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...

  6. Mysql高级查询 内连接和外连接详解

    一.内连接(INNER JOIN) 1.等值连接 概述:指使用等号"="比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录. 语法: SELECT 列 FRO ...

  7. mysql连接查询,封装mysql函数

    连接查询 交叉连接语法: select  * | 字段列表 from 表1  cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...

  8. SQL各种连接查询详解(左连接、右连接..)

    一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...

  9. Mysql 连接查询 Mysql支持的连接查询有哪些

    CREATE TABLE `chx` (   `id` VARCHAR(20) NOT NULL,   `name` VARCHAR(50) DEFAULT NULL,   `name2` CHAR( ...

随机推荐

  1. Codeforces Round #659 (Div. 2) A. Common Prefixes

    题目链接:https://codeforces.com/contest/1384/problem/A 题意 构造 $n+1$ 个字符串,使得 $n$ 对相邻字符串的相同前缀长度对应于数组 $a$ . ...

  2. codeforces644B. Processing Queries (模拟)

    In this problem you have to simulate the workflow of one-thread server. There are n queries to proce ...

  3. 9.PowerShell DSC之Pull

    前言 一般生产环境都使用Pull模式 配置Pull Server 配置Pull Server需要安装两个WindowsFeture:IIS.windows DSC,这两都可以通过UI界面化引导安装,也 ...

  4. Spring:解决因@Async引起的循环依赖报错

    最近项目中使用@Async注解在方法上引起了循环依赖报错: org.springframework.beans.factory.BeanCurrentlyInCreationException: Er ...

  5. 鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)

    ******************第六章学习****************** 1.[文件与目录管理] 在所有目录下面都会存在的两个目录,分别是 "." 与 "..& ...

  6. 鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

    ******************第五章学习****************** 1.[重要的三个概念] 1).文件拥有者(使用者):User,该文件/文件夹只能我来读写: 2).群组:Group, ...

  7. POJ1273 最大流模板

    之前自己写的,以后当一个模板的基础吧,不管是最大流,最小割,二分图匹配 下面是POJ1273的一个裸题.. 1 #include <iostream> 2 #include <cst ...

  8. 【原】无脑操作:Centos 7.6 + MariaDB + Rsyslog + LogAnalyzer环境搭建

    背景: 网络安全法第三章第二十一条明确规定"采取监测.记录网络运行状态.网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月". 为了满足合规性的要求,应当建设相应的日 ...

  9. 阿里巴巴java开发手册(2020版)

    阿里巴巴java开发手册(2020版) 2020版 链接: pan.baidu.com/s/1Zls_FUBK- 密码: titz 2019版 链接: pan.baidu.com/s/1cvCVQvj ...

  10. Github Docs All In One

    Github Docs All In One docs https://docs.github.com/en https://github.com/github/docs GitHub REST AP ...