• oracle 多表查询


    1.注意点

    在查询过程中,不确定数据库表中的数据量,先查询数据量,数据量较大,则不能直接查询(select * from emp),如果数据量较大,直接查询容易造成死机或者数据读取较慢,如果较小可以查询。

    查询数据量   count(*)

    select count(*) from emp;  从emp表中查询数据量(也就是数据记录数量)

    2.表别名

    访问表字段时通常会使用“表名.字段”的显示方法,假设表名很长时,可以给表名起一个别名,用别名.字段名表示。

    select * from user-dep-leader e where e.name="liu"

    将表名user-dep-leader起一个别名e,用e.name 表示user-dep-leader.name

    3.查询多表

    当查询多表时,例如有两个表,emp和dept,数据量分别为2和3,则直接查询的数据量为6,这种操作叫做笛卡尔积。(多张表的数据乘积)

    select * from emp,dept;  数据量为6;

    因此,要多表查询,首先要消除笛卡尔积。

    (1)采取关联字段

    select e.name , e.job,m.name from dept e, emp m where e.deptno=m.empno

    (2)左右连接

    左右连接,简单的理解就是查询的参考的方向。如果dept表中某些部门没有员工,使用内连接,没有员工的部门就没有显示,因此要使用以dept表为基准的外连接。而“(+)”就用于左、右连接的更改,这种符号有以下两种使用情况:

    • (+)=:放在了等号的左边,表示的是右连接;也就是以右边的列名为参考
    • =(+):放在了等号的右边,表示的是左连接;也就是以左边的列名为参考

    但是不用去刻意的区分是左还是右,只是根据查询结果而定,如果发现有些需要的数据没有显示出来,就使用此符号更改连接方向。

    如何查询数据库表中是否有重复数据

    比方说
    在A表中存在一个字段“name”,
    而且不同记录之间的“name”值有可能会相同,
    现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;

    Select Name,Count(*) From A Group By Name Having Count(*) > 1

    同时多参数查询是否有重复数据

    Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

  • 相关阅读:
    ✨Synchronized底层实现---偏向锁
    🌞LCP 13. 寻宝
    ✨Synchronized底层实现---概述
    ⛅104. 二叉树的最大深度
    c++多线程之顺序调用类成员函数
    C++ STL实现总结
    C#小知识
    C#中HashTable和Dictionary的区别
    WPF的静态资源(StaticResource)和动态资源(DynamicResource)
    WPF之再谈MVVM
  • 原文地址:https://www.cnblogs.com/aliy-pan/p/5556932.html
Copyright © 2020-2023  润新知