问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle 单表查询受外键影响吗?

发布网友 发布时间:2022-04-07 20:38

我来回答

3个回答

懂视网 时间:2022-04-08 01:00

(一)基本语句 1、语法
  • select 【distinct】 * | {列名...}  from 表名 【where {条件}】
  • 2、注意 1)distinct:指显示结果时,是否剔除重复数据
  • 指查询的字段数据,全部一致,才算重复。
  • SELECT distinct deptno,job,empno FROM EMP order by deptno;
  • 查询的这(deptno,job,empno)三个字段需要一样,才算重复。
  • SELECT a.deptno,a.job FROM EMP a; 
    SELECT distinct a.deptno,a.job FROM EMP a order by a.deptno
    
    
  • 查询的这(deptno,job)2个字段需要一样

  • 2)去重:
    SELECT a.deptno,a.job FROM EMP a; 
    SELECT distinct a.deptno,a.job FROM EMP a order by a.deptno
  • 查询的这(deptno,job)2个字段需要一样
  • (二)其他用法 1、算数表达式 1)方法:
  • ABS(x) :绝对值
  • sign(x) :判断正负。
  • 正值返回1,负值返回-1,0返回0
  • ceil(x):向上取整。
  • select ceil(3.1),ceil(0),ceil(-3.9) from dual; --4、0、-3
  • floor(x) :向下取整。
  • power(x,y) :返回x的y次幂 
  • mod(x,y) :返回x除以y的余数
  • round(x[,y]) :返回四舍五入后的值 
  • trunc(x[,y]) :返回x按精度y截取后的值 。*
  • select trunc(5555.66666,2.1),trunc(5555.66666,-2.6),trunc(5555.033333) from dual;

  • 显示:5555.66、5500、5555
  • sqrt(x) :返回x的平方根
  • 2)、实例:显示每个雇员的年工资
  • 语句:
  • SELECT a.ename,(a.sal*13+nvl(a.comm,0)*13) as "年薪", a.ename||'-'||(a.sal*13+nvl(a.comm,0)*13) as "拼接字串"FROM EMP a ;

  • comm:为奖金
  • 注意:
  • nvl(字段,0):处理null值
  • as "" :增加别名
  • ||:拼接字串
  • 2、where 条件 1)to_char()函数:
    SELECT * FROM EMP a WHERE to_char(a.hiredate,'yyyy-mm-dd') > '1981-11-17';

    2)like:‘%’-0~多个;‘_’-1个 3)between:薪水在2000~2500的员工
    SELECT * FROM EMP a WHERE a.sal between 2000 and 2500;--包含本身,都是闭区间SELECT * FROM EMP a WHERE a.sal >= 2000 and a.sal <= 2500;

    4)in:员工编号号为7369,7521,7654的员工
    SELECT * FROM EMP a WHERE a.empno in (7369,7521,7654);


    5)is null :没有上级的员工
    SELECT * FROM EMP a WHERE a.mgr IS NULL;

    6)逻辑操作符:NOT 、And 、Or
    SELECT * FROM EMP a WHERE (a.sal >500 or a.job='MANAGER') and a.ename like 'J%';
  • and 与 or的优先级:NOT > AND > OR
  • where 后面如果有or的条件,则or自动会把左右的查询条件分开
  • 用()来区分执行顺序
  • 7)order by:对结果进行排序(先有结果,支持对别名排序)
  • asc-升序(默认)/desc-降序
  • 排序实例
  • SELECT * FROM EMP a order by a.sal;--一个条件
    SELECT * FROM EMP a order by a.deptno , a.hiredate desc;--2个条件

  • 先按deptno 排序
  • 在第一个排序结果中,按第二个条件。
  • 按列的别名排序
  • SELECT a.ename,(a.sal*13+nvl(a.comm,0)*13) as "年薪" FROM EMP a order by 年薪;
  • 这边可以按照列的编号排序
  • SELECT a.ename,(a.sal*13+nvl(a.comm,0)*13) as "年薪" FROM EMP a order by 1;
  • 这边的编号,不能超出显示的列的数量。

  • 二、聚合函数:max、min、avg、sum、count
    1、取最高和最低工资:max、min 1)SQL实例
    SELECT max(a.sal),min(a.sal) FROM emp a ;
    SELECT max(a.sal*13) , min(a.sal*13) FROM emp a ;
  • --放在一起,前提条件是max 和min都返回一个值
  • 2)注意:max 与min 只能返回一个值。
    2、显示平均工资与工资总额:avg、sum 1)SQL实例
    SELECT round(avg(a.sal),2),sum(a.sal) FROM emp a ;
  • round:四舍五入
  • 2)注意:avg:计算平均值,不会把sal为null的统计在内
    SELECT avg(a.comm) FROM emp a ;
    SELECT sum(a.comm)/count(*) FROM emp a ;
  • 为空的参与,可以这么解决
  • 3、计算总的员工数:count 1)SQL实例
    SELECT count(*) FROM emp a ;SELECT count(a.empno) FROM emp a ;

    2)注意:
    SELECT count(a.comm) FROM emp a ;
  • 不统计 null 的列。
  • 4、扩展练习 1)显示工资最高的员工的名字,工作岗位
    SELECT a.ename,a.job FROM emp a WHERE a.sal = (SELECT max(a.sal) FROM emp a);
  • 子查询
  • 可以先查出最高工资
  • 然后查出哪位员工的工资是这么多
  • 分析执行顺序
  • sql执行默认是从右到左执行
  • 先执行:SELECT max(a.sal) FROM emp a 得到 5000
  • 再执行:SELECT a.ename,a.job FROM emp a WHERE a.sal =5000;
  • 2)显示工资高于平均工资的员工信息
    SELECT a.ename,a.job FROM emp a WHERE a.sal > (SELECT avg(a.sal) FROM emp a);

    三、分组:group by 和 having
    1、解释:
  • group by:对查询的结果进行分组统计
  • having:修饰分组的条件,限制分组显示结果。
  • 不支持别名
  • 2、实例: 1)显示每个部门的平均工资和最高工资
  • SQL:
  • SELECT avg(a.sal), max(a.sal),a.deptno FROM emp a group by a.deptno;
  • 分析:
  • SELECT avg(a.sal), max(a.sal),a.deptno FROM emp 报错
  • avg(a.sal) 和max(a.sal)为一个结果,而 a.deptno 很多结果。
  • 2)显示每个部门的每种岗位的平均工资和最低工资
  • SQL:
  • SELECT avg(a.sal), max(a.sal),a.deptno,a.job FROM emp a group by a.deptno ,a.job order by a.deptno ;
  • 分析:
  • 先对【部门】分组,再对【岗位】分组。
  • 【排序】都是放在末尾

  • 3)显示部门平均工资低于2000 的部门号和它的平均工资
  • SQL:
  • SELECT avg(a.sal) as "平均工资", a.deptno FROM emp a group by a.deptno having avg(a.sal)<2000
  • 分析:
  • having:限制分组显示结果。后面不支持别名,只能重新计算。
  • 先分组,计算各个部门的平均工资。再利用having对分组后的结果进行删选。
  • 3、原则总结: 1)聚合函数(avg...)只能出现在选择列表、having、order by 子句中,绝不能出现在group by  函数 和where中。 2)如果在 select 语句中同时包含 group by 、having、order by 那么他们的顺序是 group by 、having、order by 。 3)在选择列中如果有列、表达式和聚合函数,那么这些列和表达式必须有一个出现在 group by 子句中,否则就会出错。
  • SELECT avg(a.sal), max(a.sal),a.deptno,a.job FROM emp a group by a.deptno, a.job;
  • 这边的 deptno 和 job 必须都要 出现在 group by 中。
  • 原因为聚合函数 每次返回一个结果

  • Oracle基础(四):单表查询

    标签:order by   group by   having   where条件   聚合函数   

    热心网友 时间:2022-04-07 22:08

    在Oracle数据库中,外键是强制实施参照完整性的一种方式,我们约定主键表为主表,外键表为从表,使用外键就意味着一个表中的值在另一个表中也必须出现,指挥在修改时受到影响,在查询时是不受影响的。

    或者在查询时也可以禁用外键,语法参考:

    热心网友 时间:2022-04-07 23:26

    正确答案应该是不受影响的
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 饿了么商家怎么不接固定地址订单 的少儿超能宝一个月了,我想退保,请问扣多少钱 京东白条闪付身份证认证不了怎么办? 太平洋超能宝白癜风能理赔吗? 超能宝交了2700半年退保能退多少钱 饿了么订单客人电话打不通,地址不详细怎么办 - 信息提示 脸过敏导致下巴起皮 干 痒应怎么办? 上传的身份证照片没有问题,为什么审核没有通过? 少儿超能宝2.0保险理赔 昨天烫了的蒜台泡了一晚上还能吃吗? 每到秋冬下巴就又干又起皮是怎么回事? 千丝万缕打一生肖,不要乱说的,说明原因的 荣耀手机和荣耀IPAD怎么同步 京东实名为何我上传照片老是失败? 下巴老起皮怎么回事 财源求证3肖6码 荣耀手机怎样同步连接桌面音乐 下巴起皮是怎么回事,有点像癣一样。但是不疼不痒 我的下巴起皮发痒是缺水现象吗? 京东金条为什么上传身份证照片没反应 在网上营业厅购买卡提示身份证照片信息审核失败了怎么办? 六个数复式三中三共多少组 网上办理身份证照片审核没有通过还能再次申请办理么? 为什么京东金条上传身份证时被驳回 深圳欧阳杰是骗子吗?那个6肖选1肖的 生肖的资料 YY频道怎么设置声音 真珍珠的首饰能带着洗澡吗? 请问我长期戴着珍珠项链洗澡会不会对珍珠造成损害? 珍珠路路通吊坠能带着洗澡吗 如何保养珍珠项链 珍珠项链在洗澡时要取下来吗? 自然珍珠项链不能贴水吗 珍珠项链戴过之后可以用清水浸泡吗 晚上睡觉可以带着珍珠项链吗 珍珠项链多带对保养好吗?睡觉的时候能戴着吗 珍珠项链戴久了会掉色麽 请问一下各位网络大神,有什么好用的电脑软件。跟火绒之类的这些类似的? 请问哪个杀毒软件好?有火绒,qq安全管家,哪个好?