SQL(1)-join使用

1、JOIN

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。

数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下, 把表间的数据交叉捆绑在一起。

  • JOIN、 INNER JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

SQL(1)-join使用

2、举例说明

SQL(1)-join使用

SQL(1)-join使用

1、Join(where联立查询)

概念:用于两表或多表之间数据联立查询。

select *  from Students s,Class c  where s.ClassId=c.ClassId

SQL(1)-join使用

2、Inner Join(内连接查询)

概念:与Join相同,两表或多表之间联立查询数据,关键字在表中存在至少一个匹配时返回行(只有匹配上才会返回该行)。因此我们在使用多表join查询的时候既可以使用where关联,也可以是inner join关联查询。

select *&#xA0; from Students s <strong>inner&#xA0;</strong> join Class c&#xA0;&#xA0; on s.ClassId=c.ClassId

结果和Join是一样的。

3、Left Join(左连接查询)

概念:以左表中的数据为主,即使与右表中的数据不匹配也会把左表中的所有数据返回

select *&#xA0; from Students s <strong>left&#xA0;</strong> join Class c&#xA0;&#xA0; on s.ClassId=c.ClassId

SQL(1)-join使用

4、Right Join(右连接查询)

概念:与Left Join的用法相反,是以右表中的数据为主,即使左表中不存在匹配数据也会把右表中所有数据返回;

select *&#xA0; from Students s <strong>right&#xA0;</strong> join Class c&#xA0;&#xA0; on s.ClassId=c.ClassId

SQL(1)-join使用

5、Full Join(全连接查询)

概念:返回表中所有的数据数据,无论匹配与否,关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行;

select *&#xA0; from Students s <strong>Full JOIN</strong>&#xA0; Class c&#xA0;&#xA0; on s.ClassId=c.ClassId

SQL(1)-join使用

6、UNION

操作符用于合并两个或多个 SELECT 语句的结果集。

请注意:

  1. UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
  2. 默认 UNION 操作符选取不同的值。 如果允许重复的值,请使用 UNION ALL。
  3. UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

7、On、Where的异同

ON的使用无论是左右内全都使用到了On来进行关联:

对于Inner Join 的作用就是起到了与where相同的作用条件筛选:

select *&#xA0; from Students s inner JOIN&#xA0; Class c&#xA0;&#xA0; on s.ClassId=c.ClassId and s.Sex= '&#x7537;'

SQL(1)-join使用

对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据.

select *&#xA0; from Students s left&#xA0; join Class c&#xA0;&#xA0; on s.ClassId=c.ClassId and s.Sex= '&#x7537;'

SQL(1)-join使用

对于Full Join 而言无论,只有同时满足的时候才会返回全部关联的数据,假如有一方不满足返回以左边的表数据为基准返回:

--&#x5168;&#x8FDE;&#x63A5;

select *&#xA0; from Students s full&#xA0; join Class c&#xA0;&#xA0; on s.ClassId=c.ClassId

--&#x5168;&#x8FDE;&#x63A5;&#x52A0; on &#x67E5;&#x8BE2;

select *&#xA0; from Students s full&#xA0; join Class c&#xA0;&#xA0; on s.ClassId=c.ClassId and s.Sex= '&#x7537;'

SQL(1)-join使用

Where的用法就不描述了因为这个咱们用的都比较多,下面说明一下两者的概念问题:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录(以左连接为例)。
2、where条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。

结论:

on用作于生成临时表时的条件筛选,where用作于对临时表中的记录进行过滤。

参考文献:SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别

Original: https://www.cnblogs.com/eilearn/p/15208372.html
Author: 深度机器学习
Title: SQL(1)-join使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8102/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部