zoukankan      html  css  js  c++  java
  • oracle中的多表查询和子查询以及一些注意事项

    多表查询就是使用两张表及其以上的查询。首先需要知道几个名词,笛卡尔积,内连接,外连接,子查询。

    1)笛卡尔积

      所谓笛卡尔积其实就是两张表数据的条数相乘得到的最后结果,例如表1有10条数据,表2有4条数据,那么经过笛卡尔积之后最后的结果为40条数据,使用笛卡尔积缺点比较多,会产生很多没有用的数据。

    2)内连接

      内连接分为隐式和显示两种,显示就是使用inner join关键字,而隐式就是使用where关键字,根据关联字段建立的条件,例如where t1.id=t2.id 这就是隐式。

    3)外连接

      外连接也分两种,左外连接,右外连接。

      左外连接:使用left join 关键字,它返回的是左表的所有记录,如果右表中没有满足条件的记录,则返回空值。

      右外连接:使用right join 关键字,意思和左外连接相反。  

      在oracle中有一个特殊的符号(+),用它也可以达到左右外连接的效果,用法例如:e2.empno(+) =e3.empno,表示如果e3表在e2表中没有满足关系的记录,就返回空值。

    4)子查询

      子查询就是嵌套查询,例如 select .. from (selec....) where(select....),写法不一样,但就是这样的。

    5)exists 关键字

      exists(查询语句):数据量大时非常高效,当查询语句有结果的时候返回true否则返回false
    例如查询有员工的部门信息

    select *
    from dept d
    where exists
    (select * from emp e where e.deptno=d.deptno);

    6)集合运算

      集合运算:(将查询结果合并,应用场景:应用在来自不同数据的表时)
      交集:intersect
      并集:union(去除重复的,并且排序)/union all(不去除重复的)
      差集:minus关键字

      集合运算的注意事项:
        1.列的类型要一致
        2.按照顺序书写
        3.列的数量要一致,如果不足用null空值补全。

  • 相关阅读:
    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
    Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
    mysql-基本命令
    C# 监听值的变化
    DataGrid样式
    C# 获取当前日期时间
    C# 中生成随机数
    递归和迭代
    PHP 时间转几分几秒
    PHP 根据整数ID,生成唯一字符串
  • 原文地址:https://www.cnblogs.com/jasonboren/p/10914209.html
Copyright © 2011-2022 走看看