欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

大数据学习从入门到精通(day4集合、联合查询)

时间:2023-05-12
一、集合

集合的定义: 每一个SQL查询的结果就是一个集合。

关键词:

并集:union、union all 取两个集合(查询结果)中所有的元素

两者的区别:union all 不会将相同的数据合并,而union会将查询的结果排序删除重复的元素,因此union的效率不如union all 但是在实际的运用中要选择合适的关键词进行查询。

交集:intersect 取两个集合(查询结果)中相同的元素

差集:minus 取第一个集合减去两个集合中相同部分的元素

举例:

并集SELECt * FROM EMP WHERe SAL>1000UNIOn ALLSELECt * FROM EMP WHERe SAL>2000;SELECt * FROM EMP WHERe SAL>1000UNIOnSELECt * FROM EMP WHERe SAL>2000;

交集SELECt * FROM EMP WHERe SAL>2000INTERSECTSELECt * FROM EMP WHERe SAL<2500;SELECt * FROM EMP WHERe SAL>2000 AND SAL<2500;

差集SELECt * FROM EMP WHERe SAL>1000MINUSSELECt * FROM EMP WHERe SAL>2000;

 使用这些关键词时,第一条查询结尾处不加“;”第二条查询结尾处一定要加“;”

二、联合查询

交叉连接(笛卡尔积连接)、内连接、自连接、外连接(全连接、左外连接、右外连接)、自然连接。

1.交叉连接(笛卡尔积连接):

将两个表中的每一行数据进行连接并输出,数据的数量是两个表行数的乘积。

语法:select 列名,列名,...from a表  cross join b表;

举例:

SELECt e.*,d.deptno dno,d.dname,d.loc FROM EMP e CROSS JOIN DEPT D;SELECt e.*,d.deptno dno,d.dname,d.loc FROM EMP e,DEPT D;

 2.内连接

将两个符合条件的数据连接到一起,不符合条件的不会显示。

语法:select 列名,...,列名 from a表  inner join b表  on 连接条件;

举例:

SELECt * FROM EMP e INNER JOIN DEPT d ON e.DEPTNO=d.DEPTNO;

使用内连接时如果有一条数据他的连接条件中的字段为null,那么这条数据不会产生连接,查询结果中不会显示该条数据,这样从某种程度上来说使用内连接查询会导致数据丢失的情况。

3.自连接

自连接是将表自身相连接

语法:select 列名,...,列名 from a表 join a表  on 连接条件;

举例:

SELECt e1.*,e2.ENAME FROM EMP e1 JOIN EMP e2 ON e1.MGR=e2.EMPNO;

4.不等连接

当连接条件是不等条件时使用不等连接,通常确定一个值的属于的范围、等级等。

举例:

SELECt * FROM EMP E JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL;

5.全连接

全连接会查出两个表中所有的数据,如果两个表中的数据都符合连接条件,那么它会和内连接一样,将符合条件的数据连接为一条记录,如果第一表中的一条数据,在第二张表中没有找到和它对应的记录(第二张表没有和第一张表这条数据符合连接条件), 那么它同样会显示第一张表的这条记录,同时它对应的第二张表数据的位置会显示为空。

语法:

select 列名,列名,列名,....from 表A full outer join 表B on 连接条件;

举例:

SELECt * FROM EMP e FULL JOIN DEPT d on e.DEPTNO=d.DEPTNO;

6.左外连接和右外连接

左外连接:会根据左表的所有数据去连接右表对应的数据,如果左表的数据在右表查询不到就会显示null;

关键词:left join

右外连接:与左外连接相反,根据右表的数据连接左表,查询不到显示null;

关键词:right join

SELECt * FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO=D.DEPTNO;SELECt * FROM EMP E RIGHT JOIN DEPT D ON E.DEPTNO=D.DEPTNO;

7.自然连接

自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。

语法:
select col_name,col_name,...from table_a natural join table_b;
   
select col_name,....from table_a join table_b using(关系列)
select * from emp natural join dept;        --自然连接
select * from emp join dept using(deptno);  --自然连接using用来指定关系列

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。