今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL联表查询。

一、SQL联表查询简介

在前文SQL语句详解(三)——SQL子查询中,我们给大家介绍了SQL子查询的相关知识和使用示例。实际上,如果涉及到SQL多个表之间的查询,使用SQL联表查询的频率比使用SQL子查询的频率要高。SQL联表查询是指以两个表中的一个共同的字段,在这两个表之间建立联系,查询两个表中的全部或部分字段。
SQL联表查询按照表结合方式的不同,可以分为内链接、外链接交叉链接和结果链接四种,其中外链接又可以分为左外链接和右外链接两种。
下面,我们就依次介绍这四种联表查询的使用。
本文中使用的三张表如下:

二、内链接

内链接指的是把两个表关联起来后,只有当两个表中共同有的数据才进行显示,内链接是最普通的联表查询,其使用示例为:

select 字段 from 表1 inner join 表2 on 连接条件

例如:

select name,score from student inner join grade on student.Sid=grade.id;

由于在默认情况下join为内链接,因此上例中inner关键字可以省略,至于前面的字段,如果在两个表中没有相同的字段,则可以直接写字段名,如果两个表中有相同的字段名,则必须指名该字段属于哪个表,上述示例修改后,命令如下:

select student.name,grade.score from student join grade on student.Sid=grade.id;

另外,有时,如果表的名字过长,SQL语句在书写起来就不太方便。MySQL支持给一个表起一个别名。例如,在上例中,我们还给student表起一个别名s,给grade表起一个别名g,别名必须在from字段后予以声明,这样,上例修改后如下:

select s.name,g.score from student s join grade g o s.Sid=g.id;

上述命令执行结果如下:

三、外链接

外链接可以分为左外链接和右外链接,其实这两种方式在本质上是相同的。如果说内链接是两个表都有数据时才会显示,那么外链接就是主表中有数据就显示,而不管从表。对于左外链接来说,from后面紧跟着的表就是主表,而对于右外链接来说,则正好相反,join后面紧跟着的表是主表。

四、交叉链接

交叉链接,不设置联表条件,join前面可以加一个关键字cross,也可以不加。交叉链接表示两个表中的元素按照排列组合的方式进行逐个对应。交叉链接SQL示例如下:

select name,score from student s cross join grade g;

执行结果如下:

五、结果链接

所谓结果链接,就是将两个select查询的结果合并显示,union语句用于连接两个不同的select语句,如下所示:

select name from studeng union select score from grade;

执行结果如下:

注意,如果这union结果连接的两个SQL语句存在相同的数据,则在最终的结果中,这些数据会被合并,如果不想让这些数据被合并,则可以在union后面添加关键词all,SQL语句如下:

select id from student union all select id from course;

执行结果如下:
不加all关键字之前:

加all关键字之后:

注意,使用SQL结果链接时,必须保证这两个select语句返回相同的列数,否则MySQL数据库会报错,如下所示:

原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

SQL语句详解(四)——SQL联表查询相关推荐

  1. mysql切换用户sql语句,MySQL用户管理及SQL语句详解

    [(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...

  2. MyBatis SQL语句详解

    MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...

  3. oracle分页查询sql语句通用,oracle分页查询sql语句,oracle分页查询sql语句详解

    oracle分页查询sql语句,oracle分页查询sql语句详解,Oracle分页查询sql语句 Oracle中分页和MySql中的分页不同,MySql中的分页使用关键字limit即可,相对简单一点 ...

  4. MaxCompute SQL函数详解 ODPS SQL函数详解---之日期相关函数

    MaxCompute SQL函数详解 ODPS SQL函数详解 日期函数 to_date函数 返回类型:datetime 语法:to_date(类型 参数1,类型 参数2);to_date(strin ...

  5. MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数

    MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数 MaxCompute/ODPS SQL常用数学运算相关函数 ABS函数-计算绝对值 sql:select A ...

  6. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)...

    我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INT ...

  7. 【数据库】MySQL的sql语句详解

    目录 MySQL之sql语句 一, INSERT语句 insert语句的使用: 1,给表中一次性插入一条记录 2,给表中一次性插入多条记录 二, REPLACE语句 REPLACE语句的使用 1,语法 ...

  8. mysql左连接sql语句详解_SQL各种连接查询详解(左连接、右连接..)

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

  9. SQL基础:常用SQL语句详解(转)

    到今天为止,人们对关系数据库做了大量的研究,并开发出关系数据语言,为操作关系数据库提供了方便的用户接口.关系数据语言目前有几十种,具有增加.删除.修改.查询.数据定义与控制等完整的数据库操作功能.通常 ...

最新文章

  1. 嵌入式 linux 进程锁,嵌入式  Linux线程锁详解pthread_mutexattr_t
  2. Java String类源码解析
  3. 点击出现黑色背景的解决:-webkit-tap-highlight-color:rgba(0,0,0,0)
  4. 升级MariaDB为10.1版本
  5. 基于RGB图像的草莓叶片白粉病检测深度学习方法
  6. mac开发java安卓_mac下Android开发环境搭建
  7. 【转】在IIS 7.0上使用自签证书来启用SSL
  8. 关于DBC文件的格式解析(转)
  9. 给视频添加马赛克并裁剪画面的简单步骤
  10. 简单的jsp代码(登录界面)
  11. 将caj转换成pdf
  12. 窗口大小不规范,教你怎么写默认窗口
  13. linux local root exploit,Linux非交互环境下本地提权思路与反思 linux localroot exploit
  14. 2018华东师范软件复试机试
  15. 在网页中插入MediaPlayer控件
  16. vue对象属性为null_vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题...
  17. 华为PPPoE简单实验
  18. JAVA微信扫码支付及微信App支付开发(模式二)完整功能实现
  19. python实现中文的繁简转换
  20. Vue最全知识点「基础到进阶,覆盖vue3.0,建议收藏」

热门文章

  1. AA认证的办理了流程,AA认证在哪里可以做
  2. 运动控制第三篇之直流电机参数辨识
  3. 随笔(2016.11)
  4. DAC数转模信号MS4344 ES7144 ES7148 CS4344
  5. VScode格式化HTML代码保持标签属性不换行
  6. 如何检查是否在Cygwin,Mac或Linux中运行?
  7. git push 失败,提示 unpack error/unpack failed 解决方法
  8. UNIX系统中相关的限制问题如主机名的长度、页大小等等
  9. StoredProcedure(存储过程) 里的 WITH RECOMPILE 到底是干麻的?
  10. 6大常用数据分析模型详解,做分析不再没思路