Oracle笔记 三、function 、select

Scott表下有这么几个常用的表,而且还带有数据。分别是emp、dept、salgrade;
1、查看表结构用desc
    desc emp;
 
2、空表dual,最常用的空表,如:
    select 2 * 4 from dual;
    select sysdate from dual;
 
3、双引号能保持格式
    如:select sysdate “toDay 日 期” from dual;
 
4、|| 字符串连接
    如:select 2*3 || 8 from dual;
    select ename || sal from scott.emp;
    select ename || ‘ORACLE’ from scott.emp;
 
5、单引号,如:select 2 * 2 || ‘abc‘‘efg‘ from dual;
    用两个单引号表示一个单引号
 
6、去掉重复数据distinct
    select distinct deptno from scott.emp;
    去掉重复组合:select distinct deptno,job from scott.emp;
 
7、where查询
    A、=查询,select * from scott.emp where sal = 1500;
 
    B、比较<、>、>=、<=
        select * from scott.emp where sal > 1500;
    C、and or
        select * from scott.emp where sal > 1500 and sal <= 5000 or deptno = 10;
    D、in、not in
        select * from scott.emp where sal in (1500, 800) and deptno not in (10, 20)
 
    E、like模糊 escape 转义
        Select * from scott.emp where ename like ‘%in%’;
        Select * from scott.emp where ename like ‘%in\%k%’;
        Select * from scott.emp where ename like ‘%in#%k%’ escape ‘#’;
        表示like中的#号是转义字符,相当于\
    F、is null、is not null
    K、    order by
        select sal, ename from scott.emp order by sal;
        select sal, ename from scott.emp order by sal asc;
        select sal, ename from scott.emp order by sal desc;
        select sal, ename from scott.emp where sal > 2000 order by sal desc;
        select sal, deptno, ename from scott.emp order by sal,deptno desc;
    
8、function
    A、lower、upper、substr
        select lower(‘abcABC’) from dual;
        select upper(‘abcABC’) from dual;
        substr(target, startIndex, length)
        select substr(‘abcABC’, 1, 3) from dual;
 
    B、chr、ascii
        将数字安装ascii值转换成字符:select char(65) from dual;
        将字符转换成ascii值:select ascii(‘Z’) from dual;
    
    C、round、to_char
        精确小数
        select round(22.456) from dual;
        保留2位小数:select round(22.456, 2) from dual;
        精确到个位:select round(22.456, -1) from dual;
    
        货币
        设置货币格式,000前面不足就用0代替
        select to_char(sal, ‘$000,000.00‘) from scott.emp;
        999就不会替换不足的地方,只会安装格式输出
        select to_char(sal, ‘$999,999.99‘) from scott.emp;
        本地货币格式
        select to_char(sal, ‘L999,999.99‘) from scott.emp;
 
        日期
        日期格式 
        格式控制 描述 
        YYYY、YYY、YY 分别代表4位、3位、2位的数字年 
        YEAR 年的拼写 
        MM 数字月 
        MONTH 月的全拼 
        MON 月的缩写 
        DD 数字日 
        DAY 星期的全拼 
        DY 星期的缩写 
        AM 表示上午或者下午 
        HH24、HH12 12小时制或24小时制 
        MI 分钟 
        SS 秒钟 
        SP 数字的拼写 
        TH 数字的序数词 
 
        “特殊字符” 假如特殊字符 
        HH24:MI:SS AM 15:43:20 PM
        select to_char(sysdate, ‘YYYY-MM-DD HH:MI:SS‘) from dual;
        select to_char(sysdate, ‘YYYY-MM-DD HH24:MI:SS‘) from dual;
 
     D、to_date、to_number、nvl
        to_date(target, current_format)
        select to_date(‘2011-4-2 17:55:55‘, ‘YYYY-MM-DD HH:MI:SS‘) from dual;
        select to_number(‘$12,322.56‘, ‘$999,999.99‘) + 10 from dual;
        select to_number(‘$12,322.56‘, ‘$00,000.00‘) + 10 from dual;
        select to_number(‘22.56‘) + 10 from dual;
        nvl可以将某个字段的空值转换成指定的值
        select ename, sal, nvl(comm, 1.00) from scott.emp;
 
9、group function 组函数:min、max、avg、sum、count
        select max(sal) from scott.emp;
        select min(sal) from scott.emp;
        select avg(sal) from emp;
        select round(avg(sal), 2) from emp;
        select to_char(avg(sal), ‘L999,999.99‘) from emp;
        select sum(sal) from emp;
        select count(comm) from emp;
        select count(distinct deptno) from emp;
 
10、group by 分组
    select deptno, avg(sal) from emp group by deptno;
    select deptno, job, avg(sal) from emp group by deptno, job;
    求部门最高工资的所在部门的员工信息:
    select deptno, ename, sal from emp where sal in (select max(sal) from emp group by deptno);
 
11、having 对分组数据进行过滤
    求部门评价工资:
    select * from (select avg(sal) sal, deptno from emp group by deptno) where sal > 2000;
    select avg(sal) sal, deptno from emp group by deptno having avg(sal) > 2000;
 
12、子查询
    求部门分组后工资最高的员工信息
    select emp.ename, emp.sal, emp.deptno from emp, (select max(sal) max_sal, deptno from emp group by deptno) t where emp.sal = t.max_sal and emp.deptno = t.deptno;
    求部门平均工资等级
    select s.grade, t.deptno, t.avg_sal from scott.salgrade s, (select deptno, avg(sal) avg_sal from emp group by deptno) t where t.avg_sal > s.losal and t.avg_sal < s.hisal;(between)
 
13、自连接
    select a.ename, b.ename mgr_name from emp a, emp b where a.empno = b.mgr;
 
14、 连接查询
    select dname, ename from dept, emp where dept.deptno = emp.deptno;
    select dname, ename from dept join emp on dept.deptno = emp.deptno;
    select dname, ename from dept join emp using(deptno);
    select dname, ename from dept left join emp on dept.deptno = emp.deptno;
    select dname, ename from dept right join emp on dept.deptno = emp.deptno;
    select dname, ename from dept full join emp on dept.deptno = emp.deptno;
    select a.ename, b.ename mgr_name from emp a join emp b on a.mgr = b.empno;
    select a.ename, b.ename mgr_name from emp a left join emp b on a.mgr = b.empno;
 
15、 Rownum
    select rounum, deptno, dname from dept;
    select * from (
         select rownum r, dept.* from dept
    ) t where  t.r > 2;
 
16、树状结构查询
    select level, empno, ename, mgr from emp
    connect by prior mgr = empno;
 
17、排序函数
    --按部门分组,给出分组后的序号
    select row_number() over(partition by deptno order by sal), emp.* from emp;
    
    --rank排序,空出相同部分
    select rank() over(partition by deptno order by sal), emp.* from emp;
    select rank() over(order by deptno), emp.* from emp;
    select rank() over(order by sal), emp.* from emp;
    
    --dense_rank排序给出相同序号,不空留序号
    select rank() over(order by sal), emp.* from emp;
    select dense_rank() over(order by sal), emp.* from emp;
 
18、交集、并集、割集查询
    --并集:不带重复数据
    select * from emp
    union
    select * from emp2;
    
    --并集:带重复数据
    select * from emp
    union all
    select * from emp2;        
    
    --割集,显示不同部分
    select * from emp
    minus
    select * from emp2;
 
19、 查询系统表、视图
    select owner, object_name, object_type, status, dba_objects.* from dba_objects where object_type = ‘view‘ and status = ‘invalid‘;
 
    select * from user_objects where object_type like ‘PROCEDURE‘;
 
20、练习题
    --部门最高薪资员工信息
    select ename, sal, deptno from emp 
    where sal in (select max(sal) from emp group by deptno);
    
    --部门最高薪资员工信息
    select ename, sal, emp.deptno from emp 
    join (select max(sal) max_sal, deptno from emp group by deptno) t 
    on emp.deptno = t.deptno and emp.sal = t.max_sal;
    
    --部门平均薪资等级
    select grade, losal, hisal, t.avg_sal from salgrade 
    join (select avg(sal) avg_sal, deptno from emp group by deptno) t
    on t.avg_sal between losal and hisal;
    
    --经理人
    select ename, job from emp where empno in (select mgr from emp);
    
    --不用分组函数,查询薪水最高值
    select * from (select sal, ename from emp order by sal desc) where rownum = 1;
    select distinct a.sal from emp a join emp b on a.sal > b.sal where rownum = 1;
    select sal from emp where sal not in (select distinct a.sal from emp a join emp b on a.sal < b.sal);
    
    --部门平均薪水最高的部门编号
    select deptno, t.avg_sal from (select avg(sal) avg_sal, deptno from emp group by deptno) t
    where avg_sal = (
        select max(avg_sal) max_sal from (select avg(sal) avg_sal, deptno from emp group by deptno)
    );
    
    select deptno, t.avg_sal from (select avg(sal) avg_sal, deptno from emp group by deptno) t
    where avg_sal = (
        select max(avg(sal)) max_sal from emp group by deptno
    );
    
    --部门平均薪水最高的部门名称
    select dname from dept where deptno = (
     select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) t
     where avg_sal = (
            select max(avg_sal) max_sal from (select avg(sal) avg_sal, deptno from emp group by deptno)
     )
    );
    
    select dname from dept where deptno = (
        select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) t
        where avg_sal = (
               select max(avg(sal)) from emp group by deptno
        )
    );
    
    --平均薪水最低的部门的部门名称
    select dname from dept where deptno = (
      select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) 
      where avg_sal = (
        select min(avg_sal) min_sal from (
               select avg(sal) avg_sal from emp group by deptno
        )
      )
    );
    
    select dname from dept where deptno = (
        select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) 
        where avg_sal = (    
          select min(avg(sal)) avg_sal from emp group by deptno
        )
    );
    
    --平均薪水等级最低的部门的部门名称
    select dname from dept where deptno = (
    select deptno from (
         select grade, t.deptno from salgrade s join (
            select avg(sal) avg_sal, deptno from emp group by deptno
         ) t
         on t.avg_sal between s.losal and s.hisal
      )
      where grade = (
        select min(grade) from salgrade s join (
            select avg(sal) avg_sal, deptno from emp group by deptno
        ) t
        on t.avg_sal between s.losal and s.hisal
      )
    );
    
    --部门经理人中,平均薪水最低的部门名称
    select t.deptno, dname from (
        select sal, deptno from emp where empno in (select distinct mgr from emp)
    ) t join dept 
    on t.deptno = dept.deptno
    where sal = (
        select min(sal) from emp where empno in (select distinct mgr from emp)
    );
    
    --比普通员工的最高薪水还要高的经理人名称
    select * from (
        select empno, ename, sal from emp where empno in (select distinct mgr from emp where mgr is not null)
    ) t
    where t.sal > (
        select max(sal) max_sal from emp where empno not in (
         select distinct mgr from emp where mgr is not null
        )
    );
时间: 2024-11-03 02:49:51

Oracle笔记 三、function 、select的相关文章

Oracle笔记 目录索引

Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Oracle笔记 五.创建表.约束.视图.索引.序列.同义词.表空间 Oracle笔记 六.PL/SQL简单语句块.变量定义 Oracle笔记 七.PL/SQL 异常处理 Oracle笔记 八.PL/SQL跳转/判断/循环语句块 Oracle笔记 九.PL/SQL 游标的使用 Oracle笔记 十.PL

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH

Oracle笔记(三) Scott用户的表结构

Oracle笔记(三) Scott用户的表结构 在Oracle的学习之中,重点使用的是SQL语句,而所有的SQL语句都要在scott用户下完成,这个用户下一共有四张表,可以使用: SELECT * FROM tab; 查看所有的数据表的名称,如果现在要想知道每张表的表结构,则可以采用以下的命令完成: DESC 表名称: 1.  部门表:dept № 名称 类型 描述 1 DEPTNO NUMBER(2) 表示部门编号,由两位数字所组成 2 DNAME VARCHAR2(14) 部门名称,最多由1

Oracle笔记之权限管理

权限管理 1,默认的三个用户 2,创建用户 3,授权,撤销权限 4,系统权限与对象权限 5,角色 6,通过角色对权限进行管理 7,权限的传递,丢失管理员密码怎么办 3个默认的用户 用户名        密码 sys            change_on_install system      manager scott          tiger cmd 进入命令行 sqlplus / as sysdba; 或者 sqlplus sys/change_on_install as sysdb

Ajax学习笔记(三)

三.jQuery库详解 1.使用jQuery之后,javascript操作的不再是HTML元素对应的DOM对象,而是包装DOM对象的jQuery对象.js通过调用jQuery对象的方法来改变它所包装的DOM对象的属性,从而实现动态更新HTML页面. 由此可见,使用jQuery动态更新HTML页面只需以下两个步骤: (1)获取jQuery对象.jQuery对象通常是DOM对象的包装 (2)调用jQuery对象的方法来改变自身.当jQuery对象被改变时,jQuery包装的DOM对象随之改变,HTM

转:oracle笔记

oracle笔记1 卸载oracle developer server的方法: 1-1 oracle卸载工具中卸载对应的oracleds项目:在注册表中搜索ORACLEDS HOME对应的别名,删除对应的项:重新启动计算机:删除对应的ORACLEDS的安装目录: 2jinitiator的相关问题: 2-1 jinitiator是oracle自己的applet viewer工具: 2-2 在第一次打开web应用程序时会自动提示安装该程序,如果不安装则无法打开程序: 2-3 jinitiator是在

Oracle笔记(六) 多表查询

Oracle笔记(六) 多表查询 本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查询一起完成各个复杂查询的操作: 一.多表查询的基本概念 在之前所使用的查询操作之中,都是从一张表之中查询出所需要的内容,那么如果现在一个查询语句需要显示多张表的数据,则就必须应用到多表查询的操作,而多表查询的语法如下: SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名]

Oracle笔记(十一) 建表、更新、查询综合练习

Oracle笔记(十一) 建表.更新.查询综合练习 有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓

Oracle笔记(十) 约束

Oracle笔记(十) 约束 表虽然建立完成了,但是表中的数据是否合法并不能有所检查,而如果要想针对于表中的数据做一些过滤的话,则可以通过约束完成,约束的主要功能是保证表中的数据合法性,按照约束的分类,一共有五种约束:非空约束.唯一约束.主键约束.检查约束.外键约束. 一.非空约束(NOT NULL):NK 当数据表中的某个字段上的内容不希望设置为null的话,则可以使用NOT NULL进行指定. 范例:定义一张数据表 DROP TABLE member PURGE; CREATE TABLE