• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > sql json 简单介绍

sql json 简单介绍

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,sql,json等相关知识,希望本文的分享对您有所帮助

 前言

  本文还是秉持之前一贯的写作风格,以简单易懂的示例帮助大家了解各种join的区别。

 为什么需要join

  为什么需要join?join中文意思为连接,连接意味着关联即将一个表和多个表之间关联起来。在处理数据库表的时候,我们经常会发现,需要从多个表中获取信息,将多个表的多个字段数据组装起来再返回给调用者。所以join的前提是这些表之间必须有关联字段。

 join的分类

  join分为两种,inner join和outer join,其中outer join分为三种,left outer join, right outer join, full outer join,另外left outer join又简称为left join即大家所熟知的左连接。

2092.jpg

 join分为两种,inner join和outer join,其中outer join分为三种,left outer join, right outer join, full outer join,另外left outer join又简称为left join即大家所熟知的左连接。

 各种join的区别

  在介绍各种join的区别之前,我们先来看一个简单的示例:

  场景描述:

 互联网时代,大家都喜欢在网上购物,尤其是淘宝和京东,所以我们选择的场景也是大家熟悉的网上购物。这是一个关于一个人和他在商城买了什么商品的一个故事;

  针对上述需求,我们建立了两张表,tb_person和tb_order,其中tb_person是关于这个人的描述,tb_order是关于他购买的商品的一个描述。

  我们的表结构很简单,tb_person只需要知道这个人是谁就可以了,所以只有三个字段id,firstname(名)和lastname(姓),同样tb_order也很简单,我们只要知道谁买了什么商品,所以只需要3个字段,分别是oid, oname(商品名称), pid(购买者编号)。

  tb_person:

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

| Field | Type | Null | Key | Default | Extra |

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

| pid | int(11) | NO | PRI | NULL | auto_increment |

| firstname | varchar(50) | YES | | NULL | |

| lastname | varchar(50) | YES | | NULL | |

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

tb_order:

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

| Field | Type | Null | Key | Default | Extra |

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

| oid | int(11) | NO | PRI | NULL | auto_increment |

| oname | varchar(50) | YES | | NULL | |

| pid | int(11) | YES | | NULL | |

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

接下来,我们向上述两张表中写入一些示例数据:

  data in tb_person:

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

| pid | firstname | lastname |

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

| 1 | andy | chen |

| 2 | irri | wan |

| 3 | abby | sun |

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

tb_person表中有三位人员,分别是andy Chen, irri Wan, abby Sun;

  data in tb_order:

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

| oid | oname | pid |

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

| 1 | book | 1 |

| 2 | phone | 1 |

| 3 | computer | 4 |

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

tb_order表中记录了3条数据,人员编号为1也就是andy Chen买了两件商品分别是book和phone,另外还有一个人员编号为4的人买了一件商品computer。关于这个大家可能会产生疑问,为什么tb_person表中没有人员编号为4的人呢?这里我们姑且认为由于注册用户较多,我们采用了用户分表策略,所以人员编号为4的用户可能在另外一张人员表中。

  从之前的描述我们知道,表与表之间如果要join则必须要有关联的字段,上述示例我们看到这个关联的字段就是pid。

  根据tb_person和tb_order两张表,我们可以看到有三种情形:

person表中的人购买了商品,也就是order表中有关于该用户的商品购买记录,我们可以从该表中查询到该用户买了哪些商品,如andy Chen购买了book和phone两种商品,即pid在tb_person和tb_order两种表中都存在;

person表中的人未购买商品,如irri Wan和abby Sun两位用户并未购买任何商品,即pid只存在于tb_person表;

order表中购买商品的用户在person表中找不到记录,如pid为4的用户购买了一台computer但在tb_person表中没有该用户的记录,即pid只存在于tb_order表;

  理解上述三种情形对于我们理解join有非常大的帮助,接下来我们将具体的分析每种join的区别:

INNER JOIN

  所谓inner join的意思就是我们前面提到的情形1,pid必须在tb_person和tb_order两张表中同时存在;

MariaDB [demo]> SELECT p.pid, p.firstname, o.oname
    -> FROM tb_person p
    -> INNER JOIN tb_order o
    -> ON p.pid=o.pid;

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

| pid | firstname | oname |

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

| 1 | andy | book |

| 1 | andy | phone |

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

LEFT JOIN

  tb_person LEFT JOIN tb_order的意思是上述情形1,情形2的并集。LEFT JOIN的结果集不仅包含INNER JOIN的结果,而且还包含所有tb_person中没有购买任何商品的用户集。

MariaDB [demo]> SELECT p.pid, p.firstname, o.oname
    -> FROM tb_person p
    -> LEFT JOIN tb_order o
    -> ON p.pid=o.pid;

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

| pid | firstname | oname |

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

| 1 | andy | book |

| 1 | andy | phone |

| 2 | irri | NULL |

| 3 | abby | NULL |

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

 RIGHT JOIN

  tb_person RIGHT JOIN tb_order的意思是上述情形1和情形3的并集。RIGHT JOIN的结果集不仅包含INNER JOIN的结果,而且还包含所有tb_order中所有已经购买商品的用户但该用户记录不存在于tb_person表。

MariaDB [demo]> SELECT p.pid, p.firstname, o.oname
    -> FROM tb_person p
    -> RIGHT JOIN tb_order o

  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05mysql慢查询和EXPLAIN的相关介绍
  • 2018-12-05详解Mysql主从同步配置示例代码
  • 2018-12-05MySQL 5.6 Innodb数据页 16K vs 8K性能对比测试
  • 2018-12-05mysql 和vs2010的连接问题
  • 2018-12-05MySQL数据库远程连接开启方法
  • 2018-12-05Oracle Max函数使用中出现的问题
  • 2018-12-05深入浅出的学习Mysql(收藏)
  • 2018-12-05SQL语言查询基础:连接查询 联合查询 代码
  • 2018-12-05PHP学习之SQL语句快速入门
  • 2018-12-05修改MySQL的时区,涉及参数time_zone

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL 在触发器里中断记录的插入或更新?
    • mysql运维-lower_case_table_names
    • laravel框架中常用目录路径详解
    • MySQL优化之缓存优化详解(一)
    • 在MySQL中创建带有IN和OUT参数的存储过程的方法
    • 利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享
    • [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln222] Failed to get master_ip_failover_script
    • MySQL实现主从数据库搭建的方法详解
    • MySQL 绿色版安装方法图文教程
    • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有