mysql的多表查询
转自:http://huaxia524151.iteye.com/blog/1423614
转自:http://blog.sina.com.cn/s/blog_4c197d420101cnm9.html
连接类型
分为三种:交叉连接(笛卡尔积)、内连接(自然连接、等值连接、非等值连接)、外连接。
现有表R,S如下:
表R

表S

(1)交叉连接(笛卡尔积)cross join
没有where子句的交叉连接将产生连接表的笛卡尔积。
例一:
select * from R cross join S;
或
select * from R,S;
结果:

注:不需要任何条件。结果为两张表函数相乘(3x3=9)。
例二:
select * from R cross join S where R.C = S.C;
结果:

(2)内连接
内连接分为三种:自然连接、等值连接、非等值连接。
A.自然连接 natural join:在连接条件中使用等于=运算符比较被连接列的列值,但删除连接表中重复列。
例一:
select * from R natural join S;
或
select e.empno,e.ename,m.empno,m.ename from emp e,emp m
where m.mgr = e.empno;
结果:

B.等值连接 :使用等于=比较连接列的列值,在查询结果中列出接连表中的所有列,包括其中的重复列。
select * from R join S where R.C = S.C;
或
select * from R inner join S where R.C = S.C;
结果:

C.非等值连接:在连接条件中,可以使用其他比较运算符,比较被连接列的列值,如:<、>、!=等。
(3)外连接
外连接分为三类:全外连接、左外连接、右外连接。
A.左外连接 left join / left
outer join
select * from R left join S on R.C = S.C;

左外连接要遍历左表的所有记录,右表没有的用null表示。
B.右外连接 right join / right
outer join
select * from R right join S on R.C = S.C;

右外连接要遍历右表所有的记录,左表没有的用null表示。
C.全外连接 full join / full
outer join
select * from R full join S on R.C = S.C;

mysql中的全连接补充:
MySQL支持左连接,右连接,但是并不支持全连接。
通过基本是下全连接的效果。
表数据说明:
表a

表b

自然连接sql:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a ,stu_b b
where a.id=b.id

左连接sql:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
left join stu_b b
on a.id=b.id

右连接sql:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
right join stu_b b
on a.id=b.id

合并左、右连接:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
left join stu_b b
on a.id=b.id
union
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
right join stu_b b
on a.id=b.id

也可以是:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
left join stu_b b
on a.id=b.id
union
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
right join stu_b b
on a.id=b.id
where a.id is null
mysql的多表查询的更多相关文章
- Vc数据库编程基础MySql数据库的表查询功能
Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- day15(mysql 的多表查询,事务)
mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1( a INT PRIMARY KEY , b ...
- mysql数据库优化课程---11、mysql普通多表查询
mysql数据库优化课程---11.mysql普通多表查询 一.总结 一句话总结:select user.username,user.age,class.name,class.ctime from u ...
- Mariadb/MySQL数据库单表查询基本操作及DML语句
Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...
- day 39 MySQL之多表查询
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都 ...
- day 38 MySQL之单表查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER ...
- MySQL的联表查询
MySQL的联表查询 首选:分析查询的字段来自哪些表 进而:确定交集 然后:确定判断的条件 比如:从student表 和 result表 查学号.考试名称.学时.考试日期.考试成绩 表1: 学号 考试 ...
- mysql 查询优化 ~ 多表查询基础知识
一 什么是驱动表 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]: 2)未指定联接条件时,行数少的表为[驱动表](Important!). 表现 explain第一行出现的 ...
随机推荐
- SSH协议及其应用
SSH协议及其应用 原文作者:阮一峰 链接: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruany ...
- 我的css释疑-float line-height inline-block vertical-align
markdown的图片和链接格式相类似: [链接文字/图片的alt text] (链接地址/ 图片的地址), 只是图片要在前面加上感叹号! 当内容中含有图片的时候,如果图片的高度大于行高,则含有图片 ...
- JavaScript 中 for in 循环和数组的问题
本文由 伯乐在线 - ElvisKang 翻译,进林 校稿.未经许可,禁止转载!英文出处:adripofjavascript.com.欢迎加入翻译小组. JavaScript的for…in循环用于迭代 ...
- Robberies
Robberies Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- Windbg对过滤驱动DriverEntry函数下断点技巧
方法1: 1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址) 2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址 3> 计算过 ...
- Eighth scrum meeting - 2015/11/2
由于之前的在线视频播放控件功能过于简单,我们今天从网上找了一个效果还不错的视频播放开源项目,在添加了复杂的依赖后终于能够正常使用了,效果比起之前来也好了很多,而且后续的视频下载功能也可以基于这个来开发 ...
- HDU 3998 Sequence(经典问题,最长上升子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3998 解题报告:求一个数列的最长上升子序列,并求像这样长的不相交的子序列最多有多少个. 我用的是最简单 ...
- [Effective JavaScript 笔记]第25条:使用bind方法提取具有确定接收者的方法
js里方法和属性值为函数,就像一个东西两种称呼一个样,比如土豆,也叫马铃薯,一个样.既然一样,那就可以对对象的方法提取出来为函数,然后把提取出来的函数作为回调函数直接传递给高阶函数. 高阶函数是什么 ...
- 15 条实用 Linux/Unix 磁带管理命令
导读 磁带设备应只用于定期的文件归档或将数据从一台服务器传送至另一台.通常磁带设备与 Unix 机器连接,用 mt 或 mtx 控制.强烈建议您将所有的数据同时备份到磁盘(也许是云中)和磁带设备中. ...
- 将Web应用性能提高十倍的10条建议
导读 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于 ...