sql语句中的join(SQL语句中不同的连接JOIN及join的用法)
sql语句中的join
SQL语句中不同的连接JOIN及join的用法为了从两个表中获取数据,我们有时会用JOIN将两个表连接起来。通常有以下几种连接方式:
JOIN or INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何一边缺失数据就不显示。
LEFT JOIN(左外连接):即使右边的表中没有匹配,也从左表返回所有的行。
RIGHT JOIN(右外连接):即使左边的表中没有匹配,也从右表返回所有的行。
FULL JOIN(全外连接):只要其中一个表中存在匹配就返回行。
如例,有grade表(课程号sn,分数scroe,学号id),student表(学号id,学生姓名name),要查询学生的姓名和成绩
当JOIN或是INNER JOIN时,
SELECT s.name,g.sn,g.score from student as s join grade as g on s.id = g.id
或者
SELECT s.name,g.sn,g.score from student as s inner join grade as g on s.id = g.id
结果集如下
当LEFT JOIN时,
SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id
结果集如下
当RIGHT JOIN时,
SELECT s.name,g.sn,g.score from student as s right join grade as g on s.id = g.id
结果集如下
当FULL JOIN时,
SELECT s.name,g.sn,g.score from student as s full join grade as g on s.id = g.id
结果集如下
注意,两个表连接时用on,在使用left join(right join或full join)时,on与where的区别是:
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
where条件是在临时表生成好后再对临时表进行过滤的条件,这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。如下图,
on条件为黄色部分
SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id and score =90
SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id where score =90
下面看下SQL中join的各种用法
1.自然连接(natural join)
自然连接将表中具有相同名称的列自动进行匹配,自然连接不必指定任何同等连接条件也不能认为指定哪些列需要被匹配,自然连接得到的结果表中,两表中名称相同的列只出现一次。
select * from employee natural join department;
2.内连接(inner join):产生的结果是A和B的交集(相同列里面的相同值)
内连接查询能将左表和右表中能关联起来的数据连接后返回,返回的结果就是两个表中所有相匹配的数据。
select * from TableA as A inner join TableB B on A.PK = B.PK; select * from TableA as A inner join TableB B on A.PK > B.PK;
3.外连接(outer join)
内连接是要显示两张表的内存,而外连接不要求如此,外连接可以依据连接表保留左表,右表或全部表的行为而分为左外连接右外连接和全连接。
select * from TableA as A left(right/full) join TableB as B on A.PA = B.PK;
Full Join:产生的结果是A和B的并集(如果没有相同的值会用null作为值)
Left Join:产生表A的完全集,而B表中匹配的则有值(没有匹配的则以null值取代)
Right Join:产生表B的完全集,而A表中匹配的则有值(没有匹配的则以null值取代)
4.交叉连接(cross join)
又称笛卡尔连接,交叉连接返回两个集合的笛卡尔积。
select * from TableA cross join TableB;
参考链接:http://mazhuang.org/2017/09/11/joins-in-sql/
总结
以上所述是小编给大家介绍的SQL语句中不同的连接join及join的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
- Windows2012配置SQLServer2014AlwaysOn的图解(Windows2012配置SQLServer2014AlwaysOn的图解)
- mysql字符集怎么看(mysql字符集相关总结)
- sql如何合并多个表中的数据(SQL 列不同的表查询结果合并操作)
- mysql如何解析binlog(MySQL的binlog日志使用详解)
- sqlserver怎么手动添加数据库表(SQL Server 数据库调整表中列的顺序操作方法及遇到问题)
- sql server 2012 错误5123(SQL SERVER 9003错误解决方法)
- sqlservercount函数的用法(SQL Server中row_number函数的常见用法示例详解)
- sqlserver 比较日期(解析SQL Server中SQL日期转换出错的原因)
- mysql高级变量查询(MySQL 使用自定义变量进行查询优化)
- mysql中如何进行模糊查询(MySQL模糊查询用法大全正则、通配符、内置函数)
- 如何在cmd里开启mysql(Windows下通过cmd进入DOS窗口访问MySQL数据库)
- sql server 知识大全(sql server 交集,差集的用法详解)
- thinkphp伪静态实例(thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解)
- 将mysql中的表导出来(MySQL之导出整个及单个表数据的操作)
- sql server案例(SQL Server作业报错特殊案例分析)
- 数据库sql语句大全及例题(数据库之SQL技巧整理案例)
- 寒假余额不满24小时,不如来一场说走就走的亲子阅读之旅(寒假余额不满24小时)
- 省委书记出席的交流会,十位县委书记同场发言,代表公文材料的高水平(省委书记出席的交流会)
- 《刘老根3》热播,去世15年的她却再次被 伤害(去世15年的她却再次被)
- 十二星座爱情支配欲指数(十二星座爱情支配欲指数)
- 虐待儿童是发泄支配欲的愚蠢行为(虐待儿童是发泄支配欲的愚蠢行为)
- 你或许不知道你隐藏的支配欲望(你或许不知道你隐藏的支配欲望)
热门推荐
- python把文件上传服务器(Python 实现两个服务器之间文件的上传方法)
- dede调用tag标签(dedecms tag标签实现随机颜色和字体大小)
- docker镜像无法删除 Error:No such image:xxxxxx解决(docker镜像无法删除 Error:No such image:xxxxxx解决)
- 浏览器怎么登录宝塔linux面板(宝塔Linux面板如何绑定域名?登录地址是多少?)
- div中设置图片的大小(div或img图片高度随宽度自适应的方法)
- MySQL中查询数据库的大小
- python自定义定时任务(python的schedule定时任务模块二次封装方法)
- linuxsvn服务怎么打开(CentOS SVN服务器如何管理多个项目)
- python3 代码解读(Python3列表内置方法大全及示例代码小结)
- jquery图片轮播代码
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9