一、mysql表的连接方式

内连接和外连接的区别:

我把两个表比作集合A、B,其中,内连接是集合A和集合B的交集,而交集的内容在两个表中都存在,即在每一个表的内部;而外连接则是除了交集外,还有另一个表中的内容(左、右、全),所涉及的结果集是两个表中的内容。

二、表的连接方式:

表的连接查询方式有内连接、外连接(左连接、右连接、全连接)、交叉连接。

下面举例中所采用的表:

mysql> select * from Store_Information;

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

| store_name    | Sales | Date       |

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

| Los Angeles   |  1500 | 1999-01-05 |

| Los Angeles   |   500 | 1999-01-08 |

| Boston        |   700 | 1999-01-08 |

| Seven Eleven  |   860 | 1999-01-09 |

| Good Neighbor |  1100 | 1999-01-10 |

| Wumark        |  3000 | 1999-01-11 |

| Walmark       |  3500 | 1998-04-15 |

| Titi          |  1100 | 1999-05-15 |

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

8 rows in set (0.00 sec)

mysql> select * from Geography;

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

| region_name | store_name  |

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

| East        | Boston      |

| East        | New York    |

| West        | Los Angeles |

| West        | San Diego   |

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

4 rows in set (0.00 sec)

mysql>

1.内连接:

内连接查询操作列出与连接条件匹配的数据航,它使用比较运算符比较被连接列的列值。只有两个表相匹配的行才能出现在结果集中,也就是根据条件得到两个表的交集。

举例说明:

mysql> select * from Store_Information S,Geography G where S.store_name=G.store_name;

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

| store_name  | Sales | Date       | region_name | store_name  |

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

| Los Angeles |  1500 | 1999-01-05 | West        | Los Angeles |

| Los Angeles |   500 | 1999-01-08 | West        | Los Angeles |

| Boston      |   700 | 1999-01-08 | East        | Boston      |

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

3 rows in set (0.00 sec)

mysql> select * from Store_Information S inner join Geography G on S.store_name=G.store_name;

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

| store_name  | Sales | Date       | region_name | store_name  |

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

| Los Angeles |  1500 | 1999-01-05 | West        | Los Angeles |

| Los Angeles |   500 | 1999-01-08 | West        | Los Angeles |

| Boston      |   700 | 1999-01-08 | East        | Boston      |

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

3 rows in set (0.00 sec)

mysql> select * from Store_Information S inner join Geography G using(store_name);

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

| store_name  | Sales | Date       | region_name |

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

| Los Angeles |  1500 | 1999-01-05 | West        |

| Los Angeles |   500 | 1999-01-08 | West        |

| Boston      |   700 | 1999-01-08 | East        |

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

3 rows in set (0.00 sec)

mysql>

上面的第一条sql和第二条sql语句是等价的,第三条语句是第二条sql的简写形式,on子句和using子句的替换模式。在下面不再演示using的子句了。

2.外连接:

返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或左右两边的表(全外连接)中的所有行。

左外连接:

mysql> select * from Store_Information S left join Geography G on S.store_name=G.store_name;

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

| store_name    | Sales | Date       | region_name | store_name  |

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

| Los Angeles   |  1500 | 1999-01-05 | West        | Los Angeles |

| Los Angeles   |   500 | 1999-01-08 | West        | Los Angeles |

| Boston        |   700 | 1999-01-08 | East        | Boston      |

| Seven Eleven  |   860 | 1999-01-09 | NULL        | NULL        |

| Good Neighbor |  1100 | 1999-01-10 | NULL        | NULL        |

| Wumark        |  3000 | 1999-01-11 | NULL        | NULL        |

| Walmark       |  3500 | 1998-04-15 | NULL        | NULL        |

| Titi          |  1100 | 1999-05-15 | NULL        | NULL        |

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

8 rows in set (0.00 sec)

mysql>

右外连接:

mysql> select * from Store_Information S right join Geography G on S.store_name=G.store_name;

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

| store_name  | Sales | Date       | region_name | store_name  |

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

| Boston      |   700 | 1999-01-08 | East        | Boston      |

| NULL        |  NULL | NULL       | East        | New York    |

| Los Angeles |  1500 | 1999-01-05 | West        | Los Angeles |

| Los Angeles |   500 | 1999-01-08 | West        | Los Angeles |

| NULL        |  NULL | NULL       | West        | San Diego   |

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

5 rows in set (0.00 sec)

mysql>

全连接(mysql中不支持全连接,我们可以用左右合并来解决):

mysql> select * from Store_Information S left join Geography G on S.store_name=G.store_name union (select * from Store_Information S right join Geography G on S.store_name=G.store_name);

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

| store_name    | Sales | Date       | region_name | store_name  |

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

| Los Angeles   |  1500 | 1999-01-05 | West        | Los Angeles |

| Los Angeles   |   500 | 1999-01-08 | West        | Los Angeles |

| Boston        |   700 | 1999-01-08 | East        | Boston      |

| Seven Eleven  |   860 | 1999-01-09 | NULL        | NULL        |

| Good Neighbor |  1100 | 1999-01-10 | NULL        | NULL        |

| Wumark        |  3000 | 1999-01-11 | NULL        | NULL        |

| Walmark       |  3500 | 1998-04-15 | NULL        | NULL        |

| Titi          |  1100 | 1999-05-15 | NULL        | NULL        |

| NULL          |  NULL | NULL       | East        | New York    |

| NULL          |  NULL | NULL       | West        | San Diego   |

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

10 rows in set (0.00 sec)

mysql>

3.交叉连接:

交叉连接不带where子句,它返回被连接的两个表所有数据航的笛卡尔积,返回到结果集中的额数据行数等于第一个表中符合查询条件的数据航乘以第二个表中符合查询条件的数据行数。

mysql> select * from Store_Information S cross join Geography G order by S.store_name;

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

| store_name    | Sales | Date       | region_name | store_name  |

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

| Boston        |   700 | 1999-01-08 | West        | Los Angeles |

| Boston        |   700 | 1999-01-08 | East        | New York    |

| Boston        |   700 | 1999-01-08 | East        | Boston      |

| Boston        |   700 | 1999-01-08 | West        | San Diego   |

| Good Neighbor |  1100 | 1999-01-10 | West        | Los Angeles |

| Good Neighbor |  1100 | 1999-01-10 | East        | New York    |

| Good Neighbor |  1100 | 1999-01-10 | East        | Boston      |

| Good Neighbor |  1100 | 1999-01-10 | West        | San Diego   |

| Los Angeles   |  1500 | 1999-01-05 | West        | Los Angeles |

| Los Angeles   |   500 | 1999-01-08 | West        | Los Angeles |

| Los Angeles   |  1500 | 1999-01-05 | East        | New York    |

| Los Angeles   |   500 | 1999-01-08 | East        | New York    |

| Los Angeles   |  1500 | 1999-01-05 | East        | Boston      |

| Los Angeles   |   500 | 1999-01-08 | East        | Boston      |

| Los Angeles   |  1500 | 1999-01-05 | West        | San Diego   |

| Los Angeles   |   500 | 1999-01-08 | West        | San Diego   |

| Seven Eleven  |   860 | 1999-01-09 | West        | Los Angeles |

| Seven Eleven  |   860 | 1999-01-09 | East        | New York    |

| Seven Eleven  |   860 | 1999-01-09 | East        | Boston      |

| Seven Eleven  |   860 | 1999-01-09 | West        | San Diego   |

| Titi          |  1100 | 1999-05-15 | West        | Los Angeles |

| Titi          |  1100 | 1999-05-15 | East        | New York    |

| Titi          |  1100 | 1999-05-15 | East        | Boston      |

| Titi          |  1100 | 1999-05-15 | West        | San Diego   |

| Walmark       |  3500 | 1998-04-15 | West        | Los Angeles |

| Walmark       |  3500 | 1998-04-15 | East        | New York    |

| Walmark       |  3500 | 1998-04-15 | East        | Boston      |

| Walmark       |  3500 | 1998-04-15 | West        | San Diego   |

| Wumark        |  3000 | 1999-01-11 | West        | Los Angeles |

| Wumark        |  3000 | 1999-01-11 | East        | New York    |

| Wumark        |  3000 | 1999-01-11 | East        | Boston      |

| Wumark        |  3000 | 1999-01-11 | West        | San Diego   |

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

32 rows in set (0.00 sec)

mysql>

自然连接是除去重复属性的等值连接。

两者之间的区别和联系如下:

1、自然连接一定是等值连接,但等值连接不一定是自然连接。等值连接不把重复的属性除去;而自然连接要把重复的属性除去。

2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量必须是公共属性。

http://blog.163.com/girl_lihuiyue@126/blog/static/1806962120142141165441/

写的比较简单:

http://huaxia524151.iteye.com/blog/1423614

mySQL的表连接的更多相关文章

  1. mysql join表连接

    1.表连接,就是将两个表合并起来,被合并的表的记录要通过中间字段,一一匹配起来左边的表的记录,形成一张临时的合并的表,并且每条记录的值都是两张表一一准确对应的 实例 尝试以下实例: root@host ...

  2. MySQL多表连接

    主要分3种:内连接,外连接,交叉连接 其        他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 =  或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...

  3. MySQL之表连接-> 内连接,左外连接,右外链接,全连接

    1.首先创建student库 create database student; 2. 在数据库中创建boy表 和 girl表, mysql> create table boy( -> bo ...

  4. 【连接查询】mySql多表连接查询与union与union all用法

    1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...

  5. Mysql 多表连接查询 inner join 和 outer join 的使用

    JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. 首先先列举本篇用到的分类(内连接,外连接,交 ...

  6. mysql多表连接和子查询

    文章实例的数据表,来自上一篇博客<mysql简单查询>:http://blog.csdn.net/zuiwuyuan/article/details/39349611 MYSQL的多表连接 ...

  7. mysql多表连接查询

    新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.) ...

  8. mysql 多表连接

    现有表R,S如下: 笛卡尔积 select * from R,S; 结果: 注:不需要任何条件.结果为两张表函数相乘(3x3=9). 自连接 select e.empno,e.ename,m.empn ...

  9. MySQL之表连接(内外连接和重命名的使用)

    #要多练练 1.连接查询根据连接方式分为 内连接 等值连接 非等值连接 自连接 外连接 左外连接(左连接) 右外连接(右连接) 当多张表进行连接查询,若没有任何条件进行限制,会 发生什么现象? 会出现 ...

随机推荐

  1. vue脚手架安装

    1. 脚手架:  如何:   1. 安装脚手架的工具命令:      npm i -g @vue/cli   电脑安装完命令后  :  直接创建  vue create 文件夹名字   2. 用命令反 ...

  2. 解决chrome浏览器安装不上的问题

    1.  打开注册表:  windows键 + R --> 输入regedit -->  回车 (注:windows键在左ctrl附近微软图标的键) 2.  找到 32位:HKEY_LOCA ...

  3. Java 集合遍历

    在集合中使用Lambda表达式 Map集合中 forEach and Map 常规遍历-> 两种遍历: Map map = new HashMap(); map.put(102, "张 ...

  4. route - 显示 / 操作IP选路表

    总览 SYNOPSIS route [-CFvnee] route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [met ...

  5. Vue列表渲染-变异方法

    Vue 包含一组观察数组的变异方法,变异方法 (mutation method),顾名思义,会改变被这些方法调用的原始数组 所以它们也将会触发视图更新.这些方法如下: push() pop() shi ...

  6. 公私钥,数字证书,https

    1.密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的. 2.公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密. 3.私 ...

  7. ivew select组件 DatePicker组件的清空

    <Form ref="formInline" :model="formInline" :rules="ruleInline" inli ...

  8. 03.父工程pom、整合测试、SpringBootApplication注解

    父工程 idea点击spring-boot-starter-parent找到父工程spring-boot-dependencies模仿配置 父工程 <?xml version="1.0 ...

  9. python3访问MySQL数据库

    import pymysql db = pymysql.connect( host='XXXXXXXX.com', #数据库服务器地址 user='XXX', #用户名 passwd='XXX', d ...

  10. 常用生物信息 ID 及转换方法

    众多不同的数据库所采用的对 Gene 和 Protein 编号的 ID 也是不同的, 所以在使用不同数据库数据的时候需要进行 ID 转换. 常用数据库 ID ID 示例 ID 来源 ENSG00000 ...