多表联合查询:join的用法
2016-06-23 17:48
302 查看
前提条件:假设有两个表,一个是学生表,一个是学生成绩表。
表的数据有:
一、内连接-inner join :
1.概念:内联接是用比较运算符比较要联接列的值的联接
2.内连接:join 或 inner join
3.sql语句
select * from table1 join table2 on table1.id=table2.id
最常见的连接查询可能是这样,查出学生的名字和成绩:
上面就是我们最常见的inner join,即内连接,把符合student.id=mark.studentid 条件的元组才选出来,也可以写成:
符合条件的只有两条结果,查出结果为:
二、左连接:left join 或 left outer join
1.左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。
2.sql语句
select * from table1 left join table2 on table1.id=table2.id
左连接是把左边的表的元组全部选出来:
上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,选出的结果为:
三、右连接:right join 或 right outer join
(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(2)sql语句
select * from table1 right join table2 on table1.id=table2.id
右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:
上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,如下图所示:
四、完整外部联接:full join 或 full outer join
(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
(2)sql语句
select * from table1 full join table2 on table1.id=table2.id
把左右两个表的数据都取出来,不管是否匹配:
如下图所示,学生表和成绩表的数据都取了出来:
比较常用的是第一种,内连接,而且是用这种写法:
文章引用自:http://www.cnblogs.com/still-windows7/archive/2012/10/22/2734613.html
表的数据有:
一、内连接-inner join :
1.概念:内联接是用比较运算符比较要联接列的值的联接
2.内连接:join 或 inner join
3.sql语句
select * from table1 join table2 on table1.id=table2.id
最常见的连接查询可能是这样,查出学生的名字和成绩:
select s.name,m.mark from student s,mark m where s.id=m.studentid
上面就是我们最常见的inner join,即内连接,把符合student.id=mark.studentid 条件的元组才选出来,也可以写成:
select s.name,m.mark from student s inner join mark m on s.id=m.studentid
符合条件的只有两条结果,查出结果为:
二、左连接:left join 或 left outer join
1.左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。
2.sql语句
select * from table1 left join table2 on table1.id=table2.id
左连接是把左边的表的元组全部选出来:
select s.name,m.mark from student s left join mark m on s.id=m.studentid
上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,选出的结果为:
三、右连接:right join 或 right outer join
(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(2)sql语句
select * from table1 right join table2 on table1.id=table2.id
右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:
select s.name,m.mark from student s right join mark m on s.id=m.studentid
上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,如下图所示:
四、完整外部联接:full join 或 full outer join
(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
(2)sql语句
select * from table1 full join table2 on table1.id=table2.id
把左右两个表的数据都取出来,不管是否匹配:
select s.name,m.mark from student s full join mark m on s.id=m.studentid
如下图所示,学生表和成绩表的数据都取了出来:
比较常用的是第一种,内连接,而且是用这种写法:
select s.name,m.mark from student s,mark m where s.id=m.studentid
文章引用自:http://www.cnblogs.com/still-windows7/archive/2012/10/22/2734613.html
相关文章推荐
- shader 笔记(一)
- 《C++ Primer Plus》学习笔记 第1章 预备知识
- 表格的刷新性能
- 总结
- Metatable与面向对象、继承
- javaweb中文件上传下载示例
- JS加密Java解密报rsa bad argument
- EtherCAT状态转换
- Log4j.properties配置详解
- 五个知识体系之-SQL学习-第四天
- 2.7、Android Studio使用翻译编辑器本地化UI
- 2.7、Android Studio使用翻译编辑器本地化UI
- iOSview整体上移下移(点击键盘)
- 使用Apk动态加载框架(dynamic-load-apk)进行插件开发之环境搭建篇
- 操作系统精髓与设计原理(原书第6版)——学习笔记(1)
- lua 读取lua文件
- 总结
- 三个基本设计模式
- Python基础学习代码之函数和函数式编程
- cordova android (一)