sql-多表查询
一:外连接
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-多表查询的更多相关文章
- sql多表查询之一:Where 和 On的秘密
原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术.什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某 ...
- oracle SQL多表查询
SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列. 1 ro ...
- SQL联表查询
数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(tab ...
- Sql Server的艺术(四) SQL多表查询
表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空 ...
- sql多表查询(单表查询略过)
表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...
- SQL多表查询总结
前言 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要.只有真正了解它们之间的区别,才能正确使用. 一.Union UNION 操作符用于合并两个或多个 SELE ...
- sql 多表查询结果验证
1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为“有序”,因此,我们 ...
- 【数据库】sql连表查询
SQL总结 连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两 ...
- Server Sql 多表查询、子查询和分页
一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...
- sql 两表查询后 更新某表中部分字段
这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...
随机推荐
- 命令:jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
命令:jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令 这些命令 必须 在 linux jdk bin 路径 下执行 eq: ./jstack 10303 即可 如果想把 ...
- sql server 2016 附加 其它目录的数据库
如果数据库不在默认目录,那么需要将 mdf所在目录或者 mdf文件 添加 用户 [NT SERVICE\MSSQLSERVER]的创建权限,否则会提示没有权限, 具体详见: https://docs. ...
- unittest 出报告 并配合 jenkins,发现有用例错误,但是构建没出现红点 的解决方法
加了个 判断 测试用例总数 和 测试运行成功数 是否一致的判断,不一致 就断言失败,jenkins哪里是红点
- 变式配置简介 VARIANT CONFIGURATION
变式物料类型KMAT; ITEM CATEGORY GROUP: main item 0002 sub item 0004 strategy group:25 requirement type: ke ...
- vue+窗格切换+田字+dicom显示_03
环境:vue+webpack+cornerstone ide:vs code 需求:窗格设置+拼图设置 代码: 主体:printPage.vue <div class="div mid ...
- centos6.5部署redmine3.2
ruby 2.1 + rails 4.2+ mysql 5.6 +centos6.5 + rvm 1.29 1.基本的软件环境 yum -y install libyaml-devel zlib-de ...
- orcal 程序自动和手动项
orcal在电脑开机后,为了可以使用 这两个服务设置为自动(为了使用),其他设置为手动(减少电脑压力):
- ViewModel学习
ViewModel是一个负责准备和管理Activity或Fragment数据的类.它还处理Activity / Fragment与应用程序其余部分的通信(例如,调用业务逻辑类). 始终与范围(Frag ...
- leetcode84
public class Solution { public int LargestRectangleArea(int[] hist) { // The main function to find t ...
- leetcode141
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...