SQL表连接查询(inner join、full join、left join、right join)
2016-01-05 17:56
447 查看
前提条件:假设有两个表,一个是学生表,一个是学生成绩表。
表的数据有:
一、内连接-inner jion :
最常见的连接查询可能是这样,查出学生的名字和成绩:
上面就是我们最常见的inner join,即内连接,把符合student.id=mark.studentid 条件的元组才选出来,也可以写成:
符合条件的只有两条结果,查出结果为:
二、左连接-left join:
左连接是把左边的表的元组全部选出来:
上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,选出的结果为:
三、右连接-right join:
右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:
上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,如下图所示:
四、全连接-full join:
把左右两个表的数据都取出来,不管是否匹配:
如下图所示,学生表和成绩表的数据都取了出来:
比较常用的是第一种,内连接,而且是用这种写法:
表的数据有:
一、内连接-inner jion :
最常见的连接查询可能是这样,查出学生的名字和成绩:
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:
左连接是把左边的表的元组全部选出来:
select s.name,m.mark from student s left join mark m on s.id=m.studentid
上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,选出的结果为:
三、右连接-right join:
右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:
select s.name,m.mark from student s right join mark m on s.id=m.studentid
上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,如下图所示:
四、全连接-full join:
把左右两个表的数据都取出来,不管是否匹配:
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
相关文章推荐
- oracle 递归查询的例子
- redis哨兵(sentinel)原理
- Python的MongoDB模块PyMongo操作方法集锦
- 使用mysqlbinlog server远程备份binlog的脚本
- mysqldump备份过程中都干了些什么
- 邮件系统服务器搭建记录(二)(Postfix+Cyrus-sasl+Courier-authlib+Dovecot+ExtMail+MySQL)
- Redis 集群的合纵与连横
- MySql的事务操作与演示样例
- node.js sql 注入攻击防御方法 (sql Injection)
- 关于SqlServer修改数据库常用信息的方法
- 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
- MySqlConnection.get_IsPasswordExpired()异常未将对象引用设置到对象实例
- oracle查询指定月份数据
- mysql使用utf8mb4
- 数据库的实现法
- SQL大圣之路笔记——查询表所在的存储过程
- sql 触发器
- MySQL计数器
- SQLServer大批量数据导入
- mysql中FIND_IN_SET的使用方法