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

oracle数据库单表查询并且按照主键ID排序

发布网友 发布时间:2022-04-29 21:36

我来回答

6个回答

懂视网 时间:2022-04-30 01:57

(一)基本语句 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-29 23:05

    id用1,2,3,4,5.....纯数字的,你怎么会把它定义为varchar类型?
    解决步骤:
    (1)新建一个表A,表结构和ib_sql 一样,但把id定义为NUMBER类型。
    (2)把ib_sql 中的所有数据插入到A中:INSERT INTO A SELECT * FROM ib_sql ;
    (3)DROP TABLE ib_sql;
    (4)把表A改名为ib_sql: ALTER TABLE A RENAME TO ib_sql;
    (5)再执行你上面的语句就可以实现排序

    热心网友 时间:2022-04-30 00:23

    如果是oracle应该没问题的,如果实在不行就order by number(id) asc 以数字型的排序肯定行。

    热心网友 时间:2022-04-30 01:58

    排序的话,可以通过order by 来实现。
    sql:select * from tablename order by ID;
    备注:默认的是升序(ASC),也可以让其降序(desc)进行排列。
    sql:select * from tablename order by ID desc;

    热心网友 时间:2022-04-30 03:49

    select id,name,ename,desc1 from ib_sql order by to_number(id );

    转为数字再排序

    热心网友 时间:2022-04-30 05:57

    var类型的不能排序,用int
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    word绘制施工进度横道图!表格好了,中间的横道杂往上打!!!急急急_百 ... 如何用 SWOT 模型进行自我分析? 求朋友圈、公众号文案排版工具? 写文案用什么软件 回复文案的软件推荐 学习挖掘机需要什么条件 学挖机新手从哪里学 挖掘机学习都学什么 新手学开挖掘机先学哪些 手工麦芽糖怎么做? 麦芽糖怎么做小零食 当年谢贤被称四哥,周润发被称二哥,那么大哥和三哥是谁呢? 华为哪款手机有耳机孔 vray材质教程 四种材质调节法介绍 3dmax9中怎么使用vray材质 vary材质库怎么用 vray的材质调法 VRAY混合材质怎么用? 怎样将下载的Vray材质导入vray里使用? 期货交易的平多仓和开同样数量的空仓有区别吗?保证金怎么拿回来啊? 期货中成交术语如何理解,如多开,空平等? 请问您说平多仓的买入后再卖出和平空仓卖出后再买入是什么意思? 平多翻空是什么意思 BTC平多和平空什么意思? 酷我音乐盒2015桌面歌词不同步怎么调节 OKEX永续合约交易中的“买入开多”“卖出平多”“卖出开空”“买入平空”分别是什么意思? 哪家视频营销公司比较专业? 视频营销公司怎么选择? 这个页面的,买多,卖空,平多,平空,对手,排队,最新价,是啥意思? 视频营销的公司如何选择? 股指期货开多仓和平多仓的区别 韦恩图又叫做集合圈正确吗 什么叫韦恩图啊?最好有图解 什么是韦恩图,什么是文氏图? 集合图是哪个国家发明的是谁发明的 韦恩(Venn)图 集合圈是谁发明的他的名字叫什么 什么是集合图 怎样用Venn图表示集合的关系? 请问,相互独立的事件A,B,如果用韦恩图(集合思想)表示,要如何画图,求分 ... 关于集合的韦恩图怎么画? 集合与韦恩图的关系 集合韦恩图描述 集合韦恩图题这样做可以秒杀,学霸动手练起来 安卓怎么给软件里面加密码,就是别人打开软件要密码才可以进的。求解。 咋下载万年历 俄罗斯沙拉肉怎么做,腌制多久可以食用? 安卓给软件加密 并集的Venn图一定有重合部分吗?并集和交集的Venn图有什么区别? 俄罗斯沙拉生肉怎么做窍门 数学集合图又叫什么