再学·Oracle-数据库-02

多表查询:

    笛卡尔积:实际上就是两张表的乘积

      格式:select * from 表1,表2  得到的查询结果是两张表数据的乘积,然后拼接起来的表。在实际开发中没有太大的意义。

      真正的开发中,这样的才是常用的:select * from emp e1 ,dept d1 where e1.deptno=d1.deptno;这就是常用到的表拼接。

    内连接:

             隐式内连接:

                      等值内连接,和我们上边的例子是一样的。e1.deptno=d1.deptno;

                      自连接:

                         

             显示内连接:select * from 表1 inner join 表2 on  连接条件;inner关键字可以省略。

外连接

    左外连接:left outer join ;左表中的全部的记录,如果右表没有记录就显示为空

    右外连接:right  outer join;右表用的所有记录,如果左表没有对应的记录就显示为空。

子查询:查询语句里边嵌套查询语句。通过嵌套来解决复杂的问题。

   需求:查询最高工资的员工信息。select * from emp where  sal=(select max(sal) from emp);

   多行子查询需要注意的问题:一定要注意空值的问题,控制不代表不占空间。最好的方法是加上一个判断 先来一个子查询,查出所有的不为空的数据行,再做多行查询。

exists(查询语句):存在的意思。数据量比较大的时候是非常高效的。

   

rownum:伪列     

      伪列是用来表示行号,系统自动生成的。rownum不能做大于号判断,这能小于号判断。

select  rownum  ,e1.*  from emp  e1  where rownum>2; 查询出来的结果是空。因为不能做大于号判断。

rownum的应用场景:分页查询

 

其它练习: 

 rowid的应用场景:去重

  去除表中重复的记录:

 集合运算:

 并集运算:union         union all 

  查询语句1  union  查询语句2 ;得到的结果是去重后的结果,并且会根据第一列进行默认的排序。

  查询语句1  union  all 查询语句2 ;得到的是全部的结果,即使有重复的也会保留。

差集运算:关键字 minus

  查询语句1  minus 查询语句2 ;

集合运算中的注意事项:

列的类型要一致,最好是列按照顺序写,否则就会列的类型不匹配。列的数量也一定要一致,否则就会报错 。如果数据来源与两张不同的表,两张表的列又不相同,那么谁少列,就用null来补齐。

               

猜你喜欢

转载自blog.csdn.net/star1210644725/article/details/83047829