一:外连接

1.左外连接(left join)

select * from A left join B on A.id=B.a_id            结果如下

很明显,A表的所有数据都显示出来了,而与A表id相同的不同记录就是这次联表的行数

而A表中并没有id为5的记录,所以B表的a_id=5的记录不会显示

反而A表中id为4的记录(B表没有对应),被联表查出来了,因为B表没有对应,所以B表的字段显示为NULL

总结:(left join以两表的id和a_id为准)

①两者都有时,从A表相同的第一条开始算,B表有多少与这条一样的就都加入联表的条数

②只有A表的id有这个值,则联表中插入一条,B表的记录全为NULL的记录

③只有B表的a_id有这个值,则联表不会有这个记录

④左联表中,左边的表一定全都显示,右边的不一定

⑤实际中,我们可以这样操作

select A.id,A.name,B.a_score from A left join B on A.id=B.a_id

2.右外连接(righ join)

这个则反过来,右表是左连接的左表的意思

3.完全外连接(full join)

此时,左右表都会显示在联表中,左表的记录右表没有则显示NULL,右表的记录左表没有也显示NUll

select * from A full join B on A.id=B.a_id

当然,mysql是不支持full join或者full outer join的 我们可以用left right union来完成

SELECT * from A LEFT JOIN B ON A.id=B.a_id
UNION
SELECT * from A RIGHT JOIN B ON A.id=B.a_id

二:内连接

inner join  只会返回条件相同的行

SELECT * FROM A INNER JOIN B on A.id=B.a_id

这个就和 select * from A,B where A.id=B.a_id  一样了

cross join(交叉连接)

select * from A cross join B

结果太长就不显示了,A的行数乘以B的行数就是了

当然加上 on A.id=B.a_id  就变成inner join 的结果了

三:UNOIN

这个操作符可以合并两个或多个 SELECT 语句的结果集。

当然前提这两个语句的列数量相同,类型相同

sql-多表查询的更多相关文章

  1. sql多表查询之一:Where 和 On的秘密

    原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术.什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某 ...

  2. oracle SQL多表查询

    SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列.              1 ro ...

  3. SQL联表查询

    数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(tab ...

  4. Sql Server的艺术(四) SQL多表查询

    表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空 ...

  5. sql多表查询(单表查询略过)

    表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...

  6. SQL多表查询总结

    前言 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要.只有真正了解它们之间的区别,才能正确使用. 一.Union UNION 操作符用于合并两个或多个 SELE ...

  7. sql 多表查询结果验证

    1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为“有序”,因此,我们 ...

  8. 【数据库】sql连表查询

    SQL总结 连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两 ...

  9. Server Sql 多表查询、子查询和分页

    一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...

  10. sql 两表查询后 更新某表中部分字段

    这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...

随机推荐

  1. Nuke Python module的使用

    最近很多脚本工作都需要脱离nuke的gui环境运行,没有了script editor就必须要尝试Nuke Python module功能了.该模式可以执行大部分在GUI环境中的命令,在自动生成或者批量 ...

  2. centos7-软件安装-jdk1.8

    JDK1.8下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装目录 ...

  3. Java中产生随机数的两个方法

    Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...

  4. [ExcelHome]VLOOKUP的别样用法

    请看题: 如上图所示,是某小区多名业主的信息表.如诸君所见,A列是业主的姓名,B列是一些有趣的信息,要求在C列,使用VLOOKUP函数,提取出B列的手机号码. B列的信息真是奇葩,除了手机号码,还有职 ...

  5. Shiro+CAS

    参考链接: CAS实现单点登录SSO执行原理探究:http://blog.csdn.net/javaloveiphone/article/details/52439613 单点登录CAS技术概述:ht ...

  6. 关于CoreData的用法

    有些同事觉得CoreData是一个看不懂,理解不清的神秘东东,其实ios的本地数据储存是一个sqlite数据库,一个简易的数据库,而这个CoreData是否支持所有储存的数据呢,显然不是的,站在我的角 ...

  7. Struts2 <s:select >标签的使用

    select 取值session中的内容 <s:select name="meal.mealseries.seriesid" list="#session.meal ...

  8. 普通PC机支持内存128G,单条32G内存

    以前,不管是英特尔还是AMD的消费级平台支持内存容量大多都是64GB,这一现状被英特尔公司去年推出的第九代酷睿而改变.第九代酷睿最大支持128GB内存,虽然只是简单的提高了内存容量,对大多数电脑用户而 ...

  9. MySQL学习笔记Windows篇<一> Welcome to MySQL

    MySQL安装完毕后没有图形化操作界面,图形化管理界面需要另行安装,个人比较喜欢Navicat,界面更像SQLserver: 此篇学习笔记所有操作均使用命令行中完成: 1.开启/停止服务 使用MySQ ...

  10. form转化json

    ;(function($){ /** * 依赖jquery-1.4.2 * 依赖jquery.json-2.2,参考http://code.google.com/p/jquery-json/ * 用于 ...