zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JavaScript模态对话框类
    事件模块的演变(1)
    html5中可通过document.head获取head元素
    How to search for just a specific file type in Visual Studio code?
    What do 'lazy' and 'greedy' mean in the context of regular expressions?
    正则非获取匹配 Lookahead and Lookbehind ZeroLength Assertions
    regex length 正则长度问题
    Inversion of Control vs Dependency Injection
    How to return View with QueryString in ASP.NET MVC 2?
    今天才发现Google Reader
  • 原文地址:https://www.cnblogs.com/aliy-pan/p/5556932.html
Copyright © 2011-2022 走看看