带你了解数据库中JOIN的用法
前言
欢迎关注公众号:Coder编程
获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!
本章主要介绍数据库中Join的的用法,也是我们在使用数据库时非常基础的一个知识点。本次会介绍数据库中的inner join、left join、right join 的用法以及它们之间的区别。 文章如有错误还请大家及时指出~
以下都是采用mysql数据库
Join
相信大家在学习数据库的使用时,都有使用过Join,对数据库中的两张或两张以上表进行连接操作。
Join 分为:
- 内连接(inner join)
- 外连接(outer join)
其中外连接分为:
- 左外连接(left outer join)
- 右外连接(right outer join)
- 全外连接(full outer join)
说明:
1.其中外连接的“OUTER”关键字可以省略不写。
2.内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录。
笛卡尔积
在我们进行多表联合查询的时候会出现的一种情况——笛卡尔积现象
我们以下面两张表举例:
学生表(Student)
|ID | StudentName | StudentClassID|
|---|---|---|
|1 | 小明| 1|
|2 | 小红| 2|
|3 | 小兰 | 3|
|4 | 小吕 | 2|
|5 | 小梓 | 1|
班级表(Class)
|ClassID| ClassName|
|---|---|
|1 | 软件一班|
|2 | 软件二班|
|3 | 软件三班|
当我们进行查询操作的时候:
select * from Student,Class;

就会出现上面的情况,也就是笛卡尔现象,表Student中有5条记录,表Class中有3条记录,那么对于表Student而言有5种选择,对于表Class来说有3种选择。所以一共有 5 * 3 = 15种选择了,也就是笛卡尔积。
内连接——inner join
内连接查询返回满足条件的所有记录,默认情况下没有指定任何连接则为内连接。
例如:查询xx学生在xx班级 沿用上面的数据表
select stu.StudentName,cl.ClassName from Student stu
inner joinClass cl on stu.StudentClassID=cl.ClassID;
查询结果

左外连接——left join
左外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符左边表的其他行。
我们在原Student 表中新增学生:小美

例如: 查询xx学生在xx班级 沿用上面的数据表
select stu.StudentName,cl.ClassName from Student stu
left joinClass cl on stu.StudentClassID=cl.ClassID;
查询结果

右外连接——right join
右外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符右边表的其他行。
我们在原Class表中新增班级:软件四班

例如: 查询xx学生在xx班级 沿用上面的数据表
select stu.StudentName,cl.ClassName from Student stu right join Class cl on stu.StudentClassID=cl.ClassID;
查询结果

全连接——full join
全连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的其他行。
注:mysql默认不支持full join。
这里我们就不做介绍了。
文末
本章节主要介绍了Iterable与Iterator之间的区别与联系,以及其他方面的小知识点,也是面试过程中会出现的内容点。
欢迎关注公众号:Coder编程
获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!

推荐阅读
参考文章:
https://www.cnblogs.com/jackson-zhangjiang/p/7819634.html
http://www.360doc.com/content/14/1229/21/7635_436727229.shtml
欢迎大家关注并Star~
带你了解数据库中JOIN的用法的更多相关文章
- 数据库中join的用法(on、left。right)
Table A aid adate 1 a1 2 a2 3 a3 TableB bid bdate 1 b1 2 b2 4 b4 两个表a,b相连接, ...
- 带你了解数据库中group by的用法
前言 本章主要介绍数据库中group by的用法,也是我们在使用数据库时非常基础的一个知识点.并且也会涉及Join的使用,关于Join的用法,可以看我写的上一篇文章:带你了解数据库中JOIN的用法如有 ...
- 带你了解数据库中事务的ACID特性
前言 前面我们介绍过数据库中 带你了解数据库中JOIN的用法 与 带你了解数据库中group by的用法的相关用法.本章节主要来介绍下数据库中一个非常重要的知识点事务,也是我们项目中或面试中经常会遇到 ...
- 【转】Oracle数据库中Sequence的用法
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE S ...
- 关于数据库中datareader的用法
1.C#中提供的DataReader可以从数据库中每次提取一条数据. using System; using System.Collections.Generic; using System.Comp ...
- [转]Python多线程与多线程中join()的用法
https://www.cnblogs.com/cnkai/p/7504980.html Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知 ...
- SQL中JOIN 的用法
关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create table table1(id int ...
- SQL中join的用法
关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create table table1(id int ...
- MySQL中join的用法
近期用phpcms v9做项目,初期没有问题,后期随着数据量的增大,phpcms v9后台出现的栏目更新不动的情况,初期我以为是程序的问题,进行了程序排查,没有发现任何问题,登录上centos服务器后 ...
随机推荐
- POJ2502乘坐地铁上学
POJ2502 题目大意:给你一个二维地图,起点终点,以及多条地铁线路(只有相邻两站才可互通)中的站点坐标.步行以及坐地铁的速度: 思路:难点在于建图,一个多小时磨磨蹭蹭,都是因为思路没捋清楚~~,对 ...
- 团队项目第六周——Alpha阶段项目复审(盐酸队)
Alpha阶段项目复审 小组 优点 缺点,bug报告 名次 天冷记得穿秋裤队 功能比较新颖,可以离线下载,做的比较完整 在下载电影时容易中断 1 只会嘤嘤嘤队 游戏和记单词的融合,也比较新颖 部分浏览 ...
- 获取Oracle EBS数据库跟踪文件方法
http://www.orapub.cn/posts/1624.html 一.以下在Oracle APP中执行: 1) Set the Profile Option: ‘Initialization ...
- Delphi 动态与静态调用DLL(最好的资料)
摘要:本文阐述了 Windows 环境下动态链接库的概念和特点,对静态调用和动态调用两种调用方式作出了比较,并给出了 Delphi 中应用动态链接库的实例. 一.动态链接库的概念 动态链接库( ...
- 基于vs2012的C# winform抽奖小程序的总结
哈希表的使用 Hashtable hashtable = new Hashtable(); hashtable.ContainsValue(tmp);//判断哈希表中有没有tmp hashtable. ...
- mysql之使用centos7实现主从复制(读写分离)的实现过程
什么是主从复制? 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 主从复制的作用(好处)! 1.做数据的热备,作为后备数据库,主数据库服务器故 ...
- musql 添加字段语句
修改表tax_version添加up_content属性为text类型非空,注释为“更新内容”,字段添加再“name”属性后面 ALTER TABLE `tax_version` ADD `up_co ...
- Linq to SQL 练习
public class HomeController : Controller { // // GET: /Home/ empentity entity = new empentity(); pub ...
- T-SQL分页查询语句
使用 ROW_NUMBER(),SQL Server版本要求2005及以上. SELECT * FROM ( SELECT *,ROW_NUMBER() OVER(ORDER BY UserID) A ...
- C++引用和指针的区别
一.引用和指针的定义 引用:它是给另一个变量取一个别名,不会再次分配空间(可以带来程序的优化) 指针:它是一个实体,需要分配空间 引用在定义的时候必须进行初始化,并且空间不能够改变. 指针在定义的 ...