SQL表连接查询(inner join、full join、left join、right join)
2016-08-02 11:30
666 查看
SQL表连接查询(inner join、full join、left
join、right join)
前提条件:假设有两个表,一个是学生表,一个是学生成绩表。
表的数据有:
一、内连接-inner jion :
最常见的连接查询可能是这样,查出学生的名字和成绩:
上面就是我们最常见的inner join,即内连接,把符合student.id=mark.studentid条件的元组才选出来,也可以写成:
符合条件的只有两条结果,查出结果为:
二、左连接-left join:
左连接是把左边的表的元组全部选出来:
上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,
也可以写成
选出的结果为:
三、右连接-right join:
右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:
上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,
也可以写成
如下图所示:
四、全连接-full join:
把左右两个表的数据都取出来,不管是否匹配:
如下图所示,学生表和成绩表的数据都取了出来:
比较常用的是第一种,内连接,而且是用这种写法:
原文链接:
比较常用的是第一种,内连接,而且是用这种写法:
原文链接:http://www.cnblogs.com/still-windows7/archive/2012/10/22/2734613.html
join、right join)
前提条件:假设有两个表,一个是学生表,一个是学生成绩表。
表的数据有:
一、内连接-inner jion :
最常见的连接查询可能是这样,查出学生的名字和成绩:
select s.name,m.markfrom student s,mark mwhere s.id=m.studentid
上面就是我们最常见的inner join,即内连接,把符合student.id=mark.studentid条件的元组才选出来,也可以写成:
select s.name,m.markfrom student sinner join mark mon s.id=m.studentid
select s.name,m.mark from student s,mark m where s.id=m.studentid
符合条件的只有两条结果,查出结果为:
二、左连接-left join:
左连接是把左边的表的元组全部选出来:
select s.name,m.markfrom student sleft join mark m on s.id=m.studentid
上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,
也可以写成
select s.name,m.markfrom student s,mark mwhere s.id=m.studentid(+)
选出的结果为:
三、右连接-right join:
右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:
select s.name,m.markfrom student sright join mark m on s.id=m.studentid
上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,
也可以写成
select s.name,m.markfrom student s ,mark m where s.id(+)=m.studentid
如下图所示:
四、全连接-full join:
把左右两个表的数据都取出来,不管是否匹配:
select s.name,m.markfrom student sfull join mark mon s.id=m.studentid
如下图所示,学生表和成绩表的数据都取了出来:
比较常用的是第一种,内连接,而且是用这种写法:
select s.name,m.mark from student s,mark m where 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
相关文章推荐
- Spark SQL概念学习系列之Spark生态之Spark SQL(七)
- SQL SERVER 关于死锁问题相关整理(一)
- Java连接并使用Memcached
- 使用Navicat for Oracle新建表空间、用户及权限赋予
- mysql workbench快捷键小结
- mysql多行数据合并为一行
- mysql修改表列属性,增加删除列
- MySQL [Warning] Can’t create test file xxx lower-test(转)
- mysql 执行状态分析 show processlist
- 在SQL中用正则表达式替换html标签
- Redis在PHP中的简单应用
- MySQL5 tar.gz编译安装
- redis详解(四)-- 高可用分布式集群
- dbsnmp和sysman帐号被锁定,解锁后,只要运行oem,马上这两个账号又被锁定。 原因: dbsnmp和sysman这两个用户和oem紧密相关,dbsnmp用户启动oracle智能代理,用于收集
- sybase数据库修改库名
- #2006 - MySQL server has gone away 问题解决方法
- Redis Memcache SSDB比较
- mysql事务隔离级别、乐观锁、悲观锁
- mongodb_修改器($inc/$set/$unset/$push/$pop/upsert/save())
- oracle sql中去空格