为了从两个表中获取数据,我们有时会用JOIN将两个表连接起来。通常有以下几种连接方式:

JOIN  or  INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何一边缺失数据就不显示。

LEFT JOIN(左外连接):即使右边的表中没有匹配,也从左表返回所有的行。

RIGHT JOIN(右外连接):即使左边的表中没有匹配,也从右表返回所有的行。

FULL JOIN(全外连接):只要其中一个表中存在匹配就返回行。

如例,有grade表(课程号sn,分数scroe,学号id),student表(学号id,学生姓名name),要查询学生的姓名和成绩

                                   

当JOIN或是INNER JOIN时,

SELECT s.name,g.sn,g.score from student as s join grade as g on s.id = g.id
或者
SELECT s.name,g.sn,g.score from student as s inner join grade as g on s.id = g.id

结果集如下

当LEFT JOIN时,

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id

结果集如下

当RIGHT JOIN时,

SELECT s.name,g.sn,g.score from student as s right join grade as g on s.id = g.id

结果集如下

当FULL JOIN时,

SELECT s.name,g.sn,g.score from student as s full join grade as g on s.id = g.id

结果集如下

注意,两个表连接时用on,在使用left join(right join或full join)时,on与where的区别是:

on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录

where条件是在临时表生成好后再对临时表进行过滤的条件,这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。如下图,

on条件为黄色部分

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id and score =90

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id where score =90

最新文章

  1. FutureTask的使用
  2. 一行python代码实现树结构
  3. poj 1626
  4. web.xml中在Servlet中获取context-param和init-param内的参数
  5. centos6.5 redmine 安装
  6. bloom filter
  7. Java学习-019-Properties 文件读取实例源代码
  8. Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select
  9. Intellij IDEA 创建控制台项目,断点调试
  10. 【HDOJ】【4336】Card Collector
  11. 试图从数据库 ‘UFData_001_2003' 中提取的逻辑页 (1:10720) 属于对象 '0',而非对象 'syscolumns'
  12. Js参数RSA加密传输,jsencrypt.js的使用
  13. T4 模板自动生成带注释的实体类文件
  14. esxi5.5 安装,虚拟机复制
  15. UCML快速开发平台学习1-UCML环境安装
  16. asp.net 基础
  17. sass入门学习篇(一)
  18. linux下lampp(xampp)安装memcached扩展
  19. IE8 disable 兼容行问题
  20. 记一次idea启动tomcat后控制台乱码的坑

热门文章

  1. Mysql、Hbuilder、Idea快捷键
  2. java中过多if-else分支语句的优化方案
  3. Android 普通通知栏新方法,现在需要创建通知渠道才可以
  4. Hadoop源码篇--Reduce篇
  5. Python内置函数(68)——__import__
  6. 利用Python爬去囧网福利(多线程、urllib、request)
  7. qt之fiddler抓包
  8. IdentityServer4实战 - 必须使用HTTPS问题解析
  9. WebApi系列~不支持put和delete请求的解决方法
  10. LeetCode专题-Python实现之第9题:Palindrome Number